前言
目前大部分时间都用来学习go语言了,从基础到框架的学习,还是很轻松的,就是需要特别注意容易踩坑。
感想
在go语言中,需要大量的写 if err != nil {}
用来排错,这是为后续程序运行报错提供明确的指示,我理解这样的做法,在初学者阶段,能提前把错误给判定了,这样后面就能少踩一些坑。
目前的go语言生态并不成熟,一些框架设计的都是非常简单,没有像python或js那样,有海量的类库。但是go的语法非常简单,也不需要太复杂的库。目前已经学习的框架有:gin、gorm、grpc
go语言是没有面向对象的,但是有结构体,可以实现类似的面向对象,并且go语言有一个类型叫 鸭子类型
,这是一个非常好的设计,原理就是:一只鸟,看着像鸭子,叫起来像鸭子,走起来像鸭子,水里游起来也像鸭子,那么就可以判定这只鸟就是一只鸭子。只要我的行为跟你定义的一样,那么我就是你。
从js转到go后,发生了很大的变化,就是不能随意赋值了,哈哈哈。go是一种强类型静态语言,需要明确指定变量的类型,如果想填入任意值,可以使用 any
或者 interface{}
,但这样又会引发出另一个问题,在使用这个变量的时候需要通过断言或者反射来获取变量的类型,否则无法使用。还有一点就是一个int整数类型,有int,int8,......,int64等等,甚至还有uint,他有很多不同的类型,在js中只需要确认他是number类型。假如有个变量定义的是int64,然后它的值为128,如果你要转换成int8,那么就会报错,因为int8的范围是-128到127,所以在高数值转向低数值的时候要特别小心。
GO语言胜任的业务
接下来就是聊一下go语言能胜任的业务:
- 网络编程:高性能服务器,API开发
- 分布式系统:微服务架构,消息队列
- 大数据处理:并行计算,流式处理
- 云计算:云原生,k8s集群
- 游戏开发:服务器端网络编程
- ......
目前最流行的就是微服务,云原生,k8s,docker等等。
个人分享
开发go可以用vscode和goland,其中goland是最好用的,因为功能更全面,但它是收费的。vscode是免费的,但是他有go语言开发工具包,也非常好用。主选goland,其次是vscode。
目前最新的go是用go mod来管理项目,在使用第三方类库的时候简单了很多。
推荐一些第三方库:
- 解决浮点数精度损失问题:https://pkg.go.dev/github.com/shopspring/decimal
- 快速从JSON文档中获取值:https://pkg.go.dev/github.com/tidwall/gjson
- 自动加载env文件: https://pkg.go.dev/github.com/joho/godotenv/autoload
- jwt:https://pkg.go.dev/github.com/golang-jwt/jwt/v5
- bcrypt:https://pkg.go.dev/golang.org/x/crypto/bcrypt
还有一些我没列出来,感兴趣的可以去 pkg.go.dev 搜索。
在国内拉取第三方库的时候可能会出现网络异常,这时候需要给go mod加个代理,推荐两个:
根据自己喜好去选择。
还有很多关于go语言的话题没有讲完,今天就讲这么多,后续再补充。如果感兴趣可以前往我的笔记站点查看:Go语言笔记
参与讨论