分类: Go

32 篇文章

go多接口实现
对于一个结构体来说,可以通过同时实现多个接口的方法来实现多个接口,例如:type Writer interface { Write() } type Closer interface { Close() } type WriteCloser struct{} func (wc *WriteCloser) Write() { fmt.Println(…
panic,recover介绍和使用
在go中,使用panic来抛出一个错误并将程序停止。一般有主动panic和被动panic两种情况。对于主动panic,可以是当一个程序启动时如果需要的依赖程序没有启动就将这个启动停掉,比如没有开etcd或mysql等,例如:func main() { ismysql := false; // 模拟mysql未启动的场景 if !ismysql { …
go函数闭包
假如说有一个需求就是每次访问一个函数之后都会获得一个变量递增之后的值,并且可以随时将这个变量的值清零。如果想要做到前半部分的需求,我们可以使用全局变量。例如var idx int func getidx() int { idx += 1 return idx } func main() { for range 5 { fmt.Println(get…
go函数的可变参数
在go中定义一个函数之后,对于形参的长度是可以变换的。通常对于可以变化长度的形参后面加上三个点 ... ,并且此时这个参数就变为了一个切片,例如:func add(items ...int) (sum int) { for _, v := range items { sum += v; } return }对于这个函数来说,实现了将多个传入的int…
json Unmarshal(non-pointer model.Submit)报错
这个报错:json: Unmarshal(non-pointer model.Submit)出现在语句:err := c.ShouldBind(codedata)说明在调用 ShouldBind 时传入了一个 非指针类型 的参数,而它需要一个指针类型来把 JSON 数据反序列化进去。问题详解:在 Go 的 encoding/json 包(Gin 的…
Go flag库
在 Go 语言中,flag 是一个用于解析命令行参数的标准库。通过这个库,你可以很方便地从命令行中获取用户传入的参数,比如字符串、整数、布尔值等。主要用途:处理命令行参数,例如:go run main.go -name=Tom -age=25 -debug=true基本使用示例:package main import ( "flag&qu…
gorm查询多对多关联的数量
下面给出两种常见的做法,关键在于如何统计某个标签被多少篇文章引用:方法一:使用 Join Table 直接查询统计假设你的多对多关系存储在 article_tags 表中,并且标签模型(Tag)类似如下:type Tag struct { ID uint `gorm:"primaryKey"` Name string // 其他…
gin DELETE 获取参数方式
在 Gin 中,不论是 DELETE 还是 GET、POST 等请求方式,底层都是通过传入一个 *gin.Context 来获取请求参数,因此它们在参数获取上使用的机制基本是一致的。不过需要注意的是:URL 参数和查询字符串参数:DELETE 接口可以同样通过路径参数(例如通过 :id 定义的参数)和查询字符串参数(使用 c.Query() 或 c…
Go语言整型转字符串方法
在 Go 语言中,不能直接使用简单的类型转换将整型转换为字符串,因为 Go 是一种静态类型语言,变量的类型一经定义就不能随意改变。常见的做法有以下两种方法:使用 fmt.Sprintf:可借助 fmt.Sprintf 函数将整型格式化为字符串,例如:package main import ( "fmt" ) func main(…
go生成随机数
在 Go 语言中,我们通常使用两种包来生成随机数,分别是用于生成伪随机数的 math/rand 包和用于生成加密安全随机数的 crypto/rand 包。使用 math/rand生成随机数math/rand 包提供了如 rand.Int()、rand.Intn(n)(生成 0 到 n-1 的整数)和 rand.Float64()(生成范围在 0.0…