摘要:
主要内容: 由对象获取反射类型,由对象获取反射值 由反射值获取反射类型 反射值重新转换成对象 遍历字段 遍历方法 易知go语言的struct是值类型,如果修改需要使用引用传递。反射修改值类型,要获取其指针的值类型。此方法适用于int string 以及struct。 反射调用的注意点: 类方法要大写,以便能被其它包,也就是reflect包调用。小写的方法可以由反射查询,但是不能调用。 要获取... 阅读全文
摘要:
周期定时器 func main() { timer := time.NewTicker(1 * time.Second) //NewTicker是周期定时器,NewTimer是普通定时器只能用一次 for { <-timer.C fmt.Println("good") } } 定时器 time.Sleep(time.Secon... 阅读全文
摘要:
go语言中的包 一个目录下的统计文件归属一个包,package的声明要一致 package声明的包和对应的目录名可以不一致,但习惯上还是可以写成一直的 包可以嵌套 同包下的函数不需要导入包,可以直接使用 main包,main函数所在的包,其他包不可以引用 点操作 import ( . "fmt" ) func main(){ println("haha") //使用... 阅读全文
摘要:
闭包对闭包外的环境引入是直接引用,编译器监测到闭包,会将闭包饮用的外部变量分配到堆上 package main func fa(a int) func(i int) int { return func(i int) int { fmt.println(&a) a = a + i return a } } func main() ... 阅读全文
摘要:
const定义在main函数里面就是局部常量 package main import "fmt" func add(a int) func(int) int { return func(i int) int { fmt.Println(&a) a += i return a } } func main() { cons... 阅读全文
摘要:
## 创建巨大字符串时性能提升的方法 package main import ( "bytes" "fmt" ) func test() string{ var b bytes.Buffer b.Grow(1000) //将buffer的容量提升到1000,然后写入到字符中 for i :=0;i<1000;i++{ b.WriteS... 阅读全文
摘要:
package main import "fmt" type optionClient func(*options) func setAge(a int) optionClient { return func(o *options) { o.Age = a } } func setSex(s int) optionClient { return func(o ... 阅读全文
摘要:
package main import ( "fmt" "runtime" ) func test() { defer fmt.Println("ccccccccc") //只要成功注册了无论是return 还是goexit都会被调用 runtime.Goexit() //退出函数所在当前go程 defer fmt.Println("dddddddddd... 阅读全文
摘要:
go语言在for循环中遍历的临时变量地址是一样的 func main() { //SetLogConfToEtcd() for i := 0; i < 5; i++ { a := i fmt.Printf("%p\n", &i) //可以看到i的地址都是一样的,也就是说i是复用的 fmt.Printf("%p\n", &a) //... 阅读全文
摘要:
单行模式(?s:(.?))万能用法尽量匹配少的文本,最关键的是可以匹配换行的文本,直接写.?不能匹配\n package main import ( "fmt" "regexp" ) func main() { str := "3.14 23.22 abc a7c 2.43 mfc cat 8ca azc cba" //解析,编译正则表达式 ret :... 阅读全文