初级会员
  • 第 6717 位会员
  • mlzhou
  • ml_zhou2008@sina.com
  • 2016-11-18 03:49:45
  • Offline
  • 24 87

最近发布的文章

    暂无

最近分享的资源

    暂无

最近发布的项目

    暂无

最近的评论

  • ml_zhou2008@sina.com 由衷感谢楼主无私奉献!
  • 评论了主题 关于切片的一个问题
    fmt.Println(list[1:]) 这个不好理解? 那如果list = make([]int,0,0) list=list[0:],这样写好理解了么。类比
  • mark一下 [username[:password]@][protocol[(address)]]/dbname[?param1=value1&...&paramN=valueN]
  • 协程之间同步咯,另外加一个带缓冲的chan,主线程执行完后,往里面塞东西,子协程time.sleep后看该chan是否有值,有就跳过,说明主线程执行完毕 ``` func main() { ch := make(chan string) bfch := make(chan uint8, 1) go doit(ch, bfch) for { select { case msg := <-ch: fmt.Println(msg) return case <-time.After(3 * time.Second): fmt.Println("本次执行超过3秒,已停止") //需要这里停止之后,不再打印【超时之后的内容】这句话 bfch <- 1 time.Sleep(5 * time.Second) return } } } func doit(ch chan string, bfch chan uint8) { msg := "" fmt.Println("开始执行") time.Sleep(5 * time.Second) if len(bfch) == 0 { fmt.Println("超时之后的内容") } ch <- msg } ```
  • 第一种写法根本就不属于Database的方法,它只是一个全局函数,第二种就是正常的方法,receiver是 *Database所以可以修改该对象中的数值