Golang 程序实体
极客时间《Go 语言核心 36 讲》学习笔记 05,图片来自网络
04 | 程序实体的那些事儿(上)
类型推断(编程语言在编译期自动解释表达类型)最早是在 C# 里面看到的,作为一种语法糖,用起来感觉很好。
表达式类型就是对表达式进行求值后得到结果的类型
An expression specifies the computation of a value by applying operators and functions to operands.
Go 语言的类型推断提升了程序的灵活性,便于重构,同时没有损失程序的性能(在编译期确定类型)。
Go 语言的类型推断只用于变量或常量的初始化。
对于思考题,如果与当前变量重名的是外层代码块中的变量,那么相当于是在内层代码块中的一个新的变量,可以与外层同名变量不同类型。
a short variable declaration may redeclare variables provided they were originally declared earlier in the same block (or the parameter lists if the block is the function body) with the same type, and at least one of the non-blank variables is new.
看到答案中提到“可重名变量”,那么还有“不可重名变量”么?
05 | 程序实体的那些事儿(中)
这一篇其实是前文的后续,从重声明到可重名变量。
变量重声明是在某一个代码块内,对同一个变量的多次声明(赋值?),类型不变。
可重名变量可以各有各的类型。
思考题:如果通过 import . XXX 导入代码包中的变量,与当前代码包中的变量重名了,那么 Go 语言应该会报错。
导入之后,确实和变量名称的首字母是否大小写有一定的关系,如果在是大写,那么在 main 中会提示 already declared,但是可以运行;如果是小写,不会有提示。
将变量的地址打印出来,确实可以看得更清楚。
参考答案中“本地变量屏蔽被导入变量”说的很清楚了。
版权声明: 本文为 InfoQ 作者【escray】的原创文章。
原文链接:【http://xie.infoq.cn/article/3b3f9f34af58a839bdcb18833】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论