網頁

2022/6/9

Golang internal package簡介

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。



沒有留言:

張貼留言