我是从Python的背景来到Golang的,我试图将各种新概念包裹住。
我遇到的一件事是net.go中的此功能:
func (c *conn) ok() bool { return c != nil && c.fd != nil }
此函数由多种net.go方法调用,例如继续阅读:
// Read implements the Conn Read method.
func (c *conn) Read(b []byte) (int, error) {
if !c.ok() {
return 0, syscall.EINVAL
}
我试图了解如何在conn上调用ok()
方法,尽管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)
感谢任何指针...
答案 0 :(得分:2)
从Go文档:
可以导出一个标识符以允许从另一个标识符访问它 包。 如果标识符的第一个字符被导出,则会导出一个标识符 标识符的名称是Unicode大写字母
因此,不会导出ok函数,并且您不能在网络软件包之外访问它。
答案 1 :(得分:2)
Go不会使用公共/私有关键字来显示标识符。如果首字母是大写字母,则标识符被导出(公共);否则不是:
答案 2 :(得分:0)
net中没有像ok这样的字段或方法。 当您尝试读写conn时,您将得到err以及将其读取或写入连接的字节数。