go語法

語言: CN / TW / HK
  1. 基本型別

    • bool

      優先順序:&& > || * > +

      布林型不可強制轉為整型,也不可以轉為其他型別

    • string

    • int int8 int16 int32 int64

      Int8(-128 - 127). uint8(0 - 255)

      通常 int 型別的處理速度也是最快的

      0x%x 十六進位制, %d 十進位制,

    • uint8 16 32 64 uintptr

      uintptr無符號整數型別,沒有指定具體的 bit 大小但是足以容納指標,uintptr 型別只有在底層程式設計時才需要,特別是Go語言和C語言函式庫或作業系統介面相互動的地方

      程式邏輯對整型範圍沒有特殊要求,但是 在二進位制傳輸、讀寫檔案的結構描述時,為了保持檔案的結構不會受到不同編譯目標平臺位元組長度的影響,不要使用 int 和 uint

    • byte // uint8的別名

    • rune //int32的別名 代表一個unicode碼

  • float32 float64

    fmt.Printf("%f\n", math.Pi). fmt.Printf("%.2f", math.Pi)

    • complex64(32位實數和虛數) complex128

      complex128 為複數的預設型別, name := complex(x, y) x為實部,y為虛部

      real(z)獲取實部 imag(z) 獲取虛部

  1. 申明 標準格式 批量格式 簡短格式

    := 宣告時左值變數必須是沒有定義的變數

    var conn net.Conn
    var err error
    conn, err = net.Dial("tcp", "127.0.0.1:8080")
    // 在多個短變數宣告和賦值中,至少有一個新宣告的變量出現在左值中,即便其他變數名重複宣告的,編譯器也不會報錯
    conn, err = net.Dial("tcp", "127.0.0.1:8080")
    conn2, err = net.Dial("tcp", "127.0.0.1:8080")
  2. 匿名變數

    不佔用記憶體空間,也不會分配記憶體,匿名變數與匿名變數之間也不會因為多次宣告而無法使用。

    func getData() (int, int) {
      return 1, 2
    }
    func main() {
      a, _ := getData()
      _, b := getData()
      fmt.Println(a, b) // 1,2
    }
  3. 變數的作用域

    • 區域性變數

      區域性變數名和全域性變數名可以相同,區域性變數名優先順序更高

    • 全域性變數

      全域性變數宣告必須以var關鍵字開頭,如果想要在外部包中使用全域性變數的首字母必須大寫

    • 形式引數

      只在函式呼叫時生效,呼叫結束時銷燬,未被呼叫時,行參不佔用實際的儲存單元,也沒有實際值

  4. go語言指標

    go具有控制資料結構指標的能力,但是卻不能進行指標運算。

    指標在golang中可以分為兩個核心概念:

    • 型別指標:可以對這個指標型別的資料進行資料,也可以使用指標傳遞資料,而無需拷貝資料,但不能進行偏移和運算。
    • 切片,由指向起始元素的原始指標、元素數量和容量組成

    對比C語言的指標,指標是其保持高效能的根本所在,在操作大資料塊時方便快捷,故此是作業系統使用的是C及其指標特性編寫。

    使用new()關鍵字也可以建立指標,建立過程會分配記憶體,被建立的指標指向預設值。

  5. go語言變數的生命週期

    堆:存放程序執行中被動態分配的記憶體段,大小不固定

    棧:也即堆疊,用來存放程式暫時建立的區域性變數,如函式大括號內的變數。

  6. go常量

    const (
      a = .12 
      b = 123   ) // 宣告多個常量

    iota常量生成器

    type weekday int
    const (
     sunday weekday = iota
      monday // 1
    )

    無型別常量

    var x float32 = math.Pi
    // math.Pi 無型別的浮點數常量,可以直接用於任意需要浮點數或複數的地方
  7. 類型別名

    // 類型別名和型別定義
    type IntAlias = int // 給int取IntAlias的別名
    type newInt int // 宣告newInt為int型別

    非本地型別不能定義方法

    在結構體成員嵌入時使用別名

分享到: