Web开发学习手记(一):Go语言
前言
加入冰岩作坊第一个新人任务就是学习Go并且用gin框架做一些小的实践,自然是要先学习一下Go的。
在此之前,我只对面向对象有了解,但Go作为一种非面向对象(更像C语言)的语言,它的设计模式等是我不熟悉的,实践的过程中也经常碰壁。
在这篇手记中,我主要记录下个人对Go语言的认识和一些需要注意的地方。由于能接触到的内容还很局限,这里只会提到有限的一部分。在学习的过程中也许会一直补充这个内容吧(咕咕咕警告)。
语法
- 不需要分号!分号只是用于分隔同一行的多条语句的,如果用换行分隔了,语句的末尾就不需要分号了。
- 变量声明的类型在变量名的后面!这是和很多语言都有区别的地方,Go的声明中类型应该放在名称后面,这里包括变量和函数。比如
var a int
。 - 有指针类型,但比C的指针安全!在Go中,指针只是用于取地址用的,不能对它做加减操作,避免了加减越界的风险。
- 切片!大小可以改变的切片在使用时可以当做动态数组,而且可以类似Python那样取任意的一段出来作为一个新切片。
- 接口!虽然Go不是一个OO语言,但是却存在接口这种多态的特性。在Go中,接口是隐式实现的,即如果实现了接口中的所有方法,则认为实现了该接口。
- 类型转换与类型断言!在Go中可以做类型转换,与C的类型转换没有区别。但对于空接口
interface{}
来说它没有任何类型,需要用类型推断来对它进行转换,形如a.(int)
,返回两个值接口a的转换结果和推断是否可行。 - 错误处理和中断!在Go中一般会在可能产生错误的函数中把error作为返回值。出现了错误之后不一定会中断,可以手动使用panic等令其中断。这一点和Java的错误处理区别比较大。
- 并发!Go中的goroutine和channel真的很方便。虽然到现在为止还没有写过需要并发的程序,将来有机会可以实践一下。
- 命名规则!在Go里,一般使用大驼峰命名函数、变量等,局部变量会使用小驼峰。这与Java里到处小驼峰和C里到处下划线的规则区别很大。
开发环境和结构
- GOPATH!所有的项目都需要放在GOPATH中,不然会找不到导入的包。
- go mod!但是放在GOPATH里会很麻烦,于是可以使用go mod这种包管理器来帮你处理导入包的一系列问题,让你的项目可以放在任意位置。
- 更短的包名!Go的包名没有Java那样前面搞个很长的URL前缀,所以很短。
- GoLand!这里不做评价了。JetBrains牛逼!