青训营笔记 - Go语言相比于其他语言的基础区别
Go语言常用于高性能高并发的任务,除了工具链和标准库较为完善外,还有静态编译、快速连接、跨平台、垃圾回收等特点。我本身用python、C++较多,借青训营几回接触Go后发现许多不同,语法方面的入门基础区别在此记录。
- 声明方面。对变量类型的声明,在变量后,比如C++中会有
int year;,而在Go中为var year int,这里默认为变量,如果是常量则为const而非var。 - 赋值方面。赋值是任何一个语言的基本功能,但在使用一个变量前需要声明这个变量。比如对year这个变量赋值2023(int),在C++中需要在
year = 2023前申明int year;,python中会默认为int,直接year = 2023即可,若为浮点数,可写为year = 2023.。但在Go中有两种处理方式一种和C++中一致,另一种则和python中一致,即在赋值的同时会声明,写为year := 2023。 - 基本语法方面。融合了python,C++多种语言的特点,但for循环需要单独说一下,因为他是Go语言中唯一的循环方法,使用语法为
for XXX {ZZZ},XXX为循环条件,无需括号,大括号内部为循环内容。 - 函数返回与错误处理。函数返回和错误处理可以同时完成,比如视频中的代码(如下),最后一个返回值为error处理的情况,对错误处理方便不少。并且函数在声明时,也需明确指出返回类型,工程维护会舒服不少。
func findUser(users []user, name string)(v *user, err error){
processing
return nil, errors.New("not found")
}
- package & import,包管理。初见Go时,源文件头部同时有package和import让我感到很别致。使用后发现:其中import先搜索GOROOT,后搜索GOPATH,GOPATH中有安装的第三方库和我们自己写的库。而package则必须出现在每一个源文件中,表示该源文件从属于那个package,可以有多个源文件属于一个package,这里的package和python中的很像,不过是显示声明而非文件夹的结构。