【发布时间】:2020-04-08 05:18:04
【问题描述】:
以下代码编译:
package main
import "fmt"
const (
// Max integer value on 64 bit architecture.
maxInt = 9223372036854775807
// Much larger value than int64.
bigger = 9223372036854775808543522345
// Will NOT compile
// biggerInt int64 = 9223372036854775808543522345
)
func main() {
fmt.Println("Will Compile")
//fmt.Println(bigger) // error
}
类型是 内存中的大小 + 该内存中的位表示
编译时分配给bigger 的隐式类型是什么?因为fmt.Println(bigger) 行的错误constant 9223372036854775808543522345 overflows int
【问题讨论】:
-
没什么。这是一个无类型的常量。将类型分配给变量时将选择它。 See The Go Blog: Constants。查看相关问题:How does Go perform arithmetic on constants? 和 What is the purpose of arbitrary precision constants in Go?
-
@icza
fmt.Println(bigger)给出错误constant 9223372036854775808543522345 overflows int -
@overexchange: sure:
fmt.Println(bigger)尝试将无类型常量分配给一个变量——一个 未命名 变量,但类型为int,然后可以传递到fmt.Println。不合适,你会收到投诉。 -
@torek
go run myfile.go编译并执行机器代码以给出此错误。如何只编译这个文件myfile.go到myfile.o? -
它不编译。它无法编译。它不执行。 编译器 打印错误。
go run仅在程序编译后运行。
标签: go