返回

Golang旅程 - 基礎篇(一)

常見的GO指令

go get

Go本身自己帶的管理工具,可以直接從github等站台獲取package。

常用參數

  • -u 強制同步到repo最新的版本
  • -d 跳過構建與安裝,單純複製一份repo到你的GOPATH

go env

顯示Go目前的環境參數

go fmt

依照Go標準風格格式化文件,目前在vscode裡面每次儲存就會調用這個功能了。

go mod

通常在開發Go的時候,都會習慣透過module的方式去管理專案本身的套件。

# init的風格主要看個人選擇
go mod init github.com/user_name/your_project
go mod init your_project

init完之後你會發現你專案內部出現一個新的檔案go.mod

module github.com/user_name/your_project

go 1.16

關鍵字

Go的關鍵字總共有25個

break default func interface select
case defer go map struct
chan else goto package switch
const fallthrough if range type
continue for import return var

變數型別與宣告

布林

跟其他語言大同小異,true or false,預設值為false

整數

類型 儲存空間 範圍
uint8 8-bit 0~255
uint16 16-bit 0 ~65535
uint32 32-bit 0 ~ 4294967295
unit64 64-bit 0 ~ 18446744073709551615
int8 8-bit -128 ~ 127
int16 16-bit -32768 ~ 32767
int32 32-bit -2147483648 ~ 2147483647
int64 64-bit -9223372036854775808 ~ 9223372036854775807

浮點數

Go的浮點數類型有兩種

  • float32,預設情況下精準到小數點第7位。
  • float64,預設情況下精準到小數點第15位。

字符(Byte)

根據官方定義,Byte等同於unit8。

Byte可以定義slice,[]byte也可以轉換成string。

bytes := []byte{}
str := string(bytes)

字串(string)

字串在Go的世界裡是用雙引號或單引號做定義,預設為"“空值。

Go語言的字符串都採用『utf-8』編碼。

要注意字串是不可修改的,如果遇到需要修改的情況的話可以使用slice或者轉成[]byte,來達到一樣的需求。

錯誤

Go和C語言一樣都採用了返回值作為錯誤處理的方式,與C不同的地方是Go並不是回傳一個整數類型作為判斷依據,而是實現了一個錯誤類型。

err返回值除了nil以外都代表發生錯誤。

宣告

// 第一種方式
var name (int, bool, string)

// 第一種方式宣告多個變數
var name, name1, name2

# 第二種方式
name := value

// 第二種方式同時多個變數並賦予值
name1, name2 := value1, value2

// 第三種方式
var (
    a = 15
    b = false
    str = "Hello World"
    numShips = 50
    city string
)

!注意,『 := 』宣告同時賦值的語法,只有在func內部使用。

指針(Point)

每個變數都有一個記憶體位置儲存該數據類型的值,指針的值可以用來儲存任何一個變數的記億體位址。

  • 在32位機器上占用4個byte。
  • 在64位機器上占用8個byte。
  • 當指針被宣告後沒有賦值時,預設為nil。
// 宣告num1並給予1
num1 := 1

// 宣告num2並存num1的記憶體位置
num2 := &num1

// num1_address, num2_address, 1
fmt.Println(num2, &num2, *num2)

// 宣告num3為int point去指到num1
var num3 *int = num1

// num1_address, num3_address, 1
fmt.Println(num3, &num3, *num3)

垃圾回收機制(Garbage Collection,簡稱GC)

Go的GC演化過程如下:

  • v1.1 STW
  • v1.3 Mark STW, Sweep 并行
  • v1.5 三色標記法 (Go目前用這種)
  • v1.8 hybrid write barrier

效能優化

  1. 少用string裡面的 +。
  2. 小對象儘量重覆使用,局部變數少宣告,多個小對象可以放到struct裡頭。
comments powered by Disqus