Go學習筆記 - Go 基礎語法(1)

Refrain_xxx發表於2021-07-05

變數定義

  1. 使用 var 關鍵詞
    1. var a, b, v bool
    2. var s1, s2 string = "hello", "world"
    3. 可放在函式內,或直接放在包內
    4. 使用 var() 可以定義多個變數
    5. 編譯器可以自動區分變數型別
    6. 使用 := 定義變數 (只能在函式內使用)
        package main

        import (
            "fmt"
        )

        // 在函式外面定義變數不能使用 :=
        // 函式外定義的變數時包內變數,不會作用到全域性
        // var aa = 3
        // var bb = "lalala"
        // var cc = true

        // 每個變數都要用var 比較麻煩,可以使用括號來簡寫
        var (
            aa = 2
            bb = "fun"
            cc = false
        )

        func variableZeroValue() {
            // 使用 var 定義 變數
            // 在 go 語言中 變數名寫在前面 型別寫在後面
            var a int
            var s string
            // go 語言變數定義完成後一定要有合理的初始值
            fmt.Printf("%d %q\n", a, s)
        }

        func varableInitialValue() {
            // 變數可以定義多個,通過逗號分割
            // go 語言非常嚴格,定義的變數一定要使用否則會報錯
            var a, b int = 3, 4
            var s string = "avc"
            fmt.Println(a, b, s)
        }

        func varableTypeDeduction() {
            // go 語言 也可以省略型別 會自動推斷型別
            // 不規定型別可以混寫,規定型別不能混寫
            var a, b, c, s = 3, 4, true, "fuc"
            fmt.Println(a, b, c, s)
        }

        func variableShorter() {
            // var 也可以簡寫 可以使用 := 來定義
            // 第一次使用該變數可以使用 := 後面修改該變數不能使用 :=
            a, b, c := 2, true, "fuc"
            fmt.Println(a, b, c)
        }

        // 函式入口
        func main() {
            fmt.Println("hello world!")
            variableZeroValue()
            varableInitialValue()
            varableTypeDeduction()
            variableShorter()
            fmt.Println(aa, bb, cc)
        }

內建變數

  1. 內建變數型別

    1. bool,string

    2. (u)int, (u)int8, (u)int16, (u)int32, (u)int64, uintptr
      (u: 代表無符號整數 後面數字可以規定長度,不規定長度根據系統位數來, ptr 是指標的意思,長度根據作業系統來)

    3. byte, rune (rune 長度32位,類似char)

    4. float32, float64, complex64, complex128
      (complex 是複數的意思 64代表實部和虛部分別是32位 128則代表分別是64位)

      // 尤拉公式實現
      func euler() {
       // c := 3 + 4i  // 注: 4i 可以直接被識別為複數
       // fmt.Println(cmplx.Abs(c))
       // 方法1:
       fmt.Println(cmplx.Pow(math.E, 1i*math.Pi) + 1)
       // 方法2: 
       fmt.Println(cmplx.Exp(1i*math.Pi) + 1)
      
       fmt.Printf("%.3f\n", cmplx.Exp(1i*math.Pi)+1)
      }
  1. 強制型別轉換
    1. 型別轉化是強制的
      func triangle() {
        var a, b int = 3, 4
        var c int
        // go 語言中不能 int 和 float 不會隱式轉換,必須要去顯示轉換
        c = int(math.Sqrt(float64(a*a + b*b))) // Sqrt 請求的引數要求是float 返回也是float
        fmt.Println(c)
      }
      注意:浮點數運算可能不準,例如4.999強制型別轉換結果是4需要這方面需要考慮到

常量與列舉

  1. 常量的定義
    1. 使用 const 進行常量定義
    2. const 數值可作為各種型別使用
      // 常量也可以定義在方法外面,也可以通過 () 批量定義
      const filename = "abc.txt"
      func consts() {
       // 使用方法與 var 相似
       // 一般 go 中的常量是不大寫的, 大小寫在 go 中有特殊含義
       const a, b = 3, 4
       var c int
       c = int(math.Sqrt(a*a + b*b))
       fmt.Println(filename,c)
      }
  1. 列舉型別

    1. 特殊的常量

    2. 通過 const() 來進行定義

      func enums() {
        // go 沒有特殊的列舉關鍵字,我們一般使用一組const塊來表示
        const (
            php = iota // iota 表示這組 const 是 自增值的
            html
            java
            _ // _ 是可以跳過當前這個自增值
            golang
        )
        fmt.Println(php, html, java, golang)
        // 0,1,2,4
      
        const (
            // iota 還可以做運算
            b = 1 << (10 * iota)
            kb
            mb
            gb
            tb
            pb
        )
        fmt.Println(b, kb, mb, gb, tb, pb)
        // 1 1024 1048576 1073741824 1099511627776 1125899906842624
      }
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章