摘要:执行“go mod tidy”报错下错误,执行“go clean -modcache”和删除“go env GOMODCACHE”指定目录均无效: SECURITY ERROR go.sum database server misbehavior detected! old database: go
阅读全文
摘要:下列代码,设计 Config 和 MyConfig 是为可扩展 Config,同时 Config 作为公共部分可保持变化。采用了匿名的内嵌结构体,但又不希望 yaml 结果多出一层。如果 MyConfig 中的 Config 没有使用“yaml:",inline"”修饰,则读取不到配置,Config
阅读全文
摘要:改进:保存配置定义的顺序。 实现代码: package main import ( "os" "strings" "text/template" "github.com/stoewer/go-strcase" ) type ConfigItem struct { Key string Value m
阅读全文
摘要:改进:配置类型模板化 实现代码: package main import ( "os" "strings" "text/template" "github.com/stoewer/go-strcase" ) func main() { // 定义模板函数 funcs := template.Func
阅读全文
摘要:模板定义: type Config struct { {{- $len := len .DbConfigs -}} {{- $i := 0 -}} {{- range $key, $value := .DbConfigs}} {{title $key}} *DbConfig ` + "`yaml:\
阅读全文
摘要:场景: “INSERT INTO ... ON DUPLICATE KEY UPDATE”的应用,在 UPDATE 时不能更新字段 f_create_uid 和 f_create_time 的值,而必须更新 f_update_uid 和 f_update_time 的值。关键点在于指定 UPDATE
阅读全文
摘要:比如插入 f_create_uid,更新时忽略 f_create_uid,只更新 f_update_uid。可使用 gorm 的 BeforeCreate 和 BeforeUpdate 钩子,这两个钩子分别在创建和更新记录之前被调用。 // BeforeCreate 在创建记录之前调用 func (
阅读全文
摘要:goland设置保存文件时不将4个空格转为TAB 版本:GoLand 2022.3 设置路径: Settings -> Editor -> Code Style -> Go -> Run gofmt 图示:
阅读全文
摘要:在执行 go 编译是遇到如下问题: go\pkg\mod\github.com\golang\protobuf@v1.5.2\protoc-gen-go\descriptor\descriptor.pb.go:106:61: undefined: descriptorpb.Default_FileO
阅读全文
摘要:sql2struct 一个根据"CREATE TABLE"建表语句生成对应的Go语言结构体的工具,暂只支持 MySQL 表。 开发目的 在 github 中找到一些 sql2struct,但要么是 chrome 插件,要么是在线工具,要么是需要连接 MySQL,不是很方便。本 sql2struct
阅读全文
摘要:场景:有多张表,依据其中一张表的自增字段取得 id 值作为对象ID,然后使用这个Id插入到其他它表中。 如下一张 MySQL 的 innodb 表 X,用 go 编写程序,不指定 a 的值,指定 b 和 c 的值,往表 X 插入数据,如果数据已经存在则执行更新操作,成功后取得该笔插入或者更新的记录对
阅读全文
摘要:客户端: md := metadata.New(map[string]string{"signature": "0123456789", "timestamp": "2021-07-01 00:00:00"}) ctx := metadata.NewOutgoingContext(ctx, md)
阅读全文
摘要:读取部分字段,使用函数 QueryRowPartialCtx 。 假设有如下一张表: CREATE TABLE test (id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, ctime DATETIME); 要读取字段 ctime 值。 定义一
阅读全文
摘要:cache.ClusterConf 的定义如下: // CacheConf is an alias of ClusterConf. type CacheConf = ClusterConf type ( // A ClusterConf is the config of a redis cluste
阅读全文
摘要:配置定义: # cat internal/config/config.go package config import ( "github.com/zeromicro/go-zero/rest" "github.com/zeromicro/go-zero/core/stores/cache" ) t
阅读全文
摘要:创建一个 gateway 示例: // main.go package main import ( "flag" "fmt" "gateway/middleware" "github.com/zeromicro/go-zero/core/conf" "github.com/zeromicro/go-
阅读全文
摘要:. ├── code-of-conduct.md 行为准则 ├── CONTRIBUTING.md 贡献指南 ├── core 框架的核心组件 │ ├── bloom 布隆过滤器,用于检测一个元素是否在一个集合中 │ ├── breaker 熔断器,用于防止过多的请求导致系统崩溃 │ ├── cmd
阅读全文
摘要:go-zero 的网关服务实际是个 go-zero 的 API 服务,也就是一个 http 服务,或者说 rest 服务。http 转 grpc 使用了开源的 grpcurl 库,当网关需要往 rpc 服务传递额外的数据,比如鉴权数据的时候,通过 http 的 header 进行: func Aut
阅读全文
摘要:go-zero 的网关往 rpc 服务传递数据时,可以使用 headers,但需要注意前缀规则,否则会发现数据传递不过去,或者对方取不到数据。 go-zero 的网关对服务的调用使用了第三方库 grpcurl,入口函数为 InvokeRPC: grpcurl.InvokeRPC(r.Context(
阅读全文
摘要:本文是go-zero开发入门-API网关开发示例一文的延伸,继续之前请先阅读此文。 在项目根目录下创建子目录 middleware,在此目录下创建文件 auth.go,内容如下: // 鉴权中间件 package middleware import ( "context" "errors" "net
阅读全文