咖啡伴侶

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

          golang 之 接口

          Posted on 2013-12-22 12:45 oathleo 閱讀(4401) 評論(1)  編輯  收藏 所屬分類: Golang
          conn, err = ln.Accept()
          go handleConnection(conn)
          看到這里我曾經(jīng)有個疑問,為什么不是  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)
          }

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

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

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

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

          Feedback

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

          2013-12-22 13:00 by 零柒鎖業(yè)
          期待更新啊
          主站蜘蛛池模板: 仪陇县| 安泽县| 资溪县| 阳山县| 靖边县| 上饶市| 徐水县| 绵阳市| 介休市| 茶陵县| 洛阳市| 临泽县| 甘孜| 甘德县| 伊川县| 杭州市| 武夷山市| 大余县| 宁阳县| 武宁县| 顺平县| 瓮安县| 云南省| 漯河市| 寿阳县| 龙山县| 新干县| 海原县| 广元市| 徐汇区| 雅江县| 和平区| 德庆县| 永济市| 福建省| 天柱县| 阿克陶县| 繁昌县| 绵阳市| 苍溪县| 秦安县|