conn, err = ln.Accept()
go handleConnection(conn)
看到這里我曾經(jīng)有個(gè)疑問(wèn),為什么不是 handleConnection(&conn) ?
下面這個(gè)例子解釋這個(gè)問(wèn)題
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)是編譯不過(guò)的
所以看到庫(kù)里接口做參數(shù)類型定義的時(shí)候,可以簡(jiǎn)單認(rèn)為,這個(gè)接口肯定是個(gè)對(duì)象指針(雖然也可以用對(duì)象,單估計(jì)沒(méi)有哪個(gè)類庫(kù)會(huì)用)
例如:
conn, err = ln.Accept()
go handleConnection(conn)
這里conn是個(gè)接口,不需要 go handleConnection(&conn)