go學習(一)變量、常量

emm,發覺自己沒有系統的學習。都是有需求來臨時調研技術,從今天起每天抽出時間系統化學習Go.

類型

Go是靜態類型語言,運行期間不能改變類型

定義

  1. 可以使用var 關鍵字
  2. 可以使用 := 讓系統推導類型

example:

var a int
a := 0
是一致的

但是要注意一點

var a int 
f := func () {
    a:=1 //此時是局部變量(沒進行參數傳遞)
}
f()
此時a的值不會變

更靈活的語法:

var x , y ,z int
x,y,z := 1,float64(12313),"dassad" //動態類型推導,不建議這麼寫,增加閱讀難度

特殊佔位符 _

_用於將結果忽略的位置

func test() (int, string) {
   return 1, "abc"
}
func main() {
   _, s := test()
   println(s)
}

代碼塊定義

代碼塊內有新的變量生命週期


s := "abc"
println(&s)

s, y := "hello", 20 // 重新賦值: 與前 s 在同⼀層次的代碼塊中,且有新的變量被定義。
println(&s, y) // 通常函數多返回值 err 會被重複使⽤。

{
    s, z := 1000, 30 // 定義新同名變量: 不在同⼀層次代碼塊。
    println(&s, z)
}

基本類型

類型 長度 默認值 說明
bool 1 false
byte 1 0 uint8 之間可以相互轉換
rune 4 0 unicode code point,int32
int/uint 4或者8 0 32位長度4 64位長度8
int8/uint8 1 0 -128~127, 0~255
int16/uint16 2 0 -32768~32767,0~65535
int32/uint32 4或者8 0 32位長度4 64位長度8, 21億正負
int64/uint64 8 0
complex64 8 0 複數類型
complex128 16 0 複數類型
array 值類型
struct 值類型
string "" 值類型
slice 4或者8 nil 引用類型
map 4或者8 nil 引用類型
channel 4或者8 nil 引用類型
interface nil 接口類型
function nil 函數類型

new 和 make對引用類型的區別

引⽤類型包括 slice、map 和 channel。它們有複雜的內部結構,除了申請內存外,還需 要初始化相關屬性。

new會計算引用類型大小,併爲其分配初始值(默認值),並返回指針

make會被編譯期編譯爲具體創建函數,分配內存和初始化成員結構,返回對象而非指針

a:=[]int{0,0,0}
a[1] = 10
b := make([]int, 3) 
b[1] = 10 

c:=new([]int) //指針,但是隻有頭指針,可以append,但是不能直接使用
c[1]=10

常量

golang的常量只支持編譯器可確定的類型。(數字、字符串、布爾)

不能定義在方法體內部

常量值還可以是 len、cap、unsafe.Sizeof 等編譯期可確定結果的函數返回值。

重點: 編譯期可確定的值(因爲常量是不可寫的,要在編譯期確定結果,放入常量內存區域)

枚舉

關鍵字 iota 定義常量組中從 0 開始按⾏計數的⾃增枚舉值。

每一個const內iota都會從0開始

const (
 Sunday = iota // 0
 Monday // 1,通常省略後續⾏表達式。
 Tuesday // 2
 Wednesday // 3
 Thursday // 4
 Friday // 5
 Saturday // 6
)

const (
 Sunday1 = iota // 0
 Monday1 // 1,通常省略後續⾏表達式。
 Tuesday1 // 2
 Wednesday1 // 3
 Thursday1 // 4
 Friday1 // 5
 Saturday1 // 6
)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章