go 语言中默认的类型识别

下面x,y是什么类型

var x = 23.2
var y = 23
package main

import (
    "fmt"
    "unsafe"
)

func main()  {
    
    var x = 23.2
    fmt.Println(x)
    fmt.Println(unsafe.Sizeof(x))
    t(x)

    var y = 23
    fmt.Println(y)
    fmt.Println(unsafe.Sizeof(y))
    t(y)
}

func t(i interface{}) {  //函数t有一个参数i
    switch i.(type) { //多选语句switch
    case string:
        //是字符时做的事情
        fmt.Println("this is a string")
        break
    case int:
        //是整数时做的事情
        fmt.Println("this is a int")
        break
    case bool:
        fmt.Println("this is a bool")
        break
    case int32:
        fmt.Println("this is a int32")
        break
    case float32:
        fmt.Println("this is a float32")
        break
    case float64:
        fmt.Println("this is a float64")
        break
    default:
            fmt.Println("this is a default")
    }
    return
}

结果是这样的

显然:如果不声明类型的话,默认的类型都是占用64位(如果机器是32位的话,默认是32位)
整形默认是 64位的int, 浮点型默认是64位的float64

记忆方法;
1.位数,机器的cpu位数 64位机器占8字节,那么默认就是8字节的类型
2.int (机器位数有关)
3.float+(32/64)机器位数有关
4.int + (8/16/32/64) 不参与默认设置
5int32 或者rune 参与 字符的默认

image.png

case中同时出现int32 和 rune会报错,也就是说他两是一样的

image.png

你可能感兴趣的:(go 语言中默认的类型识别)