Go語言之旅:基本類型

原文地址:https://learn-linux.readthedocs.io
歡迎關注我們的公衆號:小菜學編程 (coding-fan)

Go 內置了以下基本類型:

  • 布爾

    • bool
  • 字符串

    • string
  • 整數

    • int int8 int16 int32 int64
    • uint uint8 uint16 uint32 uint64
  • 字節

    • byteuint8 的別名
  • Unicode

    • runeint32 別名
  • 浮點

    • float32 float64
  • 複數

    • complex64 complex128
package main

import (
    "fmt"
    "math/cmplx"
)

var (
    ToBe    bool        = false
    MaxInt  uint64      = 1 << 64 -1
    z       complex128  = cmplx.Sqrt(-5 +12i)
)

func main() {
    fmt.Printf("Type: %T Value: %v\n", ToBe, ToBe)
    fmt.Printf("Type: %T Value: %v\n", MaxInt, MaxInt)
    fmt.Printf("Type: %T Value: %v\n", z, z)
}

例子展示了幾種不同類型變量的用法。 注意到,跟 import語句 一樣,變量申明可以批量寫到一個代碼塊裏。

一般來說,intuint 以及 uintptr 類型在 32 位機器上是 32 位長; 在 64 位機器上則是 64 位長。 需要使用整數時, int 類型是首選, 除非你有特別的理由一定要用 定長 或者 無符號 類型。

零值

變量申明時沒有顯式賦初始值,則默認是“ ”。

不同的類型有不同的“ ”:

  • 對於數值類型是 0
  • 對於布爾類型是 false
  • 對於字符串類型是 "" (空字符串);
package main

import "fmt"

func main() {
    var i int
    var f float64
    var b bool
    var s string
    fmt.Printf("%v %v %v %q\n", i, f, b, s)
}

類型轉換

表達式 ( expression ) T(v) 將值 v 轉換成類型 T , 這就是所謂的 類型轉換 ( type conversions )。

這是一些數值類型轉換:

var i int = 42
var f float64 = float64(i)
var u uint = uint(f)

或者簡寫成:

i := 42
f := float(i)
u := uint(f)

C 語言有所不同, Go 在不同類型之間賦值,需要顯式類型轉換。 不信,將下面例子中 float64unit 類型轉換移除,看看發生什麼?

package main

import (
    "fmt"
    "math"
)

func main() {
    var x, y int = 3, 4
    var f float64 = math.Sqrt(float64(x*x + y*y))
    var z uint = uint(f)
    fmt.Println(x, y, z)
}

類型推理

變量類型通過右邊的值推理而來。

如果申明右邊的值是有類型的,那麼新變量也是一樣的類型:

var i int
j := i  // j is an int as well

如果右邊只是一個數值常量,沒有具體類型,那麼新變量可能是 intfloat64 以及 complex128 三種類型中的一種,取決於常量的精度。

i := 42             // int
f := 3.142          // float64
g := 0.867 + 0.5i   // complex128

接下來做個實驗吧! 改變例子中 v 的初始值,觀察它是如何影響變量類型的:

package main

import "fmt"

func main() {
    v := 42     // change me!
    fmt.Printf("v is of type %T\n", v)
}

下一步

下一節 我們一起來看看 Go 語言 常量

訂閱更新,獲取更多學習資料,請關注我們的 微信公衆號

小菜學編程

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章