iT邦幫忙

0

Golang 每日一小時(Day5)

go
  • 分享至 

  • xImage
  •  

這幾天累到連電腦都不想開...這樣不行,今天逼自己哪怕只學一個語法或複習也要看。
上次學完之後,無聊開了一個 easy 來寫,才發現自己連 array 都還不會用,剛好官方直接接在 defer 的下一個。

在 array 之前還遇到些老朋友,pointer && struct,以前學 C 的 ptsd 又回來了。
不過官方明確表明沒辦法做指標運算:

Unlike C, Go has no pointer arithmetic.

非常容易理解,指標運算實際上是對記憶體位址做運算,既然要保持 Memory Safety 就不可能讓使用者做這件事,甚至 GC 也會影響記憶體。

Struct

struct 就沒什麼特別的,考慮到 Memory Safety,fields 有自己的預設數值也不是什麼很難理解的事,不過目前看到這幾行第一時間還是會愣住就是了...

type Vertex struct {
	X, Y int
}

var (
	v1 = Vertex{1, 2}  // has type Vertex
	v2 = Vertex{X: 1}  // Y:0 is implicit
	v3 = Vertex{}      // X:0 and Y:0
	p  = &Vertex{1, 2} // has type *Vertex
)

Array

看到 array 後發現自己已經漸漸習慣型別寫在後面這件事,第一眼看到宣告的方式竟然沒感到意外:

var a [10]int

倒是 Print 出來之後預設的分割符號是「空白」,Python 寫多了的時候會以為整個 array 只有一項:

var a [2]string = [2]string{"hello", "World"}
fmt.Println(a)

primes := [6]int{2, 3, 5, 7, 11, 13}
fmt.Println(primes)

[hello World]
[2 3 5 7 11 13]

Slice

slice 就有點頭痛了,先不說第一次看的時候想說跟 array 差在哪,幹嘛特別分出來...
另外查了才知道 slice 本質上是這樣子的 struct:

type slice struct {
    ptr *int
    len int
    cap int
}

再來是他的行為:

Go 一切均 pass by value,但 slice 是 reference-like (兩個 struct 的 pointer 的 value 相同),搞得最終很像 pass by reference。(寫過不同語言遇到類似的行為好痛苦)

兩個 struct 擁有相同的 ptr value 跟直接傳址還是有差異...
感覺類似的問題後面還會有很多,今天先這樣好了...


圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言