1)for語句與循環運算ide
package main import "fmt" func main() { sum := 1 for ; sum <1000 ; { // 去掉第一個分號: C 的 while 在 Go 中叫作 for。 sum += sum // 4= 2+2 4之內輸出4 , 8 = 4 + 4 8之內輸出8 ;1024 = 512 + 512 } fmt.Println(sum) }
2)指針解讀指針
package main import "fmt" func main() { i, j := 42, 2701 p := &i // 指向i的內存地址 & 操做符會生成一個指向其操做數的指針(內存地址)。 fmt.Println(p) // 輸出內存地址 fmt.Println(*p) // 輸出內存地址中的值。* 操做符表示指針指向的底層值。 *p = 21 // 更新內存地址中的值,值更新後指向該地址的值也更新。 fmt.Println(i) //其值從更新21更新到42,但內存地址不變。 p = &j // point to j *p = *p / 37 // divide j through the pointer fmt.Println(j) // see the new value of j }
3)結構體與指針blog
package main import "fmt" type Vertex struct { X int Y int } func main() { v := Vertex{1, 2} p := &v //指定p爲結構體v的地址 p.X = 1e3 // p.X實際是(*p).X,指的是v地址上x 的值 fmt.Println(v) }
4) 關於切片的代碼解讀內存
package main import "fmt" func printSlice(s string, x []int) { fmt.Printf("%s len=%d cap=%d %v\n", s, len(x), cap(x), x) } func main() { numbers := []int{0,1,2,3} printSlice("numbers 長度 容量 初始值:",numbers) a := make([]int, 5) a[0] = 1232 printSlice("a 長度 容量 初始值:", a) b := make([]int, 0, 5) // b[0] = 123 // 長度爲0,沒法賦值 printSlice("b 長度 容量 初始值:", b) c := b[:2] c[0] = 333 // c[2] = 2 printSlice("c 長度 容量 初始值:", c) d := c[2:5] d[0] = 3434 printSlice("d 長度 容量 初始值:", d) }
結果:string