如何在Go语言中通过:=隐式推断指定数字类型?
Go语言数字类型的自动推断方法
首先,你在C里用auto number = 0LL的操作叫类型推断(Type Inference),Go语言的短变量声明:=也属于类型推断范畴,但Go对数字字面量的默认类型规则和C不同,要让:=推断出uint32这类特定数字类型,有两种可行方式:
1. 显式转换数字字面量
直接对字面量做类型转换,:=会自动推断转换后的类型:
// 推断为uint32类型 number := uint32(0) // 推断为int64类型 count := int64(100) // 推断为float32类型 price := float32(9.99)
这种方式最直接,和C++里用字面量后缀(比如LL)指定类型的效果一致。
2. 通过上下文约束类型
如果变量的使用场景有明确的类型要求,:=会根据上下文自动推断出对应类型:
- 赋值给已有类型的变量:
var target uint32 // 这里number会被推断为uint32,因为后续要赋值给target number := 0 target = number - 作为特定类型参数传入函数:
func processUint32(n uint32) {} // 这里number会被推断为uint32,因为要匹配processUint32的参数类型 number := 0 processUint32(number)
需要注意的是:Go没有像C++那样给数字字面量加后缀(比如LL、U)来直接指定类型的语法,所以如果没有上下文约束,单独用:= 0声明的变量默认是int类型(大小随机器架构变化)。
内容的提问来源于stack exchange,提问作者Matheus Sousa
相关产品推荐
相关产品推荐

