在下面的测试代码中,我希望mytypedoPrivate方法都是私有的,这样只有mytype的成员可以访问它,而不能访问mypackage包范围内的其他类型\函数.

我能在golang做这个吗?

package mypackage

type mytype struct {
    size          string
    hash          uint32
}

func (r *mytype) doPrivate() string {
    return r.size
}

func (r *mytype) Do() string {
    return doPrivate("dsdsd")
}

字段sizehash以及doPrivate方法都应该被封装,其他类型都不能访问它们.

推荐答案

这不是Go中"隐私"的工作原理:隐私的粒度就是包.

如果really只想让mytype的成员访问某些字段,则必须将 struct 和函数隔离在它们自己的包中.

但这不是通常的做法.Go是否是OOP是有争议的,但很明显,实践并不是像您看起来想要的那样用 struct 封装代码.通常,包足够小以保证一致性:如果您不想从包中访问字段,请不要访问它们.

Go相关问答推荐

获取作为类型参数传递给方法接收方中的类型参数的切片的基础类型

困扰围棋官方巡回赛的S建议所有方法都使用同一类型的接收器

有没有办法通过Go cmdline或IDE(IntelliJ)找出我的 struct 实现了什么接口?

允许在 struct 中使用复合作为函数参数

创建服务时云运行触发器执行失败

使用!NOT运算符的Golang文本/模板多个条件

从MySQL/GO表获取行数据

Go - 永远停止带有上下文的循环

Golang chromedp Dockerfile

Golang prometheus:有没有办法衡量出站请求的指标?

git ls-remote 成功而 go get 失败

MQTT 客户端没有收到另一个客户端发送的消息

将 big.Int 转换为 [2]int64,反之亦然和二进制补码

如何在 Docker 容器中使用私有存储库进行身份验证

如何使用 Status 字段创建 Kubernetes 对象?

如何在 Golang 中使用具有相同名称或特定关键字的行或列重新排列/排序 CSV

使用无服务器工作流 go sdk 时出现间歇性 JSON 解组错误

将 Golang Gin 与 AWS Lambda 和无服务器与代理路径一起使用

Golang SSH客户端错误无法验证,try 的方法[无公钥],没有支持的方法

Golang API 的 HTTPS