让我们确认一下Go 1.4版本的“内部”包的行为

首先

我们将运行代码来验证 Go 的内部包的规范。

Go 1.4 版本的“Internal”包
内部包 | Go 1.4 发布说明

简洁地说

看一下上级路径,如果从这个路径下的包中访问,那可能是可以的。也许。

虚构的例子

    • github.com/xxxx/foo/internal/bar というパッケージがある

 

    • internal の一個上は github.com/xxxx/foo

 

    • github.com/xxxx/foo の下に属する全てのパッケージは github.com/xxxx/foo/internal/bar にアクセス可能

 

    github.com/xxxx/foo/buz/qux も github.com/xxxx/foo/internal/bar にアクセス可能

实际案例

golang/go/src/cmd/internal/diff というパッケージがある
internal の一個上は golang/go/src/cmd

golang/go/src/cmd の下に属する全てのパッケージは golang/go/src/cmd/internal/diff にアクセス可能
golang/go/src/cmd/gofmt も golang/go/src/cmd/internal/diff にアクセス可能

我亲自实践了一下

前提 (Qian ti)

package main

import (
    "foo/**/internal/**/hello"
)

func main() {
    hello.Hello()
}
package hello

import "fmt"

// Hello ...
func Hello() {
    fmt.Println("Hello, World!")
}

模式1(可以称呼的人)

foo
├── internal
│   └── hello
│       └── hello.go
├── go.mod
└── main.go

foo/internal可以从foo中调用。

スクリーンショット 2019-11-21 14.09.24.png

第二个模式(不能被称呼的人)

foo
├── bar
│   └── internal
│       └── hello
│           └── hello.go
├── go.mod
└── main.go

foo/bar/internal 无法从foo中调用。

スクリーンショット 2019-11-21 14.13.39.png

模式3(可呼叫的人)

foo
├── bar
│   ├── internal
│   │   └── hello
│   │       └── hello.go
│   └── main.go
└── go.mod

foo/bar/internal 可从 foo/bar 中调用。

スクリーンショット 2019-11-21 14.16.03.png

第四种模式(可以被调用的那一个)

foo
├── cmd
│   └── bar
│       └── main.go
├── internal
│   └── hello
│       └── hello.go
└── go.mod

foo/internal 可以从 foo/cmd/bar 被调用。

スクリーンショット 2019-11-21 14.22.09.png

总结

从内部的一个更高级别的角度来考虑可能更好。

广告
将在 10 秒后关闭
bannerAds