Golang Go语言 package 权限问题
Golang Go语言 package 权限问题
假设一个项目的布局如下:
pkg/
cache/
redis/redis.go // package xxx/pkg/cache/redis
memory/memory.go // package xxx/pkg/cache/memory
utils.go // package xxx/pkg/cache
go.mod
main.go
在 redis.go 和 memory.go 中有些共性的方法或者功能,提取出来放在 utils.go 中,以大写字母开头的函数。
我希望 utils.go 中的代码只能被 pkg/cahce 下面的子包访问,不能被其他外部代码访问。
更多关于Golang Go语言 package 权限问题的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
pkg/cache 下建一个目录 internal,把 utils.go 放里边。
https://golang.org/doc/go1.4#internalpackages
更多关于Golang Go语言 package 权限问题的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
懂了,感谢
一整个项目有一个 internal 就行,,不然代码提示的时候,选起来麻烦。
最好别用 pkg
同意,同时建议目录深度可以再平一点
pkg 有可能是放二进制可执行文件的地方,所以避免取类似的名字
楼主,你最终是怎样处理的?我也想学习一下,看英文文档真是头疼。
在Go语言中,package的权限管理主要依赖于命名约定和代码组织结构,而不是像某些其他语言那样通过显式的访问修饰符(如public、private)来控制。以下是一些关键点,帮助你理解Go语言中package的权限问题:
-
包可见性:
- 在Go中,如果一个标识符(如变量、函数、类型等)以小写字母开头,则它是“未导出的”,只能在定义它的包内部访问。
- 如果标识符以大写字母开头,则它是“导出的”,可以被其他包通过包路径来访问。
-
包命名:
- 通常,内部实现细节会放在以小写字母开头的包名(或内部包)中,以避免被外部直接访问。
- 公开API则放在以大写字母开头的包名中。
-
代码组织:
- 通过合理的包结构来组织代码,可以有效控制访问权限。例如,可以将库的内部实现细节放在一个单独的包中,而这个包不会被外部导入。
-
单例模式与封装:
- 虽然Go没有直接的访问修饰符,但你可以通过单例模式、工厂函数、接口等方式来实现封装和权限控制。
-
文档与约定:
- 在大型项目中,通常会通过文档和代码约定来明确哪些部分是公开的API,哪些部分是内部实现细节。
总之,Go语言的权限管理依赖于命名约定和代码组织结构,而不是显式的访问修饰符。通过合理的包命名和代码组织,你可以有效地控制包的访问权限。