Go练习题

23 阅读1分钟

题一:

    var n1 int32 = 12
    var n2 int64
    var n3 int8
    
    n2 = n1+20
    n3 = n1+20
    fmt.Println("n2=",n2)//报错:cannot use n1+20(value of int32)as int64 value in assignment
    fmt.Println("n3=",n3)//报错:cannot use n1+20(value of int32)as int8 value in assignment     

以上报错是因为: 在go语言中一个类型不能接受其他类型的赋值
可以更正为

      var n1 int32 = 12
        var n2 int64
        var n3 int8
        
        n2 = int64(n1)+20
        n3 = int8(n1)+20
        fmt.Println("n2=",n2,"n3=",n3)//n2=32,n3=32

题二:

var n1 int32 = 12
var n3 int8
var n4 int8
n4 = int8(n1)+127 //编译通过,但是结果不是12+127,而是-117
n3 = int8(n1)+128 //编译不通过,因为128超出了n3的int8类型的值范围
fmt.Println(n3)

题三:

type MyInt1 int
type MyInt2 = int
func main() {
	var i int =0
	var i1 MyInt1 = i 
	var i2 MyInt2 = i
	fmt.Println(i1,i2)
}

答案解析:
编译不通过,cannot use i (type int) as type MyInt1 in assignment
解析:这道题考的是类型别名与类型定义的区别。 type MyInt1 int是基于类型 int 创建了新类型 MyInt1, type MyInt2 = int是创建了 int 的类型别名 MyInt2,注意类型别名的定义时 = 。所以,var i1 MyInt1 = i 相当于是将 int 类型的变量赋值给 MyInt1 类型的变量,Go 是强类型语言,编译当然不通过;而 MyInt2 只是 int 的别名,本质上还是 int,可以赋值。 代码的赋值可以使用强制类型转化 var i1 MyInt1 = MyInt1(i)。