自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Golang模塊級(jí)私有包(Internal Package Mechanism)詳解

開發(fā) 前端
本文介紹了Internal包的作用和使用場(chǎng)景,一定要親手寫代碼體會(huì)一下其使用方法和使用場(chǎng)景。

引言

熟悉Golang的同學(xué)應(yīng)該都知道Golang的包機(jī)制,一個(gè)包中的程序?qū)嶓w有兩種訪問(wèn)權(quán)限:可導(dǎo)出(其他包可以訪問(wèn))和不可導(dǎo)出(其他包不能訪問(wèn),包內(nèi)可訪問(wèn))。

但是這兩種訪問(wèn)權(quán)限并不能滿足所有的場(chǎng)景,例如組織WEB項(xiàng)目目錄結(jié)構(gòu)的場(chǎng)景。組織WEB項(xiàng)目目錄結(jié)構(gòu)的典型場(chǎng)景如下:一般把項(xiàng)目中處理業(yè)務(wù)邏輯的部分放在一起(分為三層,分別是接口表示層(api)、業(yè)務(wù)邏輯層(bll),數(shù)據(jù)訪問(wèn)層(dal)),不希望其他部分代碼訪問(wèn)業(yè)務(wù)邏輯部分的代碼,而允許業(yè)務(wù)邏輯部分代碼訪問(wèn)其他部分代碼,這樣嚴(yán)格分為業(yè)務(wù)邏輯部分和非業(yè)務(wù)邏輯部分,結(jié)構(gòu)清晰,方便維護(hù)。要從根本上防止其他部分代碼不能訪問(wèn)業(yè)務(wù)邏輯部分的代碼一般語(yǔ)言都沒(méi)有提供這種機(jī)制,Golang從1.4引入的內(nèi)部包機(jī)制(將包命名為internal)就可以實(shí)現(xiàn)這一點(diǎn)。

什么是內(nèi)部包(Internal packages)?

內(nèi)部包就是將代碼放在名為internal的目錄或名為internal的目錄的子目錄中。有以下特點(diǎn):

  • /a/b/c/internal/d/e/f目錄中的代碼只能被/a/b/c目錄中代碼(文件或子目錄中代碼)導(dǎo)入,而不能被/a/b/g目錄下的代碼導(dǎo)入;
  • $GOROOT/src/pkg/internal/xxx只能被$GOROOT/src/目錄中代碼導(dǎo)入(文件或子目錄中代碼);
  • $GOROOT/src/pkg/net/http/internal只能被net/http和net/http/* 導(dǎo)入;
  • $GOPATH/src/mypkg/internal/foo只能被$GOPATH/src/mypkg目錄中的代碼導(dǎo)入(文件或子目錄中代碼)。

示例說(shuō)明

以如下目錄結(jié)構(gòu)為例說(shuō)明:

├── pkg1
│   ├── internal
│   │   ├── sub2
│   │       └── sub2.go
│   │   └── test1.go
│   │
│   ├── sub1
│   │   └── test2.go
│   └── pkg1.go
├── pkg2
│   └── pkg2.go
└── main.go

可以導(dǎo)入internal包的代碼:test2.go、pkg1.go和sub2.go,不能導(dǎo)入internal包的代碼:main.go和pkg2.go。

可以導(dǎo)入sub2包的代碼:test2.go、pkg1.go和test1.go,不能導(dǎo)入sub2包的代碼:main.go和pkg2.go。

小結(jié)

本文介紹了internal包的作用和使用場(chǎng)景,一定要親手寫代碼體會(huì)一下其使用方法和使用場(chǎng)景。

責(zé)任編輯:姜華 來(lái)源: 今日頭條
相關(guān)推薦

2023-10-24 16:03:34

GoGolang

2023-08-03 08:48:07

Golang接口

2023-05-12 09:40:53

ContextGolang

2023-11-27 15:02:37

BytesGolang

2023-08-02 09:07:27

Golangio 包

2023-10-18 08:22:38

BufioGolang

2023-08-31 09:28:12

Golang可導(dǎo)出函數(shù)

2023-09-06 09:10:04

Golang字符串

2023-11-07 09:02:07

Golangbytes

2023-09-07 07:35:54

GolangBufio

2023-09-04 08:17:37

Golangstrings 包

2023-05-15 08:50:58

ContextGolang

2023-08-28 17:16:51

Golangio 包

2023-11-03 08:53:15

StrconvGolang

2023-09-05 08:22:44

Golangstrings 包

2023-10-07 09:08:32

Golangbufio

2023-10-10 08:57:44

Golangbufio

2024-01-18 09:07:04

Errors函數(shù)Golang

2023-08-08 14:51:29

2023-07-05 08:38:48

GolangGo語(yǔ)言
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)