理解Go语言特定类型变量初始化:test(20)是函数调用吗?
问题解答
这不是Go的单行赋值或初始化简写语法,本质是显式类型转换操作,具体运行逻辑拆解如下:
- 首先
type test int是Go的自定义类型定义语句:你声明了一个名为test的全新类型,它的底层类型(underlying type)是内置的int类型。 test(20)的写法是Go标准的类型转换语法,格式为目标类型(待转换值),只是语法形式和函数调用高度相似,才会让你误以为test是函数。这里的作用就是把int类型的字面量20,显式转换为test类型的值。- 因为
test的底层类型是int,两者转换合法,转换后的值底层存储就是20,用fmt.Println打印时,fmt包默认会输出自定义整数类型的底层数值,所以最终输出结果为20。
你可以通过下面的代码验证test是类型而非函数:
package main import "fmt" type test int // 只有类型可以绑定方法,函数无法绑定方法 func (t test) Double() int { return int(t) * 2 } func main() { fmt.Println(test(20)) // 输出20 fmt.Println(test(20).Double()) // 输出40 }
内容的提问来源于stack exchange,提问作者Nitin Chauhan
相关产品推荐
相关产品推荐

