Go的internal package簡介。
Go 1.4開始的internal package功能可避免/internal
中的package被所在的package外的package引用(很繞口令),看字面不太容易了解,請看下面範例。
go-demo/
├── a/
│ ├── f/
│ │ └── f.go
│ ├── internal/
│ │ └── e.go
│ └── a.go
├── b/
│ └── b.go
├── internal/
│ ├── c/
│ │ └── c.go
│ └── d/
│ └── d.go
├── go.mod
├── go.sum
└── main.go
a.go
可以引用所有package。
b.go
無法引用/a/internal
的package,其他皆可。
b.go
package b
import (
"fmt"
"abc.com/demo/a"
"abc.com/demo/a/f"
"abc.com/demo/a/internal/e" // could not import abc.com/demo/a/internal/e
"abc.com/demo/internal/c"
"abc.com/demo/internal/d"
)
func PrintB() {
a.PrintA()
c.PrintC()
d.PrintD()
e.PrintE()
f.PrintF()
fmt.Println("b")
}
c.go
無法引用/a/internal
的package,其他皆可。
d.go
無法引用/a/internal
的package,其他皆可。
e.go
可以引用所有package。
f.go
可以引用所有package。
沒有留言:
張貼留言