go 語言中預設的型別識別

weixin_34148340發表於2018-06-04

下面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 參與 字元的預設

2321455-777d36463e448267.png
image.png

case中同時出現int32 和 rune會報錯,也就是說他兩是一樣的

2321455-90b6cce7be21f674.png
image.png

相關文章