这是我在'Hello world'之后的第一个Golang
计划。请找到以下代码块,旨在执行基本算术和多类型返回演示。这只是一个学习Go func
的假设样本。但是,我在编译时遇到以下异常。从异常开始,我假设,int8
操作数上的操作返回int16/int32
作为返回类型,并且每次操作都不正确。
问题:语言假定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
答案 0 :(得分:3)
语言是否安全,假设int8可安全地赋值给int16或int32
是的,如果Go在转让时做了隐含的转换,那就是。但它没有(只适用于界面包装)。
有几个原因:
答案 1 :(得分:2)
错误说您必须返回 int16 和 int32 ,您只需将结果转换为:
func Arithmetic(a, b int8) (int8, string, int16, int32) {
return a - b, "add", int16(a * b), int32(a / b)
}