golang
文章平均质量分 50
ehooww
这个作者很懒,什么都没留下…
展开
-
defer 后面执行语句在函数的末尾执行,而非在代码块的末尾执行
常见错误写法:func main() { if len(os.Args) != 2 { os.Exit(-1) } root, err := os.Stat(os.Args[1]) if err != nil || !root.IsDir() { os.Exit(-1) } var paths []string filepath.Walk(os.Args[1], func...原创 2018-06-05 17:09:20 · 390 阅读 · 0 评论 -
range 循环中的迭代变量和闭包
range语句中的迭代变量每次循环时被重复使用,也就是迭代变量的地址不变,值变。与闭包同时使用时容易出错,看如下代码:func main() { data := []string{"one", "two", "three"} for _, v := range data { fmt.Printf("v point:%p\n", &v) go func() { f...原创 2018-06-05 15:26:14 · 406 阅读 · 0 评论 -
golang类型断言,失败类型断言返回值问题
失败的类型断言,返回的值为最近断言类型的零值代码入下:func main() { var data interface{} = "ehoo" if res, ok := data.(int); ok { fmt.Printf("int res:%d\n", res) } else if res, ok := data.(bool); ok { fmt.Printf("int res:...原创 2018-06-05 17:38:25 · 4999 阅读 · 0 评论 -
golang 数据类型map,slice,interface取值更新值问题
type Lamp struct { Brand string Color string}func (this *Lamp) open() { fmt.Println("open lamp,brand:", this.Brand)}type ILamp interface { open()}func main() { var lamp = Lamp{"Philips",...原创 2018-06-06 10:32:21 · 2891 阅读 · 0 评论 -
golang 缓冲channel显式的关闭信道
对于缓冲channel可以使用range来读取:func main() { ch := make(chan int, 3) ch <- 1 ch <- 2 ch <- 3 for c := range ch { fmt.Println(c) }}上面例子可以正常读取数据,但是会出现死锁。主要由于range不等到信道关闭,不会结束读取,阻塞当前的gorou...原创 2018-06-06 15:03:48 · 1333 阅读 · 0 评论 -
golang 并发与并行
跑两个gorouting 执行如下代码:func main() { runtime.GOMAXPROCS(1) ch := make(chan int) go print(ch) go print(ch) for i := 0; i < 2; i++ { <-ch }}func print(ch chan int) { // dosomething for i...原创 2018-06-06 16:37:43 · 725 阅读 · 0 评论