英文:
Is there a builtin func named "int32"?
问题
下面的代码片段运行正常。
在这种情况下,"int32"是什么?是一个函数吗?
我知道有一种叫做"int32"的类型。
这可能是一个愚蠢的问题。我刚刚完成了《Go之旅》但是我找不到答案。(可能是我漏掉了什么。)
package main
import "fmt"
func main() {
var number = int32(5)
fmt.Println(number) //5
}
英文:
The below snippet works fine.<br>
In this case, what "int32" is? A func?<br>
I know there is a type named "int32"<br><br>
This could be a stupid question. I've just finished A Tour of Go but I could not find the answer.(it's possible I'm missing something.)
package main
import "fmt"
func main() {
var number = int32(5)
fmt.Println(number) //5
}
答案1
得分: 10
当在表达式或赋值中混合使用不同的数值类型时,就需要进行类型转换。例如,int32和int虽然在特定的架构上可能具有相同的大小,但它们并不是相同的类型。
由于你进行了变量声明,你需要指定'5'的类型。
另一个选项是,如rightfold在评论中提到的:var number int32 = 5
(与短变量声明 number := 5
相对应)
另请参阅Go FAQ:
在C语言中,数值类型之间的自动转换的方便性被造成的混淆所抵消。
表达式何时是无符号的?值有多大?是否会溢出?结果是否可移植,与执行的机器无关?
它还使编译器变得复杂;“通常的算术转换”不容易实现,并且在不同的架构上不一致。
为了可移植性的原因,我们决定以一些显式的转换为代价,使事情变得清晰和简单。Go中常量的定义——没有符号和大小注释的任意精度值——在很大程度上改善了这个问题。
一个相关的细节是,与C语言不同,即使
int
是64位类型,int
和int64
也是不同的类型。
int
类型是泛型的;如果你关心一个整数占用多少位,Go鼓励你明确指定。
英文:
It is a type conversion, which is required for numeric types.
> Conversions are required when different numeric types are mixed in an expression or assignment. For instance, int32 and int are not the same type even though they may have the same size on a particular architecture.
Since you do a variable declaration, you need to specify the type of '5
'.
Another option, as mentioned by rightfold in the comments is: var number int32 = 5
(as opposed to a short variable declaration like number := 5
)
See also Go FAQ:
> The convenience of automatic conversion between numeric types in C is outweighed by the confusion it causes.
When is an expression unsigned? How big is the value? Does it overflow? Is the result portable, independent of the machine on which it executes?
> It also complicates the compiler; “the usual arithmetic conversions” are not easy to implement and inconsistent across architectures.
> For reasons of portability, we decided to make things clear and straightforward at the cost of some explicit conversions in the code. The definition of constants in Go—arbitrary precision values free of signedness and size annotations—ameliorates matters considerably, though.
> A related detail is that, unlike in C, int
and int64
are distinct types even if int
is a 64-bit type.
The int
type is generic; if you care about how many bits an integer holds, Go encourages you to be explicit.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论