为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
摇曳的蔷薇 2023-05-22 16:58:18
我是从 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)任何指针赞赏...
查看完整描述

3 回答

?
阿晨1998

TA贡献2037条经验 获得超6个赞

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

  • 大写首字母:名称对包的客户可见

  • 否则:名称(或 _Name)对包的客户不可见


查看完整回答
反对 回复 2023-05-22
?
森林海

TA贡献2011条经验 获得超2个赞

来自 Go 文档:

可以导出标识符以允许从另一个包访问它。如果标识符名称的第一个字符是 Unicode 大写字母,则标识符被导出

所以,ok 函数没有导出,你不能在 net 包之外访问它。


查看完整回答
反对 回复 2023-05-22
?
浮云间

TA贡献1829条经验 获得超4个赞

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



查看完整回答
反对 回复 2023-05-22
  • 3 回答
  • 0 关注
  • 137 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信