Posted on 2013-12-22 12:45
oathleo 閱讀(4390)
評論(1) 編輯 收藏 所屬分類:
Golang
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)