目录结构:
.
├── api/
├── internal //私有的应用程序代码库。这些是不希望被其他人导入的代码。
│ ├── pkg //共享的内部应用程序代码
│ │ └── register
│ │ └── register.go
│ └── register //非共享的内部应用程序代码
│ ├── exist.go
│ ├── xxx.go
│ ├── xxx.go
├── go.mod
├── go.sum
register.go:
package internal
import "net/url"
type Params struct {
*url.Values
}
func (p *Params) AppendParam() {
}
exist.go:
package register
func Exist() {
// 我想在这里访问 register.go 中定义的 Params
}
请问要怎么样才能在其他 package 访问到 ./internal/pkg/register/register.go 定义的 Params ?
我当前的目录结构如果不能访问的话,正确的目录结构应该是什么样的?
另外想加一些 Go 的学习交流群,如果有请大佬留下 Base64 我来加你。
感谢,问题解决了:
internal 主要是控制只在当前package访问(内部包),一般写开源的框架会有很多地方用到
只有直接父级package可以访问,其他的都不行,再往上的祖先package也不行
父级package也只能访问internal package使用大写暴露出的内容,小写的不行
作者:Rocket
链接:https://juejin.cn/post/6864834195724238855
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
1
iamzuoxinyu 2021-09-04 16:17:58 +08:00 via Android
internal 是 go package 管理里约定好不能被外部访问的内部包。文档比较新隐晦。换个名字吧。
|
2
youngce 2021-09-04 16:18:10 +08:00
这个...你用的啥 IDE 啊,我用 goland,调包什么的都提示的明明白白的,没有遇到过类似的问题
|
4
hihanley OP @iamzuoxinyu 大佬,我的目的就是让这些包不能从外部访问。到这里我又有其他疑问了,这个“外部”指的是 module 以外,还是指 package 以外呢?
如果是 package 以外,那我要怎么从 api 访问到 internal ? |