包含标签 golang 中的文章

ginbinder 的书写过程-一起来看gin源码吧

ginbind 的实现过程-一起来看gin源码吧 是的,没错。 如果你用过 gin 那么你一定知道,gin 中绑定参数的方式很零散。 c *gon.Context 给你提供了很多中方法, 例如BindHeader, BindURI 等等, 但是如果想要绑定 reqeust 中不同地方的参数, 那对不起咯,并没有。 另外, gin 中的 Bind 接口, 默认是包含了 参数验证 validate 功能的, 因此如果你……

阅读全文

ginbinder 一次绑定所有 request 参数

ginbinder 一次绑定 Request 中所有需要的数据 Usage 废弃/不可用: 弃用原生 tag form tag。 保持: 使用 tag uri 绑定路径中的参数。 作用于某个字段 就是 example.com/:some/:path 中 冒号后面的 保持: 使用 tag header 绑定 header。 作用于某个字段 新增: 新增 tag query tag 绑定通过 Query 传递的参数。 作用于某个字段 就是 example.com/some/path?a=1&b=2 中 问号后面的那一串 新增: 新增 tag cookie 绑定 cookie 中 简单 的键……

阅读全文

go1.17泛型尝鲜

go1.17 泛型尝鲜 语法格式如下, 需要使用 [T Ttype] 指定约束条件, 例如 [T any] 不做任何约束, [T MyInterface] 满足 MyInterface 的约束 接下来我们将尝试上述提到的内容。 1 2 3 func fname[T Ttype](args []T) T { // statement } 需要注意的是, 现在泛型在 go1.17 中依旧不是正式支持, 所以在 IDE 或者编辑器上会有报错。 编译需要指定额外的 -gcflags=-G=3 参数 1 go run -gcflags=-G=3 main.go 开始吧 不约束 any 首先,我们来……

阅读全文

golang gin 使用 context 实现 ioc

golang gin 使用 context 实现 ioc gin 是一个流行的 golang webserver 的框架。 https://github.com/gin-gonic/gin gin 中 HandlerFunc (type HandlerFunc func(*Context)) 的使用随处可见, ex. Middleware , Handler 中。 1 2 3 4 router.GET("/user/:name", func(c *gin.Context) { name := c.Param("name") c.String(http.StatusOK, "Hello %s", name) }) 因此,根据之前 golang context 实现 IoC 容器经验, 使用 *gin.Context 作为 IoC 容器再好不过了。 标准库 context.Context 是一个接口(interface), gin.Context 是 gin 工程自己封装的的一个 struct, 并实现了该接口。 虽然……

阅读全文

golang 使用 Context 实现 IoC 容器

golang 使用 Context 实现 IoC 容器 参考文章 控制反转(IoC)与依赖注入(DI) 指出了依赖注入可以降低程序的耦合性。 能更好的拆分功能与基础设施。 那么在 golang 中又怎么实现呢? 代码地址 golang-context-ioc.go 实现了一个 MysqlDriver 实现我们所有的数据存取操作。 并在全局域中实例化了一个对象 my。 在 main.go 中创建了一个 ctx := context.Background() 使用使用 ctx 作为 IoC 容器, 使……

阅读全文

i:=i ? Golang Block 到底是什么? 怎么就能解决闭包变量冲突了?

i:=i ? Golang Block 到底是什么? 怎么就能解决闭包变量冲突了? 什么? 你告诉我 i:=i 不仅合法,而且还常用。甚至能解决并发编程中的变量冲突? 以下这段代码出自 golang 官方 的 Effective GO 并发编程章节。 为了解决 goroute 中变量 req 冲突, 使用了语句 req := req https://golang.org/doc/effective_go#concurrency 1 2 3 4 5 6 7 8 9 10 func Serve(queue chan *Request) { for req := range queue { req := req // Create new instance of req for the goroutine. sem <- 1 go func() {……

阅读全文

Golang知识点(defer): 面试经常变量在 defer 中的值, 其实在问变量的作用域

变量在 defer 中的值, 其实在问变量的作用域 有没有想过, 面试中经常问的 变量在 defer 之后的值, 其实是在问 函数变量的作用域 简单的说, defer 就是将当前操作放入 堆 中, 等待触发 return 的时候再拿出来执行。 符合堆的特色, 先进后出。 从细节来了, 还需要注意 变量 在 defer 中的 作用域 ? 函数 的 执行操作 是在 入堆前还是后 ? defer 中的函数……

阅读全文

golang 为 struct 自动添加 tags

golang 为 struct 自动添加 tags vscode 中的 go 0.12.0 版本新加入了一个 auto add tags 的功能。 setting.json 配置如下 1 2 3 4 5 6 "go.addTags": { "tags": "yaml,json", "options": "yaml=omitempty,yaml=options2,yaml=options3,json=omitempty", "promptForTags": false, "transform": "snakecase" }, 在 example.go 中创建一个 struct 1 2 3 4 5 type Person struct { Name string Age int Gender string } 将光标移动到 struct 结构体中, 使用 command + shift + p 选择 go: add tag for struct 即可 result 1 2 3 4 5 type Person struct { Name string `yaml:"name,omitempty,options2,options3" json:"name,omitempty"` Age int `yaml:"age,omitempty,options2,options3" json:"age,omitempty"` Gender string `yaml:"gender,omitempty,options2,options3" json:"gender,omitempty"` }……

阅读全文

golang-use-regex-group

golang 使用 regex group 的值 与常用的语言正则不同, golang 使用 $1 表示 regex group。 而类似 sed, python 中常用的是 \1 golang playgroud 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 package main import ( "fmt" "regexp" ) func main() { re := regexp.MustCompile(`([A-Z])`) s := re.ReplaceAllString("UserCreate", ".$1") fmt.Println(s) // .User.Create } func Test_Regexp(t *testing.T) { chars := `('|")` str := `"123'abc'456"` re := regexp.MustCompile(chars) s := re.ReplaceAllString(str, `\$1`) // 这里可以使用 ` 反引号 fmt.Println(s) // \"123\'abc\'456\" } // https://stackoverflow.com/questions/43586091/how-golang-replace-string-by-regex-group python 1 2 3 import re name = re.sub(r'([A-Z])', r'.\1', "UserCreate") print(name) # .User.Create……

阅读全文

福利派送

  • (免费星球)「运维成长路线」

  • 又拍云免费 CDN

最近文章

分类

标签

其它