【发布时间】:2016-11-17 06:42:53
【问题描述】:
这是我在“Hello world”之后的第一个Golang 程序。请找到以下旨在执行基本算术和多类型返回演示的代码块。这只是学习Go func 的假设样本。但是,我在编译时遇到了以下异常。从异常中,我假设,int8 操作数上的操作返回 int16/int32 作为返回类型,并且按照 go 是不正确的。
问题:假设int8 可以安全地分配给int16 或int32 是否安全
package main
import (
"fmt"
)
func Arithmetic(a,b int8) (int8,string,int16,int32){
return a-b, "add",a*b,a/b
}
func main() {
a,b,c,d :=Arithmetic(5,10)
fmt.Println(a,b,c,d)
}
错误:
C:/Go\bin\go.exe run C:/GoWorkspace/src/tlesource/ff.go
# command-line-arguments
.\ff.go:15: cannot use a * b (type int8) as type int16 in return argument
.\ff.go:15: cannot use a / b (type int8) as type int32 in return argument
Process finished with exit code 2
【问题讨论】:
-
您不能将
int8分配给int16或int32,但您可以安全地转换它们。 -
你必须使用
int16()等显式转换它 -
@JimB,感谢您的评论。我可能是错的,但是,安全分配和转换是不同的。
-
@ShmulikKlein,感谢您的评论。如果我们尝试向下转换,转换可能是有效的。但这是一个向上转换的情况。所以,我认为,对于没有任何帮助的编译器来说,这应该是一件容易的事。
-
@Nair:你到底在问什么?您不能将
int8分配给int16/int32/等。仅仅因为它是“安全的”并不意味着它们是可分配的;它们是不同的类型。 golang.org/ref/spec#Assignability
标签: go