You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

理解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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 11:21:01