学习go语言的一点体会

ying1234 2020-07-04 11:11:20
业务时间,断断续续学go已有一年了,体会到go语言其实并不是一门真正的高级语言,尽管它有高级语言的一些特性,如gc。但准确的定位,它其实还是一门介于低级和高级语言之间的语言。象java,c#,你不需要对底层的东西太过了解,例如数组,ArrayList,字典,只需要知道功能就可以了,使用基本不会出问题,go就不行了,你必须对底层的东西要了解,不用说都搞得很明白,但至少要了解,了解哪些坑,坑太多了。

例如:
1:var i *int 光这一句,你就要知道它是nil指针,指向内存地址是0的,i==nil ,用它调用方法,赋值,都是错的,因为go中0-255的内存地址是系统留用的,不允许任何操作。你要知道空指针!=nil,只有指针的动态类型和动态值都为空,才等于nil,空指针只是动态值为空,动态类型不为空,那它就!=nil,这在实际使用中有可能会出错。

2: for k,v:=range t ,你要知道t只是个复制的副本,v只是每次复制值,地址不会变,所以不要用&v,否则永远取到最后一次循环v的地址。

3: 例如 切片,你从数组中用s[i:j]来截取生成切片,其实切片底层也是数组,和原数组是共享的,所以你改了切片某个元素的值,对应原数组某个元素的值也变了。

4:例如切片,用append加元素,超过容量,就会生成新的内存地址的切片,你如果原切片在main中,append在一个函数中,没有返回新切片,你会发生main中的老切片不会有任何变化。

5:例如一个函数 func test() r int {
defer func(){
......
}()
return 6
}
return r=6不是原子操作
它可以分解成3步
一:r=6
二:执行defer
三:空的return


.......


太多了,所以不要急着研究框架,研究别人代码,有空先把基础打好,否则做出来的东西,一旦有问题,查还不好找原因。我就遇到这事,一个go exe服务程序,总是运行几天崩溃,最后折腾好久其实就是基础没掌握好的事。
...全文
533 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
任何一种技术或者语言都有它照顾不到的地方,作为工具使用者,取其所需吧。欢迎关注下我,大家一起交流 https://blog.csdn.net/u012737673
qybao 2020-08-12
  • 打赏
  • 举报
回复
呵呵,我觉得主要是习惯的问题
习惯了一种语言,转另一种语言时,会沿用前一种语言的习惯
每种语言有相同的地方,也有不同的地方,这才有了语言的差异,否则统一成一种语言就好了
十一文 2020-08-06
  • 打赏
  • 举报
回复
引用 1 楼 tangyanzhi1111 的回复:
go 就火了一阵,然后就没有然后了
非也,据我所知目前招golang的公司有: 阿里,高德 腾讯 ,滴滴 百度 还需要多举例吗
ying1234 2020-07-15
  • 打赏
  • 举报
回复
引用 1 楼 tangyanzhi1111 的回复:
go 就火了一阵,然后就没有然后了
还好了,大企业用得不少,中小企业还是老样子,用得不多,原先的技术都很成熟了,没有换的必要。可能和go坑太多也有些关系。一开始觉得很好学,时间久了觉得未必这么容易。
江湖评谈 2020-07-14
  • 打赏
  • 举报
回复
go 就火了一阵,然后就没有然后了

2,348

社区成员

发帖
与我相关
我的任务
社区描述
go语言学习与交流版
社区管理员
  • go语言社区
  • 俺叫西西弗斯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧