golang的变量定义为什么还没有python简洁?
mb5fdb133c76a49 · · 1450 次点击 · · 开始浏览golang的变量定义为什么还没有python简洁?
今天的内容其实不能算一篇文章,而是学习
golang时遇到的一个比较有意思的问题。欢迎大家指正批评
最近在深度研究k8s和docker,期间发现源码是golang。无奈,只好乘机把golang也学了。
我以前是写python和前端(vue,element,ajax,jquery,css,h5小程序...等),在学习golang时,发现其变量声明很不优雅。例子如下:
图片switch结构体
这里有两个设计理论可能不够优雅:
- 疑问1:
switch结构体
switch 的 os变量声明后,还在再跟一个os,再跟case结构体,不然会报语法错。
当然了,还有另外一种写法:先声明os, 再 switch os {...}
- 问题2:变量声明
关于go的变量声明, go作为新起之秀,为什么不隐式声明,非得 :=这种方式呢?像python 甚至 shell 声明变量的方式如下:i,j = 42, 2701go 的声明方式: i, j := 42, 2701
多一个:(冒号)不是增加了语言的复杂度吗,设计上还不如python优雅, 有什么其它原因?
大家也可以想一想,再向后翻看答案 .
.
.
.
.
.
.
. . . . . . . . . . .
go是强类型语言,它不是python这种弱类型的脚本语言。所以它的赋值和初始化本应该像c++一样提前先声明类型才能使用。但为了兼顾易用性,:=是go提供的赋值和初始化的语法糖。python这种弱类型语言可以不用先声明类型,它牺牲了运行效率,提高了开发效率
这是老司机老章给出的答案,很专业哦!
当然了,作为golang小白,我还是有一丝丝疑惑啦
这个和效率高低有多大关系呢?
go只是少了编译的过程。变量的声明和调用方式,如果go还是使用=声明,只是在C实现的时候做一层转化,也有同样的效果吧
有疑问加站长微信联系(非本文作者)
入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889
关注微信- 请尽量让自己的回复能够对别人有帮助
- 支持 Markdown 格式, **粗体**、~~删除线~~、
`单行代码` - 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
- 图片支持拖拽、截图粘贴等方式上传
收入到我管理的专栏 新建专栏
golang的变量定义为什么还没有python简洁?
今天的内容其实不能算一篇文章,而是学习
golang时遇到的一个比较有意思的问题。欢迎大家指正批评
最近在深度研究k8s和docker,期间发现源码是golang。无奈,只好乘机把golang也学了。
我以前是写python和前端(vue,element,ajax,jquery,css,h5小程序...等),在学习golang时,发现其变量声明很不优雅。例子如下:
图片switch结构体
这里有两个设计理论可能不够优雅:
- 疑问1:
switch结构体
switch 的 os变量声明后,还在再跟一个os,再跟case结构体,不然会报语法错。
当然了,还有另外一种写法:先声明os, 再 switch os {...}
- 问题2:变量声明
关于go的变量声明, go作为新起之秀,为什么不隐式声明,非得 :=这种方式呢?像python 甚至 shell 声明变量的方式如下:i,j = 42, 2701go 的声明方式: i, j := 42, 2701
多一个:(冒号)不是增加了语言的复杂度吗,设计上还不如python优雅, 有什么其它原因?
大家也可以想一想,再向后翻看答案 .
.
.
.
.
.
.
. . . . . . . . . . .
go是强类型语言,它不是python这种弱类型的脚本语言。所以它的赋值和初始化本应该像c++一样提前先声明类型才能使用。但为了兼顾易用性,:=是go提供的赋值和初始化的语法糖。python这种弱类型语言可以不用先声明类型,它牺牲了运行效率,提高了开发效率
这是老司机老章给出的答案,很专业哦!
当然了,作为golang小白,我还是有一丝丝疑惑啦
这个和效率高低有多大关系呢?
go只是少了编译的过程。变量的声明和调用方式,如果go还是使用=声明,只是在C实现的时候做一层转化,也有同样的效果吧