实现接口功能后,需要在接口中通过数据库操作,实现 Web 系统的业务功能。而 Go 因为其一些特性,数据类型和数据库的适配存在一些问题,需要在数据库开发设计时提前考虑。 想起一件事,以前有个外包的朋友告诉我,数据库所有字段必须全部 not null,这是公司规范! 以前觉得这个规范很离谱,使用了 Go 之后发觉设置为 not null 确实可以避免很多麻烦。 一、默认值问题 Go 的默认值对于其他语言的开发来说可能有些不适,举例几个常见数值的默认值。 String 默认值: GO:空字符串 Java:null MySQL:null int 默认值: Go:0 Java:0 MySQL:null boolean 默认值: Go:false Java:false MySQL:null 通过以上默认值对比,可以发现问题,MySQL 所有数据类型都可以支持 null 值,而编程语言上却不支持。 这就导致一个问题,编程语言上的数据值如何和数据库的值对应? 在 Java 开发中,针对 null 值问题可以使用包装类,如 Integer、Boolean 等,这也是最成熟简单的解决方案。 在 Go 中可以通过指针支持 null,也可以通过数据库包提供的 sql.NullString、sql.NullBool 等类型来实现 null 值的适配。 但是这两种 null 值适配方案实现的不是很好,有一些解决起来挺麻烦的缺陷。 有人发现,null 貌似很多时候也没啥用。于是,出现了一些人,将数据库的 not null 选上,将默认值设置得和 Go 语言的默认值一样,以此解决默认值不一致问题。 那到底要不要保留 null 值呢? 二、保留 null 值 数据库保留 null 值时面临的第一个问题就是,怎么把 null 值传给数据库,这就需要用到指针,因为指针是支持 nil 值的。 如下示例代码,Na...