数组切片
package main
import "fmt"
func main() {
intArray := []int{0,1,2,3,4,5}
fmt.Println(intArray)
//切片
fmt.Println(intArray[:])
//取前2位
fmt.Println(intArray[:2])
//取2位后数据 0 1 2
fmt.Println(intArray[2:])
//取2-3位数据,包前不包后
fmt.Println(intArray[2:3])
//len 可见数组内容长度,cap切片第一个元素到最后一个元素的长度
fmt.Printf("len=%d cap=%d slice=%v\n",len(intArray[2:3]),cap(intArray[0:1]),intArray)
//追加数组元素
intArray = append(intArray, 6, 7)
fmt.Printf("len=%d cap=%d slice=%v\n",len(intArray[2:3]),cap(intArray[0:1]),intArray)
a := make([]int, 5)
printSlice("a", a)
// make(int数组,长度0,容量5)
b := make([]int, 0, 5)
printSlice("b", b)
c := b[:2]
printSlice("c", c)
d := c[2:5]
printSlice("d", d)
}
func printSlice(s string, x []int) {
fmt.Printf("%s len=%d cap=%d %v\n",
s, len(x), cap(x), x)
}
输出:
[0 1 2 3 4 5]
[0 1 2 3 4 5]
[0 1]
[2 3 4 5]
[2]
len=1 cap=6 slice=[0 1 2 3 4 5]
len=1 cap=12 slice=[0 1 2 3 4 5 6 7]
a len=5 cap=5 [0 0 0 0 0]
b len=0 cap=5 []
c len=2 cap=5 [0 0]
d len=3 cap=3 [0 0 0]
nil 切片
切片的零值是 nil
。
nil 切片的长度和容量为 0 且没有底层数组。
Range
package main
import "fmt"
type Object struct {
Lat, Long float64
}
func main() {
testRange()
}
func testRange() {
var stringArray = [...]string{"a", "b", "c"}
for index, value := range stringArray {
fmt.Println("index:", index, "value: ", value)
}
var goMap = map[string]Object{
"Bell Labs": Object{
40.68433, -74.39967,
},
"Google": Object{
37.42202, -122.08408,
},
}
goMap["AddKey"]=Object{
30.68433, -74.39967,
}
for key, value := range goMap {
fmt.Println("key:", key, "value: ", value)
}
}
输出
index: 0 value: a
index: 1 value: b
index: 2 value: c
key: Bell Labs value: {40.68433 -74.39967}
key: Google value: {37.42202 -122.08408}
key: AddKey value: {30.68433 -74.39967}
函数闭包
函数中的变量相互间不会影响。效果如下
package main
import "fmt"
func adder() func(int) int {
sum := 0
return func(x int) int {
sum += x
return sum
}
}
func main() {
pos, neg := adder(), adder()
for i := 0; i < 5; i++ {
fmt.Println("数值:",i,"正数累加:", pos(i), ",负数累加:", neg(-1*i))
}
}
输出
数值: 0 正数累加: 0 ,负数累加: 0
数值: 1 正数累加: 1 ,负数累加: -1
数值: 2 正数累加: 3 ,负数累加: -3
数值: 3 正数累加: 6 ,负数累加: -6
数值: 4 正数累加: 10 ,负数累加: -10