Go 学习:那些不一样的知识点(上)

网站建设3年前发布
29 00

Go 学习:那些不一样的知识点(上),在学习 Go 语言的过程中,会涉及到语法、数据结构、和一些 Go 特有的东西,其中有不少现在还印象深刻,本文就说说 Go 语言中那些不一样的地方。,上面示例是变量的声明方式,可以看到跟 C# 不同的是,类型是写在变量名之后的,而在 Go 中的函数也遵循这个原则:,为了提高代码的可读性和避免一些隐藏的错误,在 Go 中不支持类型的隐式转换。,在 C# 中下面的代码可以正常编译和运行:,而在 Go 中下面的代码是会有编译错误的:,int16 和 int32 之间不能隐式转换,只能进行显示转换,如下:,为了提高生产力,避免在语言中犯错,Go 有很强的约束性,不支持前置 ++ 和 — :,对数组的比较和 C# 也有区别,比如在 C# 中比较两个长度相同、值相同的数组,返回的是 False :,但在 Go 中会有不一样的结果:,Go 中的 map 和 C# 中的 Dictionary 有点像,map 的值可以是普通的数据类型外,也可以是一个函数:,在 Go 中的条件判断也有 if 和 switch 两种。,if 可以支持在条件的表达式中进行变量赋值:,switch 的使用也有些不一样的地方:,在 Go 语言中,关键字非常少,因此,循环处理只有一个关键字 for。,一个简单完整的 Go 程序如下所示:,可以看出 Go 的 main 函数没有返回值和参数,如果需要在 main 函数中使用参数,需要引入 os 包:,我们知道在 Go 语言中,main 函数是程序的入口函数,但 main 函数并不是第一个执行的函数,在 main 之前还有 init 函数会先被执行,在 init 函数中可以做一些初始化的工作:,在 C# 中函数支持多返回值的方式有很多种,比如:返回一个对象、参数使用 out ,还有就是在 C# 7.0 添加的新功能元组,下面为 C# 中用元组的方式返回多值:,Go 语言的函数返回多值和 C# 的元组的方式比较像:,在接收值时,如果某些值不需要,可以使用 _ 进行忽略:,在 Go 中使用 defer 关键字可以让函数延迟执行,可以用来做释放资源,释放锁等,先看下面的代码,clear 函数前面添加了 defer 关键字,虽然在第 main 函数第一行,但会最后调用:,使用 panic 使程序崩溃,会发现被 defer 定义的函数依然会在最后执行:,这有点像是在 C# 中使用 try catch ,异常捕获之后,finally 块中的代码还是会被执行,我认为 Go 语言的这种处理更加灵活,以组合的方式来达到目的,这也符合 Go 语言的设计哲学。

© 版权声明

相关文章