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
",
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)
}
结果:
