golang代码解读
1)for语句与循环运算
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)结构体与指针
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) }
结果: