咖啡伴侶

          呆在上海
          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 閱讀(7293) | 評論 (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 閱讀(4396) | 評論 (1)編輯 收藏

          主站蜘蛛池模板: 旬阳县| 昌图县| 湖南省| 出国| 汕头市| 金坛市| 郧西县| 雷州市| 辽源市| 前郭尔| 宜宾市| 淳安县| 平塘县| 登封市| 积石山| 安远县| 伊吾县| 沂南县| 广州市| 镇宁| 龙海市| 韩城市| 景东| 龙岩市| 桑植县| 永寿县| 湟中县| 容城县| 繁峙县| 新安县| 茌平县| 扬州市| 象山县| 秦皇岛市| 松江区| 岱山县| 丰县| 清原| 炎陵县| 西乌珠穆沁旗| 东海县|