无法为包中的结构体创建私有字段和方法
问题:
是否可以在 Go 包中将结构体的字段和方法设置为私有,仅可由该结构体的成员访问,而不能由其他包函数或外部代码访问?
Context:
考虑以下代码片段:
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") }
在这种情况下,大小和哈希字段以及 doPrivate 方法应该封装在 mytype 中,其他类型无法访问。
答案:
虽然 Go 允许根据大小写导出或隐藏标识符,但 Go 中不存在私有类成员或数据隐藏的概念。
按照惯例,导出的标识符(以大写字母开头)旨在供包内的公共使用。相反,未导出的标识符(以小写字母初始化)在该包内的访问受到限制。
但是,在给定的包内,无法进一步限制对该包范围之外的结构成员的访问。为了实现数据封装,建议的方法是创建一个单独的包,其中整个结构及其关联方法是该包中定义的唯一元素。
以上是你可以在 Go 包中将结构体字段和方法设为私有吗?的详细内容。更多信息请关注PHP中文网其他相关文章!