随笔分类 - golang
摘要:type TgUser struct { global.GVA_MODEL TelegramId string `json:"telegram_id" form:"telegram_id" gorm:"column:telegram_id;unique;"` Username string `jso
阅读全文
摘要:当在 Go 语言中使用切片时,切片的初始化是一个常见的操作。在本篇博客中,我们将介绍切片的初始化方式以及一些常见的示例。 什么是切片初始化? 切片是一个动态数组,可以根据需要自动调整大小。切片的初始化是为切片分配底层数组并设置切片的长度和容量。切片可以通过字面量、make 函数或从其他切片截取来进行
阅读全文
摘要:在你提供的代码片段中,涉及了变量作用域和闭包的问题,让我们来分析一下为什么输出的是 error2 而不是 error。 func msg() (result string) { err := errors.New("error") defer func() { fmt.Println(err) //
阅读全文
摘要:在 Go 语言中,使用 , 符号可以同时定义多个变量,并且它们可以是不同类型的变量。这种方式称为并行赋值(parallel assignment)。 让我们来看你提供的代码片段: err := errors.New("error") if err != nil { return } // err :
阅读全文
摘要:在Go语言中,defer语句用于延迟执行一个函数直到包含它的函数体执行完毕。在使用defer时,函数的参数会在defer语句执行时被计算,并且函数调用会被延迟执行。 如果你希望在函数返回时调用defer语句,并且想要传递一些参数给defer延迟调用的函数,你可以通过将这些参数先保存在变量中,然后在d
阅读全文
摘要:在Go语言中,我们经常需要将整数转换为字符串。然而,直接使用string()函数进行转换可能会导致意想不到的结果。这是因为string()函数会将整数解释为Unicode字符的代码点,而不是将其转换为对应的数字字符串。 错误的转换方式 例如,如果我们尝试将整数65转换为字符串: s := strin
阅读全文
摘要:做个记录,gorm在更新字段的时候,如果字符串字段是空的,那么将不会更新到数据库。 在使用gorm将一个字段更新为空的时候,发现并不生效,不了解具体什么原因,所以此时需要打开debug模式,查看原生SQL是如何执行的。 type Student struct { Model Email string
阅读全文
摘要:软删除 如果您的模型包含了一个 gorm.deletedat 字段(gorm.Model 已经包含了该字段),它将自动获得软删除的能力! 拥有软删除能力的模型调用 Delete 时,记录不会从数据库中被真正删除。但 GORM 会将 DeletedAt 置为当前时间, 并且你不能再通过普通的查询方法找
阅读全文
摘要:1,回答问题之前,先看下面这段代码 package main import "fmt" type girl struct { Name string Age int } func main() { gl := make(map[string]*girl) studs := []girl{ {Name
阅读全文
摘要:golang在defer修改返回值时需要格外注意! 如果未提前声明返回值的话,在defer中修改返回值是无效的操作。原因如下: package main func test1() int { i := 1 defer func() { // 实际则是将局部变量i的地址指针传入,调用runtime.d
阅读全文
摘要:在 Go 语言中,函数的参数传递是值传递的方式。当函数被调用时,函数参数的值会被拷贝到函数的参数变量中。 对于指针类型的参数,指针本身也是以值的方式进行传递。这意味着函数内部的指针参数将获得原始指针的拷贝,但这个拷贝仍然指向相同的内存地址。 当在函数内部修改通过指针传递的变量时,由于指针本身是值传递
阅读全文
摘要:准备工作 创建新项目 kratos new helloworld cd helloworld # 拉取项目依赖 go mod download # 项目中的 config 等请自行修改 添加事务 如果您还不了解 Kratos、 mysql 事务 和 GORM 的话请先了解一下。 data 层承载事务
阅读全文
摘要:背景 在看源码时,一些源码方法没有方法体,难道说明这些方法为空?例如:time.Now调用的 now(), time.Sleep , reflect.makechan // Provided by package runtime. func now() (sec int64, nsec int32,
阅读全文
摘要:背景是查询一个有N亿条记录的mysql表 使用go多协程同时查询一个区间的不同数据代码: func txHashesWorker(id int, tasks <-chan Task, results chan<- int, wg *sync.WaitGroup) { defer wg.Done()
阅读全文
摘要:当将 Go 程序编译为二进制文件并在服务器上运行时,可能会遇到配置文件路径不匹配的问题。在本篇博客中,我将介绍两种解决方法。 方法一:指定配置文件的绝对路径 在服务器上运行二进制文件时,通过命令行参数或环境变量传递配置文件的绝对路径,而不是依赖于相对路径。这样可以确保程序能够正确找到配置文件。 例如
阅读全文
摘要:要在Mac系统上构建适用于Linux 64位的Go程序,可以采用以下2种方式: 1.通过设置环境变量并使用交叉编译来实现 以下是在Mac系统上构建适用于Linux 64位的Go程序的步骤: 在你的项目根目录下,打开终端。 设置环境变量 GOOS 和 GOARCH 为 linux 和 amd64,分别
阅读全文
摘要:在Go语言中,结构体不支持继承。Go语言没有类的概念,因此结构体之间不能像面向对象语言中的类继承一样进行继承。 相反,Go语言中的结构体可以通过在一个结构体中嵌入另一个结构体来实现类似继承的效果,这被称为结构体嵌入或匿名字段。 以下是一个示例,展示了如何使用结构体嵌入来模拟继承的效果: go Cop
阅读全文
摘要:以下的代码段在执行写入通道的时候会发生阻塞: spaceId2badgeDatasChan := make(chan map[int32][]*badgeV1.BadgeData) spaceId2badgeCountChan := make(chan map[int32]int32) var ge
阅读全文
摘要:以下这样的循环代码,最后会发现spaceId都是同一个!!!! for _, spaceId := range spaceIds { task := func() { uc.log.WithContext(ctx).Errorf("SpaceUsecase::GetSpaces uc.badgeCl
阅读全文
摘要:看以下代码: func main() { mym := make(map[int32][]bool) slice, ok := mym[1] if !ok { slice = []bool{} mym[1] = slice } slice = append(slice, false) print(m
阅读全文

浙公网安备 33010602011771号