# zerox **Repository Path**: ysfzf/zerox ## Basic Information - **Project Name**: zerox - **Description**: 用于go-zero框架中有用的方法 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2022-04-01 - **Last Updated**: 2025-05-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 说明 这个库是用来和go-zero配合使用的。 详见https://gitee.com/ysfzf/zerobase.git。 # 使用队列 首先要开启多个服务 ```go func main() { flag.Parse() var c config.Config conf.MustLoad(*configFile, &c) group := service.NewServiceGroup() defer group.Stop() group.Add(startApi(&c)) group.Add(startQueue(&c)) group.Start() } func startApi(c *config.Config) service.Service { ctx := svc.NewServiceContext(*c) server := rest.MustNewServer(c.RestConf, zerox.GetOptions()...) handler.RegisterHandlers(server, ctx) zerox.SetErrorHandler() fmt.Printf("Starting server at %s:%d...\n", c.Host, c.Port) return server } func startQueue(c *config.Config) service.Service { return queue.NewTaskService(queue.SetTaskAddr(c.Redis.Host), queue.SetTaskJobs(tasks())) } //返回任务 func tasks() *queue.Jobs { return &queue.Jobs{ "test": func(ctx context.Context, t *asynq.Task) error { fmt.Println(string(t.Payload())) return nil }, } } ``` 在需要的地方添加任务到队列 ```go t := queue.NewTaskClient(queue.SetClientAddr(l.svcCtx.Config.Redis.Host)) param := []byte("hello world 123") info, err = t.Dispatch("test", ¶m, 10) ... ``` # 数据验证 使用验证库 github.com/go-playground/validator/v10 ``` type User struct { FirstName string `validate:"required"` LastName string `validate:"required"` Age uint8 `validate:"gte=0,lte=130"` Email string `validate:"required,email"` FavouriteColor string `validate:"iscolor"` // alias for 'hexcolor|rgb|rgba|hsl|hsla' } ``` ### Fields: Tag |Description --|---- eqcsfield |Field Equals Another Field (relative) eqfield Field |Equals Another Field fieldcontains |NOT DOCUMENTED IN doc.go fieldexcludes |NOT DOCUMENTED IN doc.go gtcsfield |Field Greater Than Another Relative Field gtecsfield |Field Greater Than or Equal To Another Relative Field gtefield |Field Greater Than or Equal To Another Field gtfield |Field Greater Than Another Field ltcsfield |Less Than Another Relative Field ltecsfield |Less Than or Equal To Another Relative Field ltefield |Less Than or Equal To Another Field ltfield |Less Than Another Field necsfield |Field Does Not Equal Another Field (relative) nefield |Field Does Not Equal Another Field ### Network: Tag |Description --|---- cidr |Classless Inter-Domain Routing CIDR cidrv4 |Classless Inter-Domain Routing CIDRv4 cidrv6 |Classless Inter-Domain Routing CIDRv6 datauri |Data URL fqdn |Full Qualified Domain Name (FQDN) hostname |Hostname RFC 952 hostname_port |HostPort hostname_rfc1123 |Hostname RFC 1123 ip |Internet Protocol Address IP ip4_addr |Internet Protocol Address IPv4 ip6_addr |Internet Protocol Address IPv6 ip_addr |Internet Protocol Address IP ipv4 |Internet Protocol Address IPv4 ipv6 |Internet Protocol Address IPv6 mac |Media Access Control Address MAC tcp4_addr |Transmission Control Protocol Address TCPv4 tcp6_addr |Transmission Control Protocol Address TCPv6 tcp_addr |Transmission Control Protocol Address TCP udp4_addr |User Datagram Protocol Address UDPv4 udp6_addr |User Datagram Protocol Address UDPv6 udp_addr |User Datagram Protocol Address UDP unix_addr |Unix domain socket end point Address uri |URI String url |URL String url_encoded |URL Encoded urn_rfc2141 |Urn RFC 2141 String ### Strings: Tag |Description --|---- alpha |Alpha Only alphanum |Alphanumeric alphanumunicode |Alphanumeric Unicode alphaunicode |Alpha Unicode ascii |ASCII boolean |Boolean contains |Contains containsany |Contains Any containsrune |Contains Rune endsnotwith |Ends Not With endswith |Ends With excludes |Excludes excludesall |Excludes All excludesrune |Excludes Rune lowercase |Lowercase multibyte |Multi-Byte Characters number |NOT DOCUMENTED IN doc.go numeric |Numeric printascii |Printable ASCII startsnotwith |Starts Not With startswith |Starts With uppercase |Uppercase ### Format: Tag |Description --|---- base64 |Base64 String base64url |Base64URL String bic |Business Identifier Code (ISO 9362) bcp47_language_tag |Language tag (BCP 47) btc_addr |Bitcoin Address btc_addr_bech32 |Bitcoin Bech32 Address (segwit) credit_card| Credit Card Number datetime |Datetime e164 |e164 formatted phone number email |E-mail String eth_addr |Ethereum Address hexadecimal |Hexadecimal String hexcolor |Hexcolor String hsl |HSL String hsla |HSLA String html |HTML Tags html_encoded |HTML Encoded isbn |International Standard Book Number isbn10 |International Standard Book Number 10 isbn13 |International Standard Book Number 13 iso3166_1_alpha2 |Two-letter country code (ISO 3166-1 alpha-2) iso3166_1_alpha3 |Three-letter country code (ISO 3166-1 alpha-3) iso3166_1_alpha_numeric |Numeric country code (ISO 3166-1 numeric) iso3166_2 |Country subdivision code (ISO 3166-2) iso4217 |Currency code (ISO 4217) json |JSON jwt |JSON Web Token (JWT) latitude |Latitude longitude |Longitude postcode_iso3166_alpha2 |Postcode postcode_iso3166_alpha2_field |Postcode rgb |RGB String rgba |RGBA String ssn |Social Security Number SSN timezone |Timezone uuid |Universally Unique Identifier UUID uuid3 |Universally Unique Identifier UUID v3 uuid3_rfc4122 |Universally Unique Identifier UUID v3 RFC4122 uuid4 |Universally Unique Identifier UUID v4 uuid4_rfc4122 |Universally Unique Identifier UUID v4 RFC4122 uuid5 |Universally Unique Identifier UUID v5 uuid5_rfc4122 |Universally Unique Identifier UUID v5 RFC4122 uuid_rfc4122 |Universally Unique Identifier UUID RFC4122 md4 |MD4 hash md5 |MD5 hash sha256 |SHA256 hash sha384 |SHA384 hash sha512 |SHA512 hash ripemd128 |RIPEMD-128 hash ripemd128 |RIPEMD-160 hash tiger128 |TIGER128 hash tiger160 |TIGER160 hash tiger192 |TIGER192 hash semver |Semantic Versioning 2.0.0 ulid |Universally Unique Lexicographically Sortable Identifier ULID ### Comparisons: Tag |Description --|---- eq |Equals gt |Greater than gte |Greater than or equal lt |Less Than lte |Less Than or Equal ne |Not Equal ### Other: Tag |Description --|---- dir |Directory file |File path isdefault |Is Default len |Length max |Maximum min |Minimum oneof |One Of required |Required required_if |Required If required_unless |Required Unless required_with |Required With required_with_all |Required With All required_without |Required Without required_without_all |Required Without All excluded_if |Excluded If excluded_unless |Excluded Unless excluded_with |Excluded With excluded_with_all |Excluded With All excluded_without |Excluded Without excluded_without_all |Excluded Without All unique |Unique ### Aliases: Tag |Description --|---- iscolor |hexcolor\|rgb\|rgba\|hsl\|hsla country_code |iso3166_1_alpha2\|iso3166_1_alpha3\|iso3166_1_alpha_numeric # WebSocket 在main中添加代码 ``` //··· hub := ws.NewHub(ws.SetOnMessage(OnMessage), ws.SetOnClose(OnClose), ws.SetOnConn(OnConn)) go hub.Run() //将hub传入到server , ctx := svc.NewServiceContext(*c, hub) //··· ``` 要修改servicecontext.go文件 ``` type ServiceContext struct { //...... Hub *ws.Hub } func NewServiceContext(c config.Config, hub *ws.Hub) *ServiceContext { //...... return &ServiceContext{ //...... Hub: hub, } } ``` 修改某个handler,比如wshandler,路由是 /ws ``` func WsHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { ws.ServeWs(svcCtx.Hub, w, r) //将此连接提升为websocket } } ``` ### CMD ``` //step 1 初始化 go mod init xxx //step 2 生成 .env文件和模板文件 zerox //step 3 修改.env配置和模板文件 //step 4 生成yaml文件,为生成.api文件和gorm文件做准备 zerox yaml -a zerox yaml -g //step 5 修改gorm.yaml文件生成model文件 zerox gorm //step 6 修改 xxx_api.yaml生成api文件 zerox api //step 7 生成接口代码 zerox gen // step 8 下载依赖 go mod tidy ```