中级会员
  • 第 561 位会员
  • David
  • 2013-07-11 08:44:46
  • Offline
  • 0

最近发布的主题

最近发布的文章

    暂无

最近分享的资源

    暂无

最近发布的项目

最近的评论

  • 那只是一个例子,告诉你用 channel 可以完全换一种方式来写一些逻辑,所以不要太在意细节,如果应用到实际需要更具情况把这类细节处理对了。楼主可以试图想象,如果不用 channel,同样的程序应该怎么写。 回到最开始的问题,有一种比较粗暴的办法,就是结束之后,把另一个 channel 关掉,在`Walker`的 Go routine 里面把 panic recover 住。这个办法比较简单粗暴,仅供参考,呵呵。
  • 如果这个内联指的是"built-in",那就是那几个小写开头的函数:`append`/`make`/`len`/`panic`/`recover`
  • #1 @xuanbao [...]int{200:0}
  • 这个问题和闭包没什么关系。 var logger = AppLog() 这句话使全局变量的初始化,会在`main`执行之前被执行,此时`InitConf`显然还没有执行,从而`__logger`必然是`nil`,通过`AppLog()`返回给了`logger`导致其为`nil`。之后`InitConf`虽然把`__logger`初始化了,但是不会改变`logger`的值。 正确的做法是把`InitConf`改名成`init`,变成 package 初始化的一部分。
  • 反射效率太低了,玩玩儿还可以,稍微有些性能要求的地方是无法接受的。如果确实需要输入一个 slice 的多种类型,建议实现一个类似这样的接口: type Slice interface { func Len() int func Get(i int) interface{}) func Put(i int, interface{}) } 根据需要还可以添加类似`SubSlice`之类的函数,如果要 read only,也可以不包含`Put`。元素类型可以不是`interface{}`,而是某个接口。