咖啡伴侶

          呆在上海
          posts - 163, comments - 156, trackbacks - 0, articles - 2

          2013年12月22日

          package main

          import (
              "fmt"
              "time"
          )

          var ch chan int = make(chan int, 1)

          func main() {
              go aaa()

              select {
              case <-ch: //拿到鎖
                  fmt.Println("call")
              case <-time.After(5 * time.Second): //超時5s
                  fmt.Println("5 sec call")
              }
          }

          func aaa() {
              time.Sleep(time.Second * 3)
              ch <- 1
          }

          posted @ 2013-12-24 13:03 oathleo 閱讀(7304) | 評論 (0)編輯 收藏

          conn, err = ln.Accept()
          go handleConnection(conn)
          看到這里我曾經有個疑問,為什么不是  handleConnection(&conn) ?

          下面這個例子解釋這個問題

          package main

          import (
              "fmt"
          )

          type Interface interface {
              say() string
          }

          type Object struct {
          }

          func (this *Object) say() string {
              return "hello"
          }

          func do(i Interface) string {
              return i.say()
          }

          func main() {
              o := Object{}
              fmt.Println(do(&o))
              fmt.Printf("CCCCCCCCCCC:%T", o)
          }

          函數的參數以接口定義,編譯器會自己判斷參數是對象還是對象的指針
          比如,say是指針上的方法,所以do只接受Object的指針做參數,do(o)是編譯不過的

          所以看到庫里接口做參數類型定義的時候,可以簡單認為,這個接口肯定是個對象指針(雖然也可以用對象,單估計沒有哪個類庫會用)

          例如:
          conn, err = ln.Accept()
          go handleConnection(conn)

          這里conn是個接口,不需要 go handleConnection(&conn)

          posted @ 2013-12-22 12:45 oathleo 閱讀(4401) | 評論 (1)編輯 收藏

          主站蜘蛛池模板: 托克逊县| 甘德县| 高唐县| 河北省| 出国| 泸溪县| 莎车县| 兰坪| 酉阳| 宜丰县| 新昌县| 平果县| 河北区| 芮城县| 衡阳市| 犍为县| 高青县| 罗平县| 海口市| 明光市| 阿尔山市| 体育| 井研县| 松原市| 临猗县| 丹江口市| 寿阳县| 封开县| 固阳县| 日照市| 蒲城县| 汽车| 全南县| 彭州市| 搜索| 晋中市| 霸州市| 台东市| 佛教| 喀喇| 班戈县|