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

2021-09-04 16:10:46 +08:00
 hihanley

目录结构:

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

877 次点击
所在节点    问与答
4 条回复
iamzuoxinyu
2021-09-04 16:17:58 +08:00
internal 是 go package 管理里约定好不能被外部访问的内部包。文档比较新隐晦。换个名字吧。
youngce
2021-09-04 16:18:10 +08:00
这个...你用的啥 IDE 啊,我用 goland,调包什么的都提示的明明白白的,没有遇到过类似的问题
hihanley
2021-09-04 16:44:28 +08:00
@youngce 用的是 vscode
hihanley
2021-09-04 16:48:23 +08:00
@iamzuoxinyu 大佬,我的目的就是让这些包不能从外部访问。到这里我又有其他疑问了,这个“外部”指的是 module 以外,还是指 package 以外呢?
如果是 package 以外,那我要怎么从 api 访问到 internal ?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/799858

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX