golang包的命名,golang 包名 目錄名

本文目錄一覽:

golang中自定義包

golang中默認以文件夾名作為包名,導入的文件的路徑為$GOPATH/src

例如我們在 $GOPATH/src下面建立一個gopackage的一個文件夾,下面建立一個abc.go的文件,文件內容如下

則我們在包外部使用gopackage包中的函數時,導入格式是這樣的:

我們在abc.go文件中需要導出的函數的首字母都是大寫的,這是因為 只有首字母大寫的標識符才可以導出 ,mutiply(int,int)int函數不可以被導出,編譯失敗。

當我們使用多個自定義包時如果發生衝突,怎麼辦呢,我們可以給不同的包提供不同的別名

如果abc.go文件中包名不是文件夾的名字,如

則在外部導入是,golang會自動為該包提供別名

golang正則表達式 分組命名

正則中有分組這個功能,在golang中也可以使用命名分組。

一次匹配的情況

場景還原如下:

有一行文本,格式為:姓名 年齡 郵箱地址

請將其轉換為一個map

代碼實現如下:

str := `Alice 20 alice@gmail.com`

// 使用命名分組,顯得更清晰

re := regexp.MustCompile(`(?Pname[a-zA-Z]+)\s+(?Page\d+)\s+(?Pemail\w+@\w+(?:\.\w+)+)`)

match := re.FindStringSubmatch(str)

groupNames := re.SubexpNames()

fmt.Printf(“%v, %v, %d, %d\n”, match, groupNames, len(match), len(groupNames))

result := make(map[string]string)

// 轉換為map

for i, name := range groupNames {

if i != 0 name != “” { // 第一個分組為空(也就是整個匹配)

result[name] = match[i]

}

}

prettyResult, _ := json.MarshalIndent(result, “”, ” “)

fmt.Printf(“%s\n”, prettyResult)

輸出為:

[Alice 20 alice@gmail.com Alice 20 alice@gmail.com], [ name age email], 4, 4

{

“age”: “20”,

“email”: “alice@gmail.com”,

“name”: “Alice”

}

注意 [ name age email]有4個元素, 第一個為””。

多次匹配的情況

接上面的例子,實現一個更貼近現實的需求:

有一個文件, 內容大致如下:

Alice 20 alice@gmail.com

Bob 25 bob@outlook.com

gerrylon 26 gerrylon@github.com

更多內容

和上面一樣, 不過這次轉出來是一個slice of map, 也就是多個map。

代碼如下:

// 文件內容直接用字元串表示

usersStr := `

Alice 20 alice@gmail.com

Bob 25 bob@outlook.com

gerrylon 26 gerrylon@github.com

`

userRe := regexp.MustCompile(`(?Pname[a-zA-Z]+)\s+(?Page\d+)\s+(?Pemail\w+@\w+(?:\.\w+)+)`)

// 這裡要用FindAllStringSubmatch,找到所有的匹配

users := userRe.FindAllStringSubmatch(usersStr, -1)

groupNames := userRe.SubexpNames()

var result []map[string]string // slice of map

// 循環所有行

for _, user := range users {

m := make(map[string]string)

// 對每一行生成一個map

for j, name := range groupNames {

if j != 0 name != “” {

m[name] = strings.TrimSpace(user[j])

}

}

result = append(result, m)

}

prettyResult, _ := json.MarshalIndent(result, “”, ” “)

fmt.Println(string(prettyResult))

輸出為:

[

{

“age”: “20”,

“email”: “alice@gmail.com”,

“name”: “Alice”

},

{

“age”: “25”,

“email”: “bob@outlook.com”,

“name”: “Bob”

},

{

“age”: “26”,

“email”: “gerrylon@github.com”,

“name”: “gerrylon”

}

]

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

總結

使用命名分組可以使正則表示的意義更清晰。

轉換為map更加符合人類的閱讀習慣,不過比一般的根據索引取分組值麻煩一些。

————————————————

版權聲明:本文為CSDN博主「butterfly5211314」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。

原文鏈接:

如何在golang使用自定義的包

你自定義的包必須在GOPATH上,然後導入時要相對GOPATH導入

例如GOPATH=C:\golib

你定義的包文件your_package.go在C:\golib\src\your\package 下面.

你在調用文件中可以:

import “your/package”

package.XxFunction(xx)

golang包名必須與所在文件夾同名嗎

不必須,但是同個目錄中(不含子目錄)的所有文件包名必須一致,通常為了方便包定位,建議包名和目錄名一致,否則你import “A”,使用起來B.xxx,看上去不統一,不能一眼看出來這個B包是哪個文件的。

Golang常用包有哪些

⑴ Go Kit

它本身不是一個框架,而是一套微服務工具集,可以用於解決分散式系統開發中的大多數常見問題,所以使用者可以專註於你的業務邏輯中。

⑵ Gingko

是一個Go測試框架,目的是幫助我們使用行為驅動開發風格高效地編寫富有表現力和全面的測試,它有著非常良好的幫助文檔,任何人都可以輕鬆地在項目中集成使用它。

⑶ NSQ

實時分散式消息傳遞平台,提供高可用性和可靠的消息傳遞保證,可以水平擴展,支持負載均衡,安裝部署非常方便。

⑷ Goose

Golang中最佳的資料庫遷移包,通過創建增量SQL更改和Go函數來管理資料庫結構,在Go1.16版本以上,還支持了嵌入式sql遷移。

⑸ GORM

是一個功能齊全的Golang對象關係映射庫,是一種開發人員友好的工具,用於在不兼容的類型系統之間轉換數據,專門設計用於在類型系統之間切換時最大限度地減少重寫代碼。

⑹ Authboss

一個模塊化的身份驗證包,使用它你可以快速地在項目中進行身份驗證管理。它有幾個常見的身份驗證和授權模塊供開發人員選擇。

⑺ cli

是一個簡單快捷的命令行管理包,用於為Go語言構建命令行應用程序,允許開發人員開發自己的富有表現力的命令行應用程序,用於創建標誌、bash完成常式並生成幫助文本。

⑻ Vegeta

是一個用於HTTP負載測試的工具包,這個多功能工具專為測試具有恆定請求率的HTTP服務而設計。它可以有效地分析程序中的潛在問題,是一個始終貫穿以提高整體性能為目的的包。

Golang-go mod 導入本地包

mian.go調用名為”pk”的包

所有文件都在項目目錄”projectfile”下,其中本地包”pk”的文件在”package”目錄下。

使用go mod進行依賴包的管理,因此注意項目根目錄下是否有go.mod,沒有的一定要先go mod init 項目名稱。

import引用時,go.mod把所在目錄作為根目錄,填寫路徑時把相對路徑寫在s5後面。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/292913.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-25 18:38
下一篇 2024-12-25 18:38

相關推薦

  • Rclone複製所有目錄

    如果你需要將本地文件複製到雲端,或者從雲端複製文件到本地,Rclone是一個非常好的選擇。本文將介紹如何使用Rclone複製所有目錄。 一、安裝Rclone 首先,你需要在你的機器…

    編程 2025-04-29
  • 使用Golang調用Python

    在現代軟體開發中,多種編程語言的協作是相當普遍的。其中一種使用場景是Golang調用Python,這使得在使用Python庫的同時,可以利用Golang的高性能和強大並發能力。這篇…

    編程 2025-04-29
  • 二級考級舞蹈大全目錄

    本文將從以下多個方面對二級考級舞蹈大全目錄進行詳細闡述。 一、目錄結構 二級考級舞蹈大全目錄主要分為三級,即一級目錄、二級目錄和三級目錄。其中,一級目錄為舞蹈類型,二級目錄為舞蹈名…

    編程 2025-04-29
  • 使用Golang創建黑色背景圖片的方法

    本文將從多個方面介紹使用Golang創建黑色背景圖片的方法。 一、安裝必要的代碼庫和工具 在開始創建黑色背景圖片之前,我們需要先安裝必要的代碼庫和工具: go get -u git…

    編程 2025-04-29
  • Python目錄怎麼打開

    Python是一種高級編程語言,以其易讀、易擴展和簡潔高效的特徵,目前得到了眾多程序開發者的認可。Python的應用已經擴展到了人工智慧、Web開發、數據分析、自動化測試等領域。本…

    編程 2025-04-28
  • 不從skel目錄複製文件的方法

    對於開發工程師而言,我們經常需要使用一些預定義的目錄結構來組織我們的項目文件。skel作為一個經典的目錄結構,包含了許多常用的文件和目錄。 一、了解skel目錄 skel目錄通常位…

    編程 2025-04-28
  • Python保存文件到指定目錄

    在Python編程中,我們有時需要將生成的文件保存到指定目錄中。本文將從以下幾個方面詳細介紹如何使用Python保存文件到指定目錄。 一、使用os模塊保存文件到指定目錄 在Pyth…

    編程 2025-04-28
  • Python獲取py文件目錄及其應用

    本文將從多個方面介紹Python獲取py文件目錄及其應用,包括獲取py文件所在目錄和父目錄、獲取某個路徑下所有py文件、查找某個目錄下特定文件名的py文件、以及將當前目錄及其子目錄…

    編程 2025-04-27
  • Docker掛載目錄–graph用法介紹

    本文將從如下幾個方面詳細闡述Docker掛載目錄–graph: 一、基本概念 在Docker中,鏡像是由一系列只讀層組成的文件系統。當我們啟動一個容器時,Docker會…

    編程 2025-04-27
  • 網站目錄掃描

    一、目錄掃描是什麼 目錄掃描是一種常見的網路安全評估技術,通常用於評估一個網站或者系統的安全性。它的原理是通過枚舉目標系統中的文件和目錄,尋找系統存在的漏洞和其他安全問題。 在目錄…

    編程 2025-04-25

發表回復

登錄後才能評論