猿问

为什么我不能使用 net.go 中的 conn.ok()?

我是从 Python 背景来到 Golang 的,我正在努力思考各种新概念。


我遇到的一件事是 net.go 中的这个函数:


func (c *conn) ok() bool { return c != nil && c.fd != nil }

该函数被多个 net.go 方法调用,例如 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 上调用该方法,尽管它ok()似乎不是conn 的接口。


当然,我似乎无法ok()从我的客户端代码中调用:


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)

任何指针赞赏...


摇曳的蔷薇
浏览 138回答 3
3回答

阿晨1998

Go 不使用 public/private 关键字来实现标识符的可见性。如果首字母为大写字母,则标识为exported(public);否则它不是:大写首字母:名称对包的客户可见否则:名称(或 _Name)对包的客户不可见

森林海

来自 Go 文档:可以导出标识符以允许从另一个包访问它。如果标识符名称的第一个字符是 Unicode 大写字母,则标识符被导出所以,ok 函数没有导出,你不能在 net 包之外访问它。

浮云间

在 net.Conn 中没有像 ok 这样的字段或方法表明错误是正确的。当您尝试读取和写入 conn 时,您会得到错误和读取或写入连接的字节数。
随时随地看视频慕课网APP

相关分类

Go
我要回答