中级会员
  • 第 85 位会员
  • bsdos
  • huweir@gmail.com
  • 2013-03-28 09:28:37
  • Offline
  • 0

最近发布的主题

    暂无

最近发布的文章

    暂无

最近分享的资源

    暂无

最近发布的项目

    暂无

最近的评论

  • 评论了主题 goroutine
    搞笑,goroutine里没有循环啊,所以就只打印一次1,goroutine就天然结束了,而打印0是在for这个死循环里的,当然不停打印0 你看不到打印1是因为打印速度太快,1刚打印出来就被刷掉了(或者说是顶掉了) 你把这段 ``` go func(){//goroutine 持续打印1 i:=1 fmt.Println(i) }() ``` 改为 ``` go func(){//goroutine 持续打印1 for{ i:=1 fmt.Println(i) } }() ``` 再试试
  • ``` package main import "fmt" func main() { a := &A{} fmt.Printf("%p\n", a) a.update() fmt.Printf("%p\n", a) } type A struct { b string } func (a *A) update() { t := []A{A{b: "1"}, A{b: "2"}, A{b: "3"}} fmt.Printf("%p\n", a) a= &t[0] fmt.Printf("%p\n", a) return } ``` 用上面打印a所在地址可以看出来,第3行的地址变了,第4行又变回来了 当`a= &t[0]`后`a`的已经不是main里的a了,而是一个局部的a 你可以把`a= &t[0]`看成`b:= &t[0]` 之所以`a= &t[0]`不能写成`a:= &t[0]`,我想应该是`func (a *A) update()`里已经声明过a了的关系吧
  • 评论了主题 又见channel
    代码没问题的 打印一个数字和一个here是同时进行的 但数字先打印还是here先打印是随机的,但他们是成对出现 我对打印结果加一些空行以便你理解 1 a 1 a a 1 1 a
  • 评论了主题 让我蛋疼的goroutine
    **你的代码看的我也挺蛋疼的** 当你运行`go f()`后,可以理解为新开了一条支线来跑`f()方法`,主线还在继续跑 分析你说的两种情况 1. Print在先 主线在执行Print时,支线在执行`c <- 0`,所以a还是空的,所以打印是空 2. <-在先 主线是阻塞状态,必须等管道c里有内容后才会继续执行 所以支线的`c <- 0`执行后,主线的`<-c`才会执行 主线`<-c`执行时,支线正在执行`a = "hello, world"` 然后主线就能正确打印出hello world了 这是假设所有执行的时间都一样的前提下 如果有某行代码需要执行时间比较长,那结果也会不同