如何从零开始搭建自己的个人网站(4)——数据库

less than 1 minute read

Published:

在讲完如何编写后端接口之后,下一步就是想办法将网站所需的数据存储到数据库当中了。作为一个最最基本的网站,我们并不会使用到复杂的存储模式(如NoSQL),所以数据库管理软件还是选择免费且简单的MYSQL。这样一来,Golang如何与MYSQL进行交互就变成了一个相当关键的问题。本篇文章会围绕这一主题进行讲解。内容不难,相信你很快就能学会。

下面这篇文章我认为已经讲得足够好了,代码也附得很全。我强烈推荐大家先阅读这篇文章。我只会就这篇文章当中比较难理解的部分进行分析。

Golang对MYSQL的基本操作

Step-7:数据库交互

常见的数据库操作:

  • 增:增加(Insert)
  • 删:删除(Delete)
  • 改:修改更新(Update)
  • 查:查询(Select)

重点1:提前规划好你的数据库表结构

这是我在经历了一系列表重构的血与泪的教训之后总结出来的最最最重要的结论。原因主要有两点:

  1. (重要)表的重构会改变表结构,影响与表关联的其他表。
  2. 表的重构有时要先删除整张表,再重新建表。数据的临时存放比较麻烦。
  3. (重要)表的重构会直接影响后端与之相关的接口和结构体的编写,项目大了以后修改起来难免有遗漏。这可能会带来毁灭性的影响。 当然了,你可能会觉得:我才刚开始做一个小项目,就算要改也不是什么难事。是这样没错,而且对于我们这种新手来说,几乎不可能在开始之前就提前规划好未来所有可能会用到的数据建表,我当时就漏了很多后来发现必须的数据项lol。遗漏在所难免,但我们未来总会要成为独当一面的开发者,提前将这些事情先记下,再在失误中不断强化,我觉得总没有坏处。

最后,数据库的表结构设计就不用我多说了。尽量通过正则化,分表来减少冗余,会让数据库看起来更加清晰,也会提高效率。

重点2:Go在定义结构体field时大小写一定要注意

由于我一开始Go学得不太好,很多细节都不懂,在定义结构体的时候被大小写问题困扰了很久。下面这个代码片中可以看到User结构体内的元素名都采用了首字母大写,然后在后面加一串db:"小写形式"。这并不是作者在故意把问题变复杂,而是Golang的export identifier(导出标识符)的规则:只有首字母大写的变量和方法会被exported,小写的则只能在本package内使用。因为我们需要引入其他的package来对结构体进行操作(比如BingJSON函数,将传入的JSON绑定到我们的结构体),所以必须要export结构体内的每个变量。但是我们又习惯最终导出的JSON全是小写字母,这就解释了为什么作者要什么后面的db:"小写形式"。这里用json:"小写形式"效果应该差不多。作用是在导出JSON格式时转为小写。

还需要注意的一点是,json:的冒号后面不要空格,且小写形式要用双引号括起来,这都是避免Go警告的细节了。 type User struct { ID int64 db:"id" Name sql.NullString db:"name" //由于在mysql的users表中name没有设置为NOT NULL,所以name可能为null,在查询过程中会返回nil,如果是string类型则无法接收nil,但sql.NullString则可以接收nil值 Age int db:"age" }

重点3:Gin返回的JSON是无序的

永远不要指望JSON内数据的顺序

结尾

我们暂时不考虑通过索引和其他方法来提高检索效率,这些留待以后进行。基本的数据库操作在我推荐的那片文章了已经讲得很详细了,跟着做就可以收获想要的效果。到此,你应该已经可以用React的 “npm start”在localhost访问你的网站了。但是我们希望能让我们的网站上线,使得每一个互联网的冲浪者都能看到,这就需要我们在自己的云服务器上进行相应的配置了。这个过程不是很难,但是比较复杂,我会在下一篇,也将是这个系列的最后一篇文章中进行分享,请大家一定坚持到最后,因为真的离成功只有一步之遥了(但我怎么找不到最后一篇的备份了,看后面能不能重新写出来吧hhh)。