V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
hihanley
V2EX  ›  问与答

请教一个 Go 语言的封装 struct 问题

  •  1
     
  •   hihanley · 2021-09-04 16:10:46 +08:00 · 801 次点击
    这是一个创建于 955 天前的主题,其中的信息可能已经有所发展或是发生改变。

    目录结构:

    .
    ├── 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 我来加你。

    第 1 条附言  ·  2021-09-04 16:56:15 +08:00

    感谢,问题解决了:

    internal  主要是控制只在当前package访问(内部包),一般写开源的框架会有很多地方用到
    
    只有直接父级package可以访问,其他的都不行,再往上的祖先package也不行
    父级package也只能访问internal package使用大写暴露出的内容,小写的不行
    
    作者:Rocket
    链接:https://juejin.cn/post/6864834195724238855
    来源:掘金
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
    
    4 条回复    2021-09-04 16:48:23 +08:00
    iamzuoxinyu
        1
    iamzuoxinyu  
       2021-09-04 16:17:58 +08:00 via Android
    internal 是 go package 管理里约定好不能被外部访问的内部包。文档比较新隐晦。换个名字吧。
    youngce
        2
    youngce  
       2021-09-04 16:18:10 +08:00
    这个...你用的啥 IDE 啊,我用 goland,调包什么的都提示的明明白白的,没有遇到过类似的问题
    hihanley
        3
    hihanley  
    OP
       2021-09-04 16:44:28 +08:00
    @youngce 用的是 vscode
    hihanley
        4
    hihanley  
    OP
       2021-09-04 16:48:23 +08:00
    @iamzuoxinyu 大佬,我的目的就是让这些包不能从外部访问。到这里我又有其他疑问了,这个“外部”指的是 module 以外,还是指 package 以外呢?
    如果是 package 以外,那我要怎么从 api 访问到 internal ?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1053 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 19:04 · PVG 03:04 · LAX 12:04 · JFK 15:04
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.