分类 Go 下的文章

Go 1.13 之后的 error 检查


起步

如果说 Go 有很多诟病的地方,那么 Go 中 error 的处理一定可以挤进吐槽榜单前十。既然 try语句提议被一拒再拒,我们也只好用着古老的 if 筛选错误。Go 官方并非没有意识到 error 的鸡肋问题,于是在 Go 1.13 提出了新解决方案,总的说来就是“三个 api + 一个格式占位符”。


GORM 字段使用自定义类型


起步

想在使用 GORM 时使用自定义类型必然事出有因,一般可有以下两种方式:

  • 方法 1:
type MyString string
  • 方法 2:
type MyString struct {
    string
}

当需求比较简单时,可采取方法1,也就是类型别名;如果需求复杂,就不得不把数据字段嵌入自定义结构体中。字段是否匿名并不重要,主要是用来承载目的数据。


Go 方法接收器与接口


在写 Go 的时候,我们常会发现以下情况:

type Z struct {
}

func (zv Z) Hello() {
    log.Println("hello")
}

func (zp *Z) World() {
    log.Println("world")
}

func main() {
    {
        zv := Z{}
        zv.Hello()
        zv.World()
    } // 正常执行

    {
        zp := &Z{}
        zp.Hello()
        zp.World()
    } // 正常执行
}