我是從 Python 背景來到 Golang 的,我正在努力思考各種新概念。我遇到的一件事是 net.go 中的這個函數(shù):func (c *conn) ok() bool { return c != nil && c.fd != nil }該函數(shù)被多個 net.go 方法調(diào)用,例如 conn.Read:// Read implements the Conn Read method.func (c *conn) Read(b []byte) (int, error) { if !c.ok() { return 0, syscall.EINVAL}我試圖了解如何ok()在 conn 上調(diào)用該方法,盡管它ok()似乎不是conn 的接口。當然,我似乎無法ok()從我的客戶端代碼中調(diào)用:func main() {conn, err := net.Dial("tcp", "www.reddit.com:80")if err != nil { os.Exit(-1)}fmt.Println(&conn.ok())}輸出:./server.go:14:22: conn.ok undefined (type net.Conn has no field or method ok)任何指針贊賞...
3 回答

阿晨1998
TA貢獻2037條經(jīng)驗 獲得超6個贊
Go 不使用 public/private 關(guān)鍵字來實現(xiàn)標識符的可見性。如果首字母為大寫字母,則標識為exported(public);否則它不是:
大寫首字母:名稱對包的客戶可見
否則:名稱(或 _Name)對包的客戶不可見

森林海
TA貢獻2011條經(jīng)驗 獲得超2個贊
來自 Go 文檔:
可以導(dǎo)出標識符以允許從另一個包訪問它。如果標識符名稱的第一個字符是 Unicode 大寫字母,則標識符被導(dǎo)出
所以,ok 函數(shù)沒有導(dǎo)出,你不能在 net 包之外訪問它。

浮云間
TA貢獻1829條經(jīng)驗 獲得超4個贊
在 net.Conn 中沒有像 ok 這樣的字段或方法表明錯誤是正確的。當您嘗試讀取和寫入 conn 時,您會得到錯誤和讀取或?qū)懭脒B接的字節(jié)數(shù)。
- 3 回答
- 0 關(guān)注
- 181 瀏覽
添加回答
舉報
0/150
提交
取消