go 指南學習筆記

一、linux

短聲明變量

在函數中,`:=` 簡潔賦值語句在明確類型的地方,能夠用於替代 var 定義。ide

函數外的每一個語句都必須以關鍵字開始(`var`、`func`、等等),`:=` 結構不能使用在函數外函數

 

二、ui

基本類型

Go 的基本類型有Basic types指針

bool

string

int  int8  int16  int32  int64
uint uint8 uint16 uint32 uint64 uintptr

byte // uint8 的別名

rune // int32 的別名
     // 表明一個Unicode碼

float32 float64

complex64 complex128

 

三、code

類型轉換

表達式 T(v) 將值 v 轉換爲類型 `T`。對象

一些關於數值的轉換:內存

var i int = 42
var f float64 = float64(i)
var u uint = uint(f)

或者,更加簡單的形式:字符串

i := 42
f := float64(i)
u := uint(f)

與 C 不一樣的是 Go 的在不一樣類型之間的項目賦值時須要顯式轉換。編譯器

 

四、

常量

常量的定義與變量相似,只不過使用 const 關鍵字。

常量能夠是字符、字符串、布爾或數字類型的值。

常量不能使用 := 語法定義。

 

五、switch語句

  os := runtime.GOOS  

switch os {

  case "darwin":
    fmt.Println("OS X.")
  case "linux":
    fmt.Println("Linux.")
  default:
    fmt.Printf("%s.", os)
}

沒有條件的 switch

沒有條件的 switch 同 `switch true` 同樣。

這一構造使得能夠用更清晰的形式來編寫長的 if-then-else 鏈。

 

六、

defer

defer 語句會延遲函數的執行直到上層函數返回。

延遲調用的參數會馬上生成,可是在上層函數返回前函數都不會被調用。

defer 棧

延遲的函數調用被壓入一個棧中。當函數返回時, 會按照後進先出的順序調用被延遲的函數調用。

 

七、

  1. 無論你的method的receiver是指針類型仍是非指針類型,都是能夠經過指針/非指針類型進行調用的,編譯器會幫你作類型轉換。
  2. 在聲明一個method的receiver該是指針仍是非指針類型時,你須要考慮兩方面的內部,第一方面是這個對象自己是否是特別大,若是聲明爲非指針變量時,調用會產生一次拷貝;第二方面是若是你用指針類型做爲receiver,那麼你必定要注意,這種指針類型指向的始終是一塊內存地址,就算你對其進行了拷貝。熟悉C或者C艹的人這裏應該很快能明白。
相關文章
相關標籤/搜索