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類型

    非本地類型不能定義方法

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

分享到: