咖啡伴侶

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

          golang 之 接口

          Posted on 2013-12-22 12:45 oathleo 閱讀(4401) 評(píng)論(1)  編輯  收藏 所屬分類: Golang
          conn, err = ln.Accept()
          go handleConnection(conn)
          看到這里我曾經(jīng)有個(gè)疑問,為什么不是  handleConnection(&conn) ?

          下面這個(gè)例子解釋這個(gè)問題

          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)
          }

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

          所以看到庫(kù)里接口做參數(shù)類型定義的時(shí)候,可以簡(jiǎn)單認(rèn)為,這個(gè)接口肯定是個(gè)對(duì)象指針(雖然也可以用對(duì)象,單估計(jì)沒有哪個(gè)類庫(kù)會(huì)用)

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

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

          Feedback

          # re: golang 之 接口  回復(fù)  更多評(píng)論   

          2013-12-22 13:00 by 零柒鎖業(yè)
          期待更新啊
          主站蜘蛛池模板: 萨迦县| 鸡泽县| 桐梓县| 邢台县| 昌都县| 宜丰县| 天峨县| 佳木斯市| 山东省| 扎赉特旗| 尉氏县| 南丹县| 湘乡市| 清水县| 湟源县| 黑龙江省| 大田县| 车险| 大厂| 四会市| 涿州市| 富源县| 平泉县| 兴隆县| 大宁县| 元阳县| 侯马市| 库伦旗| 邵阳县| 宝坻区| 邻水| 惠安县| 长寿区| 三门县| 南川市| 福泉市| 塔城市| 调兵山市| 汤阴县| 柳江县| 西充县|