Reputation: 5140
This is my first Golang
program after 'Hello world'. Please find following code block which aims to perform basic arithmetic and multiple type return demo. This is just a hypothetical sample to learn Go func
. However, I am getting following exception on compilation. From exception, i assume, operations on int8
operand return int16/int32
as return type and which is not correct as per go.
Question: Isn't it safe for language to assume int8
is safely assignable to int16
or 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)
}
Error:
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
Upvotes: 1
Views: 2744
Reputation: 24808
Is it it safe for language to assume int8 is safely assignable to int16 or int32
Yes, It would be, if Go did implicit conversions on assignment. But it does not (only interface-wrapping when applicable).
There are several reasons:
Upvotes: 2
Reputation: 5123
The error says that you have to return int16 and int32, all you have to do is convert the result like this:
func Arithmetic(a, b int8) (int8, string, int16, int32) {
return a - b, "add", int16(a * b), int32(a / b)
}
Upvotes: 2