Go 基礎之數據類型、變量

Go 是一種類 C 語言,大部分語法和 C 類似。

一、第一個 go 程序,Hello world。

package main

import "fmt" // 實現格式化的 I/O

/* Print something */
func main() {
    fmt.Printf("Hello, world\n")
}
  • 在不引起語義混淆的情況下,Go 可以省略句末的分號,編譯器會在每句末尾自動加上分號;並且強制要求左花括號位於句末,另起一行會出現編譯錯誤。
  • 首行這個是必須的。所有的 Go 文件以 package <something> 開頭,對於獨立運行的執行文件必須是 package main
  • fmt 包(函數庫)導入到 main,可以使用小括號導入多個包,如
import (
    "fmt"
    "io"
)
  • 在 Go 中, package 總是首先出現,然後是 import,接着是其他所有內容。當 Go 程序在執行的時候,首先調用的函數是 main(),這是從 C 中繼承而來。
  • Go 的註釋可以用 C 風格註釋 /* */ 和 C++ 風格註釋 / /。

二、變量、數據類型

1、變量

  • Go 聲明變量時類型放在變量名之後 var varname vartype。其中 var 爲聲明變量的保留字。Go 編譯器會對未初始化的變量自動賦值其類型的 0 。

    /* 先聲明,後初始化 */
    var a int // 聲明 int 類型變量
    var b bool // 聲明 bool 類型變量
    a = 10 // 賦值
    b = true
    
    /* 聲明變量並初始化 */
    var c int = 12 
    
    /* 聲明並賦值的簡寫形式,變量類型是根據值推斷出來的,但是隻能用在函數內部 */
    d := 8 
    • 多個 var 的聲明可以成組(使用圓括號),const 和 import 同樣可以如此做。相同類型的多個變量可以放在同一行,也可以使用平行賦值。一個特殊的變量名 _ 表示賦給它的值都將被丟棄。
    /* 成組聲明變量 */
    var (
        ia int
        bb bool
    )
    
    /* 相同類型變量同行聲明 */
    var ic, id int
    var ic, id int = 1, 2 // 聲明並初始化
    
    /* 平行賦值 */
    ie, bg := 3, true // ie = 3, bg = true
    _, bg := 3, true // 3被丟棄

    注意:Go 編譯器對聲明但未使用的變量會報錯。

2、類型

  • bool 類型

    • 值爲 true 和 false。
  • 數字類型

    • 整型

      有符號整數:int int8 int16 int32 int64
      無符號整數:uint uint8(byte) uint16 uint32 uint64

      byteuint8 的別名,runeint32 的別名。

      賦值可以用八進制、十六進制或科學計數法: 077, 0xFF, 1e3 或者 6.022e23 這些都是合法的。
      注意:int 類型是和系統相關的,在 32位操作系統上是32位,64爲操作系統上時64位。其他類型都和系統類型無關。

      注意:不同的數據類型之間不能混用,否則會出現編譯出錯。Go 的數據類型不支持隱式轉換,必須顯示轉換。

      var a int = 2
      var b int32
      b = a + a // 錯誤,int 不能隱式轉換爲 int32
      b = b + 5 // 可以
    • 浮點型

      float32 float64

    • 常量

      常量(const)是在編譯時被創建。只能是數字,字符串和布爾型。可以使用 itoa 生成枚舉值,第一次使用時值爲 0,再一次在新行使用時值加 1。

      const x = 4 // 聲明常量     
      /* 成組聲明 */
      const (
          x1 = 4
          y1 = true
      )
      /* itoa生成枚舉值 */     
      const (
          a = iota // a = 0
          b = iota // b = 1
          c        // c = 2 可以省略重複的 itoa,其值自動加 1
      )
  • 字符串

    字符串在 Go 中是 UTF-8 的由雙引號(”“)包裹的字符序列。如果你使用單引號(”)則表示一個字符( UTF-8編碼)——這種在 Go 中不是 string。

    注意:一旦給變量賦值,字符串就不能修改了:在 Go 中字符串是不可變的。

    var s string = "hello"
    s[0] = 'c'  // 報錯
    
    /* 先轉換在修改 */
    s := "hello"
    c := [] byte(s) 0.
    c[0] = 'c' 1.
    s2 := string(c) 2.
    fmt.Printf("%s\n", s2) 

    多行字符串連接需要將 “+” 放在當前行尾部,不要放在下一行開頭,否則編譯器會誤解加入分號導致錯誤。另一種方式是使用反引號 ` 作爲原始字符串符號,但是此時引號中的轉義字符不會被轉義。

    s := "Starting part"
        + "Ending part"
    // 會被轉換爲:
    s := "Starting part" ;
        + "Ending part" ;
    // 這是錯誤的語法,應當這樣寫:
    s := "Starting part" +
        "Ending part"
    // 使用反引號 ` 作爲原始字符串符號,但轉義字符不被解釋
    s := `Starting part // s 中含有換行符
        Ending part`
  • rune

    Rune 是 int32 的別名。用 UTF-8 進行編碼。一般用在需要遍歷字符串中的字符。可以循環每個字節(僅在使用 US ASCII 編碼字符串時與字符等價,而它們在 Go 中不存在!)。因此爲了獲得實際的字符,需要使用 rune 類型。

  • 複數

    Go 原生支持複數。默認變量類型complex128 ( 64 位虛數部分)。還有 complex64(32 位的虛數部分)。複數寫爲 re + im ire 是實數部分,im 是虛數部分,而 i 是標記 ‘i’ ( √− 1)。

    var c complex64 = 5+5i;
    fmt.Printf("Value is: %v", c)

    將會打印: (5+5i)。

    注意:對於簡寫形式複數聲明賦值如 v := a + bib 必須存在,否則出現 i 無定義。

  • 錯誤

    Go 有爲了錯誤而存在的內建類型,叫做 error。

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