gogo

package module
v2.1.20+incompatible Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 2, 2020 License: MIT Imports: 20 Imported by: 0

README

GoGo Logo

Go 语言轻量 web 开发框架,特点是一行代码搞定 RESTFul,不依赖第三方 ORM,也不需要生成一堆的 controllers 和 models 文件,快速使用。

背景

后台数据库有 100 多张表,用 BeeGo 等框架,需要生成 controllers 和 models 等文件共 200 多个,鼠标滑都滑不过来。每次表字段一有修改,代码就要统统跟着修改,想想都恐怖,于是就做了这个轻量的 web 开发框架,支持多协程任务、websocket、日志输出,批量增删改查。

快速使用

package main

import (
	"net/http"
	"strconv"

	"gitee.com/konyshe/gogo"
)

func main() {

	//初始化日志输出功能
	gogo.LogInit("DEBUG", 1024)

	// 初始化数据库连接
	if err := gogo.SQLInit("mysql", "数据库用户名:数据库密码@tcp(数据库地址:数据库端口)/表名?charset=utf8", 10, 1); err != nil {
		gogo.CheckErrorExit(err)
		return
	}

	// 增
	gogo.POST("/restful/:tablename", func(ctx *gogo.HTTPContext) {
		affect, err := gogo.SQLInsert(
			ctx.GetPathParam(":tablename"),
			ctx.GetPostBody())

		if err != nil {
			gogo.LogError(err)
			ctx.WriteString(err.Error())
		} else {
			ctx.WriteString(strconv.FormatInt(affect, 10))
		}
	})

	// 删
	gogo.DELETE("/restful/:tablename/:id", func(ctx *gogo.HTTPContext) {
		affect, err := gogo.SQLDelete(
			ctx.GetPathParam(":tablename"),
			"id="+ctx.GetPathParam(":id"))

		if err != nil {
			gogo.LogError(err)
			ctx.WriteString(err.Error())
		} else {
			ctx.WriteString(strconv.FormatInt(affect, 10))
		}
	})

	// 改
	gogo.PUT("/restful/:tablename/:id", func(ctx *gogo.HTTPContext) {
		affect, err := gogo.SQLUpdate(
			ctx.GetPathParam(":tablename"),
			"id="+ctx.GetPathParam(":id"),
			ctx.GetPostBody())

		if err != nil {
			gogo.LogError(err)
			ctx.WriteString(err.Error())
		} else {
			ctx.WriteString(strconv.FormatInt(affect, 10))
		}
	})

	// 查
	gogo.GET("/restful/:tablename/:id", func(ctx *gogo.HTTPContext) {
		queryData, err := gogo.SQLQueryByMap(
			"",
			ctx.GetString("feilds"),
			ctx.GetPathParam(":tablename"),
			"id="+ctx.GetPathParam(":id"),
			"", 0, 1)

		if err != nil {
			gogo.LogError(err)
			ctx.WriteString(err.Error())
		} else {
			ctx.WriteJSON(queryData)
		}
	})

	// 查
	gogo.GET("/restful/:tablename", func(ctx *gogo.HTTPContext) {
		queryData, err := gogo.SQLQueryByMap(
			ctx.GetString("columnname"),
			ctx.GetString("feilds"),
			ctx.GetPathParam(":tablename"),
			ctx.GetString("where"),
			ctx.GetString("order"),
			ctx.GetInt("offset", 0),
			ctx.GetInt("count", 10))

		if err != nil {
			gogo.LogError(err)
			ctx.WriteString(err.Error())
		} else {
			ctx.WriteJSON(queryData)
		}
	})

	// 404页面
	gogo.STATUS(http.StatusNotFound, func(ctx *gogo.HTTPContext) {
		ctx.WriteHeaderStatus(http.StatusNotFound)
		ctx.WriteString("Page Not Found !")
	})

	// 启动HTTP服务
	gogo.StartHTTP(3009)
}

数据库表结构

mysql> desc dede_flink;
+----------+----------------------+------+-----+---------+----------------+
| Field    | Type                 | Null | Key | Default | Extra          |
+----------+----------------------+------+-----+---------+----------------+
| id       | smallint(5) unsigned | NO   | PRI | NULL    | auto_increment |
| sortrank | smallint(6)          | NO   |     | 0       |                |
| url      | char(60)             | NO   |     |         |                |
| webname  | char(30)             | NO   |     |         |                |
| msg      | char(200)            | NO   |     |         |                |
| email    | char(50)             | NO   |     |         |                |
| logo     | char(60)             | NO   |     |         |                |
| dtime    | int(10) unsigned     | NO   |     | 0       |                |
| typeid   | smallint(5) unsigned | NO   |     | 0       |                |
| ischeck  | smallint(6)          | NO   |     | 1       |                |
+----------+----------------------+------+-----+---------+----------------+
10 rows in set

Windows

go build -o app.exe
app.exe

Linux/MacOS

go build -o app
./app

浏览器访问测试

POST http://localhost:3009/restful/dede_flink

以下是 application/json 内容,可以批量添加多条数据

[
	{
    	"id": 20,
    	"ischeck": 1,
    	"webname": "hxyw",
    	"url":"http://www.hxyw.org"
	},
	{
    	"id": 21,
    	"ischeck": 1,
    	"webname": "bejson",
    	"url":"http://www.bejson.com"
	}
]
PUT http://localhost:3009/restful/dede_flink/21

以下是 application/json 内容,这里只将 id=21 的数据,webname 字段修改为"hello"

{
    "webname": "hello"
}
GET http://localhost:3009/restful/dede_flink/21
GET http://localhost:3009/restful/dede_flink?order=-id
GET http://localhost:3009/restful/dede_flink?offset=10&&count=100&&columnname=webname
DELETE http://localhost:3009/restful/dede_flink/1
  • 404
GET http://localhost:3009/weqwe

Start using it

  1. Download and install it:
$ go get -u gitee.com/konyshe/gogo
  1. Import it in your code:
import "gitee.com/konyshe/gogo"
  1. (Optional) Import net/http. This is required for example if using constants such as http.StatusNotFound.
import "net/http"

示例中的方法介绍,更全的请看代码中的注释

// LogInit 初始化日志输出功能
// level 日志输出级别
// 		配置文件指定日志级别  ALL,DEBUG,INFO,WARN,ERROR,FATAL,OFF 级别由低到高
// 		其中 ALL表示所有调用打印日志的方法都会打出,而OFF则表示都不会打出。
// 		一般习惯是测试阶段为debug,生成环境为info以上
// maxSize 日志文件最大体积,单位MB
gogo.LogInit(level string, maxSize int64)

// 系统会优先判断是否命中固定URL,当固定URL无法命中的情况下,才会去判断是否命中正则URL(开发中部分支持)
gogo.GET("/restful/:tablename/:columnname", func(ctx *gogo.HTTPContext)

// 注册没有命中任何URL规则时进入的函数
gogo.STATUS(http.StatusNotFound, func(ctx *gogo.HTTPContext)

// SQLInit 初始化数据库操作句柄,这里要提供:
// driverName string: 数据库类型,例如mysql、sqlite等,参考github.com/go-sql-driver/mysql官方介绍
// dataSourceName string: 数据库地址,参考github.com/go-sql-driver/mysql官方介绍
// MaxOpenConns int: 最大缓存连接数,这个数值包含了MaxIdleConns
// MaxIdleConns int:预备的最大空闲连接数
gogo.SQLInit(driverName string, dataSourceName string, maxOpenConns int, maxIdleConns int) error

// SQLInsert 增加一条数据
// tableName string: 操作的表名
// data []byte: 需要更新的内容,用string转换后是json格式
gogo.SQLInsert(tableName string, data []byte) (int64, error)

// SQLDelete 根据where条件删除数据
// tableName string: 操作的表名
// where string: 过滤条件,就是where后面跟着的部分
gogo.SQLDelete(tableName, where string) (int64, error)

// SQLUpdate 更新一条数据
// tableName string: 操作的表名
// where string: 过滤条件,就是where后面跟着的部分
// data []byte: 需要更新的内容,用string转换后是json格式
gogo.SQLUpdate(tableName, where string, data []byte) (int64, error)

// SQLQueryByMap 将查询到的数据,按照指定字段的值做为索引构建map并返回
// columnName string: 作为索引的字段名称
// feilds string: 查询需要获取哪些字段的值,就是select后面跟着的部分,一般用"*"
// tableName string: 查询的表名
// where string: 过滤条件,就是where后面跟着的部分
// order string: 排序条件,就是order by后面跟着的部分。默认是ASC排序,除非"-"开头则DESC排序
// offset string: limit后面逗号相隔的两个数值,前者就是offset,后者就是count
// count string: limit后面逗号相隔的两个数值,前者就是offset,后者就是count
gogo.SQLQueryByMap(columname, feilds, tableName, where, order string, offset, count int) (interface{}, error)

// StartHTTP 启动HTTP服务
// port 端口号
func StartHTTP(port int)

// StartWebSocket 启动websocket服务
// pattern 服务路径
// port 端口号
// handler 注册回调函数
func StartWebSocket(pattern string, port int, handler func([]byte, *ImplConnection) ([]byte, error))

// GetResponseWriter 获取原始的http.ResponseWriter指针
(ctx *HTTPContext) GetResponseWriter() http.ResponseWriter

// GetRequest 获取原始的http.Request指针
(ctx *HTTPContext) GetRequest() *http.Request

// GetPathParam 获取GET请求路径中的String格式参数值,例如/restful/:table_name/:id
// key string: 参数名称
(ctx *HTTPContext) GetPathParam(key string) string

// GetPostBody 获取POST请求的内容
(ctx *HTTPContext) GetPostBody() []byte

// WriteExecute 将官方原始的ParseFiles和Execute接口做了合并
// data interface{}: 渲染模板需要的数据
// filenames ...string: 模板文件路径
(ctx *HTTPContext) WriteExecute(data interface{}, filenames ...string) error

// WriteByte 将[]byte格式的数据输出给HTTP客户端
// content []byte: 需要输出HTTP客户端的[]byte格式数据
(ctx *HTTPContext) WriteByte(content []byte)

// WriteString 将String格式的数据输出给HTTP客户端
// content string: 需要输出HTTP客户端的String格式数据
(ctx *HTTPContext) WriteString(content string)

// WriteJSON 将Struct结构体的数据转换成Json输出给HTTP客户端
// v interface{}: 需要输出HTTP客户端的Struct结构体数据
(ctx *HTTPContext) WriteJSON(v interface{}) error

// Log GoGo使用的第三方go_logger库,输出到日志文件的同时还会在控制台输出,并根据日志级别显示不同颜色
// 日志输出和官方fmt.Print、fmt.Printf使用一致
func LogDebug(a ...interface{})
func LogInfo(a ...interface{})
func LogWarning(a ...interface{})
func LogError(a ...interface{})

func LogDebugF(format string, a ...interface{})
func LogInfoF(format string, a ...interface{})
func LogWarning(format string, a ...interface{})
func LogErrorF(format string, a ...interface{})

// GlobalSignalWait 全局信号等待
// 需要程序等待协程运行的时候使用
func GlobalSignalWait()

// GlobalSignalRelease 全局信号继续
// 需要程序不再等待协程运行的时候使用
func GlobalSignalRelease()

GoGo v2.1.8

  • 日志输出功能不再自动初始化,而是需要人工初始化,使用接口gogo.LogInit
  • 日志输出功能支持初始化时设置日志级别和最大体积
  • 日志输出功能增加LogWarning和LogWarningF接口

GoGo v2.0.0

  • 支持多协程任务
  • 支持静态共享
  • 支持 websocket
  • 日志输出和官方 fmt.Print、fmt.Printf 使用一致

GoGo v1.1.2

  • add sql for 支持 SQL,一行代码搞定 RESTFul,无需一堆的 controllers 和 models 文件。还支持以表中任何一个字段作为 MAP 索引输出,方便客户端调用

GoGo v1.0.0

  • add router for GET, POST
  • add router for STATUS
  • add router for 解析 URL,例如: /:table_name/:id

欢迎贡献者加入

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	// 初始化为 unknown,如果编译时没有传入这些值,则为 unknown
	GitCommitLog   = "unknown"
	GitStatus      = "unknown"
	BuildTime      = "unknown"
	BuildGoVersion = "unknown"
)
View Source
var (
	ImplConnMap map[string]*ImplConnection
)
View Source
var ProcHandle func([]byte, *ImplConnection) ([]byte, error)

ProcHandle 开发者注册的回调函数,初始化为nil,在RunWebSocket函数中会赋值 []byte 接收到的内容 *ImplConnection 发送接口指针,可用此指针回复相应客户端

Functions

func BuildVersion

func BuildVersion() string

func CheckErrorExit

func CheckErrorExit(err ...interface{})

func ClientGet

func ClientGet(url string, timeOut time.Duration) ([]byte, error)

ClientGet 发送GET请求 url: 请求地址 timeOut: 请求超时时间

func ClientPost

func ClientPost(url string, data interface{}, contentType string, timeOut time.Duration) ([]byte, error)

ClientPost 发送POST请求 url: 请求地址 data: POST请求提交的数据 contentType:请求体格式,如:application/json timeOut: 请求超时时间,单位秒

func CloseConn

func CloseConn(wsConn *websocket.Conn, conn *ImplConnection)

func DELETE

func DELETE(pattern string, handler func(*HTTPContext))

DELETE 注册DELETE请求函数,注册固定URL、解析URL函数 pattern string:触发路径 handler httpProcFunc: 触发函数

func FileAppend

func FileAppend(fileName string, fileBytes []byte) bool

func FileDel

func FileDel(fileName string) bool

func FileExist

func FileExist(fileName string) bool

判断文件是否存在

func FileMkdir

func FileMkdir(fileName string) bool

func FileReadAll

func FileReadAll(fileName string) []byte

func GET

func GET(pattern string, handler func(*HTTPContext))

GET 注册GET请求函数,注册固定URL、解析URL函数 pattern string:触发路径 handler httpProcFunc: 触发函数

func GlobalSignalRelease

func GlobalSignalRelease()

GlobalSignalRelease 全局信号继续 需要程序不再等待协程运行的时候使用

func GlobalSignalWait

func GlobalSignalWait()

GlobalSignalWait 全局信号等待 需要程序等待协程运行的时候使用

func ListenAndServe

func ListenAndServe(addr string)

兼容http标准地址写法的,方便指定ip

func LogDebug

func LogDebug(a ...interface{})

LogDebug 日志输出和官方fmt.Print、fmt.Printf使用一致

func LogDebugF

func LogDebugF(format string, a ...interface{})

LogDebugF 日志输出和官方fmt.Print、fmt.Printf使用一致

func LogError

func LogError(a ...interface{})

LogError 日志输出和官方fmt.Print、fmt.Printf使用一致

func LogErrorF

func LogErrorF(format string, a ...interface{})

LogErrorF 日志输出和官方fmt.Print、fmt.Printf使用一致

func LogInfo

func LogInfo(a ...interface{})

LogInfo 日志输出和官方fmt.Print、fmt.Printf使用一致

func LogInfoF

func LogInfoF(format string, a ...interface{})

LogInfoF 日志输出和官方fmt.Print、fmt.Printf使用一致

func LogInit

func LogInit(level string, maxSize int64)

LogInit 初始化日志输出功能 level 日志输出级别

配置文件指定日志级别  ALL,DEBUG,INFO,WARN,ERROR,FATAL,OFF 级别由低到高
其中 ALL表示所有调用打印日志的方法都会打出,而OFF则表示都不会打出。
一般习惯是测试阶段为debug,生成环境为info以上

maxSize 日志文件最大体积,单位MB

func LogWarning

func LogWarning(a ...interface{})

LogWarning 日志输出和官方fmt.Print、fmt.Printf使用一致

func LogWarningF

func LogWarningF(format string, a ...interface{})

LogWarningF 日志输出和官方fmt.Print、fmt.Printf使用一致

func POST

func POST(pattern string, handler func(*HTTPContext))

POST 注册POST请求函数,注册固定URL、解析URL函数 pattern string:触发路径 handler httpProcFunc: 触发函数

func PUBLIC

func PUBLIC(pattern, path string)

PUBLIC 注册PUBLIC请求函数,可以共享文件查看下载 pattern string:触发路径 handler httpProcFunc: 触发函数

func PUT

func PUT(pattern string, handler func(*HTTPContext))

PUT 注册PUT请求函数,注册固定URL、解析URL函数 pattern string:触发路径 handler httpProcFunc: 触发函数

func Regist

func Regist(regist_url string)

func SQLDelete

func SQLDelete(tableName, where string) (int64, error)

SQLDelete 根据where条件删除数据 tableName string: 操作的表名 where string: 过滤条件,就是where后面跟着的部分

func SQLInit

func SQLInit(driverName, dataSourceName string, maxOpenConns, maxIdleConns int) error

SQLInit 初始化数据库操作句柄,这里要提供: driverName string: 数据库类型,例如mysql、sqlite等,参考github.com/go-sql-driver/mysql官方介绍 dataSourceName string: 数据库地址,参考github.com/go-sql-driver/mysql官方介绍 MaxOpenConns int: 最大缓存连接数,这个数值包含了MaxIdleConns MaxIdleConns int:预备的最大空闲连接数

func SQLInsert

func SQLInsert(tableName string, data []byte) (int64, error)

SQLInsert 增加一条数据 tableName string: 操作的表名 data []byte: 需要更新的内容,用string转换后是json格式

func SQLQueryByMap

func SQLQueryByMap(columnName, feilds, tableName, where, order string, offset, count int) (interface{}, error)

SQLQueryByMap 将查询到的数据,按照指定字段的值做为索引构建map并返回 columnName string: 作为索引的字段名称 feilds string: 查询需要获取哪些字段的值,就是select后面跟着的部分,一般用"*" tableName string: 查询的表名 where string: 过滤条件,就是where后面跟着的部分 order string: 排序条件,就是order by后面跟着的部分。默认是ASC排序,除非"-"开头则DESC排序 offset string: limit后面逗号相隔的两个数值,前者就是offset,后者就是count count string: limit后面逗号相隔的两个数值,前者就是offset,后者就是count

func SQLUpdate

func SQLUpdate(tableName, where string, data []byte) (int64, error)

SQLUpdate 更新一条数据 tableName string: 操作的表名 where string: 过滤条件,就是where后面跟着的部分 data []byte: 需要更新的内容,用string转换后是json格式

func STATUS

func STATUS(status int, handler func(*HTTPContext))

STATUS 注册指定HTTP状态触发的函数 status int:触发状态 handler httpProcFunc: 触发函数

func SqlQueryRows

func SqlQueryRows(feilds, tableName, where, order string, offset, count int) (*sql.Rows, error)

func StartHTTP

func StartHTTP(port int)

StartHTTP 启动HTTP服务 gorouter.Run() default run on HttpPort gorouter.Run("localhost") gorouter.Run(":8089") gorouter.Run("127.0.0.1:8089")

func StartWebSocket

func StartWebSocket(pattern string, port int, handler func([]byte, *ImplConnection) ([]byte, error))

StartWebSocket 启动websocket服务 pattern 服务路径 port 端口号 handler 注册回调函数

func StringifyMultiLine

func StringifyMultiLine() string

返回多行格式

func StringifySingleLine

func StringifySingleLine() string

返回单行格式

func TimeGetNowStr

func TimeGetNowStr() (time_str string)

func TimeIntToDuration

func TimeIntToDuration(sec int) time.Duration

func TimeSleepSecond

func TimeSleepSecond(sec int)

func WebSocketSendToAll

func WebSocketSendToAll(b []byte)

WebSocketSendToAll 向所有连接的websocket客户端发送消息 b byte[]格式的消息内容

func WebSocketSendToGroup

func WebSocketSendToGroup(b []byte, groupName string)

WebSocketSendToGroup 向指定分组的websocket客户端发送消息,分组通过WebSocketSetGroup函数接口设置 b byte[]格式的消息内容 group 分组名称

Types

type HTTPContext

type HTTPContext struct {
	// contains filtered or unexported fields
}

HTTPContext 提供给客户使用的扩展指针,包含了原始的http.ResponseWriter和http.Request,同时还提供了封装好的一系列方便函数

func (*HTTPContext) GetInt

func (ctx *HTTPContext) GetInt(key string, def ...int) int

GetInt 获取GET请求?后面的int参数值 key string: 参数名称 def ...int: 参数可选,当获取参数值无效的时候,便返回这里提供的值

func (*HTTPContext) GetInt64

func (ctx *HTTPContext) GetInt64(key string, def ...int64) int64

GetInt64 获取GET请求?后面的int64参数值 key string: 参数名称 def ...int64: 参数可选,当获取参数值无效的时候,便返回这里提供的值

func (*HTTPContext) GetPathParam

func (ctx *HTTPContext) GetPathParam(key string) string

GetPathParam 获取GET请求路径中的String格式参数值,例如/restful/:table_name/:id key string: 参数名称

func (*HTTPContext) GetPostBody

func (ctx *HTTPContext) GetPostBody() []byte

GetPostBody 获取POST请求的内容

func (*HTTPContext) GetR

func (ctx *HTTPContext) GetR() *http.Request

GetR 获取原始的http.Request

func (*HTTPContext) GetRequest

func (ctx *HTTPContext) GetRequest() *http.Request

GetRequest 获取原始的http.Request

func (*HTTPContext) GetResponseWriter

func (ctx *HTTPContext) GetResponseWriter() http.ResponseWriter

GetResponseWriter 获取原始的http.ResponseWriter

func (*HTTPContext) GetString

func (ctx *HTTPContext) GetString(key string, def ...string) string

GetString 获取GET请求?后面的String参数值, key string: 参数名称 def ...string: 参数可选,当获取参数值无效的时候,便返回这里提供的值

func (*HTTPContext) GetW

func (ctx *HTTPContext) GetW() http.ResponseWriter

GetW 获取原始的http.ResponseWriter

func (*HTTPContext) Redirect

func (ctx *HTTPContext) Redirect(url string, status int)

Redirect 网页跳转 url string: 跳转的url status int: 需要写入头部的状态,例如http.StatusOK

func (*HTTPContext) WriteByte

func (ctx *HTTPContext) WriteByte(content []byte)

WriteByte 将[]byte格式的数据输出给HTTP客户端 content []byte: 需要输出HTTP客户端的[]byte格式数据

func (*HTTPContext) WriteExecute

func (ctx *HTTPContext) WriteExecute(data interface{}, filenames ...string) error

WriteExecute 将官方原始的ParseFiles和Execute接口做了合并 data interface{}: 渲染模板需要的数据 filenames ...string: 模板文件路径

func (*HTTPContext) WriteHeader

func (ctx *HTTPContext) WriteHeader(key, value string)

WriteHeader 将String格式的value设置到Header头部key字段

func (*HTTPContext) WriteHeaderContentType

func (ctx *HTTPContext) WriteHeaderContentType(value string)

WriteHeaderContentType 返回信息类型Content-Type

func (*HTTPContext) WriteHeaderStatus

func (ctx *HTTPContext) WriteHeaderStatus(status int)

WriteHeaderStatus 指定Status到头部输出给HTTP客户端 status int: HTTP状态, 参考net\http\status.go

func (*HTTPContext) WriteJSON

func (ctx *HTTPContext) WriteJSON(v interface{}) error

WriteJSON 将Struct结构体的数据转换成Json输出给HTTP客户端 v interface{}: 需要输出HTTP客户端的Struct结构体数据

func (*HTTPContext) WriteParse

func (ctx *HTTPContext) WriteParse(data interface{}, tmplContents ...string) error

func (*HTTPContext) WriteString

func (ctx *HTTPContext) WriteString(content string)

WriteString 将String格式的数据输出给HTTP客户端 content string: 需要输出HTTP客户端的String格式数据

type ImplConnection

type ImplConnection struct {
	// contains filtered or unexported fields
}

func InitImplConnection

func InitImplConnection(wsConn *websocket.Conn) (conn *ImplConnection, err error)

InitImplConnection 初始化长连接

func (*ImplConnection) Close

func (conn *ImplConnection) Close()

Close 关闭连接

func (*ImplConnection) GetGroup

func (conn *ImplConnection) GetGroup() string

GetGroup 获取websocket客户端的分组信息

func (*ImplConnection) OutGroup

func (conn *ImplConnection) OutGroup()

OutGroup 设置指定websocket客户端的分组 conn websocket客户端连接句柄 group 分组名称

func (*ImplConnection) ReadMessage

func (conn *ImplConnection) ReadMessage() (data []byte, err error)

ReadMessage 读取数据

func (*ImplConnection) RemoteAddr

func (conn *ImplConnection) RemoteAddr() net.Addr

RemoteAddr 获取客户端IP

func (*ImplConnection) SetGroup

func (conn *ImplConnection) SetGroup(groupName string)

SetGroup 设置指定websocket客户端的分组 conn websocket客户端连接句柄 group 分组名称

func (*ImplConnection) WriteMessage

func (conn *ImplConnection) WriteMessage(data []byte) (err error)

WriteMessage 发送数据

type RecvJsonStruct

type RecvJsonStruct struct {
	Online string `json:"online"`
	Msg    string `json:"msg"`
}

type TaskModel

type TaskModel struct {
	// contains filtered or unexported fields
}

func NewTask

func NewTask(taskClass interface{}, count int) *TaskModel

func (*TaskModel) Push

func (c *TaskModel) Push(data interface{}) error

func (*TaskModel) Release

func (c *TaskModel) Release()

func (*TaskModel) SendRelease

func (c *TaskModel) SendRelease()

func (*TaskModel) Start

func (c *TaskModel) Start()

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL