example01:闭包:一个函数和语气相关的引用环境及组合而成的实体。看一下函数和哪个变量进行绑定。比如下面的和 x进行了绑定,也就是说,运行过程中,会保留值。这样子好处是,只要写一次函数,就可以实现多个功能。
package main
import (
"fmt"
"strings"
)
func Adder() func(int) int {
var x int
return func(data int) int {
x += data
return x
}
}
func makeSuffix(suffix string) func (string) string {
return func(name string) string {
if strings.HasSuffix(name,suffix) == false {
return name + suffix
}
return name
}
}
func main() {
f := Adder()
fmt.Println(f(1))
fmt.Println(f(20))
fmt.Println(f(100))
f1 := makeSuffix(".bmp")
fmt.Println(f1("test"))
fmt.Println(f1("pic"))
f2 := makeSuffix(".jpg")
fmt.Println(f2("test"))
fmt.Println(f2("pic"))
}
运行结果:
PS F:\go\src\go_dev> go build .\day4\work\example09\main\main.go
PS F:\go\src\go_dev> .\main.exe
1
21
121
test.bmp
pic.bmp
test.jpg
pic.jpg
PS F:\go\src\go_dev>
example02:切片,用来切割数组的,非常方便。
package main
import (
"fmt"
)
func testSlice() {
var slice []int
var arr [5]int=[...]int{1,2,3,4,5}
slice = arr[2:5]
fmt.Println(slice)
fmt.Println(len(slice))
fmt.Println(cap(slice))
slice = slice[0:1]
fmt.Println(len(slice))
fmt.Println(cap(slice))
}
func main() {
testSlice()
}
切片的内存布局:(要试着去理解底层是怎么实现的)
2019年12月6日
今天把openstack 上发布kubernetes的流程梳理了下,找到etcd-member.service启动失败的原因了,也找到了etcdctl的key-value手动写入方法,发现了oem-cloudinit.service 控制kubelet 去启动本地pod,利用kubehyper镜像起kube master组件。
切记戒骄戒躁,还有很多事情要做的,踏踏实实地学习,深入学习。