首頁 後端開發 Golang golang包的特性是什麼

golang包的特性是什麼

Jan 13, 2023 pm 04:56 PM
golang go語言

特性:1、包名一般是小寫,用一個簡短且有意義的名稱;2、包名一般要和所在的目錄同名,也可不同名,包名中不能包含“-”等特殊符號;3、包一般使用網域名稱作為目錄名稱,這樣能保證包名的唯一性;4、包名為main的包為應用程式的入口包,編譯源碼時如果沒有main包時,將無法編譯輸出可執行的檔案;5、一個目錄下的所有原始碼檔案只能屬於同一個包,同樣屬於同一個包的源碼檔案不能放在多個目錄下。

golang包的特性是什麼

本教學操作環境:windows7系統、GO 1.18版本、Dell G3電腦。

Go語言是使用套件來組織原始碼的,套件(package)是多個 Go 原始碼的集合,是一種高階的程式碼多用方案。 Go語言中為我們提供了許多內建包,如 fmt、os、io 等。

任何原始碼檔案必須屬於某個套件,同時原始碼檔案的第一行有效程式碼必須是package pacakgeName 語句,透過該語句宣告自己所在的套件。

套件的基本概念

Go語言的套件借助了目錄樹的組織形式,一般套件的名稱就是其原始檔案所在目錄的名稱,雖然Go語言沒有強制要求包名必須和其所在的目錄名同名,但還是建議包名和所在目錄同名,這樣結構更清晰。

套件可以定義在很深的目錄中,套件名稱的定義是不包含目錄路徑的,但是套件在引用時一般使用全路徑引用。例如在GOPATH/src/a/b/ 下定義一個套件 c。在套件c 的原始碼中只需宣告為package c,而不是宣告為package a/b/c,但在導入c 套件時,需要帶上路徑,例如 import "a/b/c"

Go語言套件特性

  • #套件名稱一般是小寫的,使用一個簡短且有意義的名稱;

  • 套件名稱一般要和所在的目錄同名,也可以與其目錄不同名稱(但最好不要這樣做),包名中不能包含- 等特殊符號。

  • 套件一般會使用網域名稱作為目錄名稱,這樣可以保證套件名稱的唯一性,例如GitHub 專案的套件一般會放到GOPATH/src/github.com/userName /projectName 目錄下。

  • 套件名為 main 的套件為應用程式的入口包,編譯不包含 main 套件的源碼檔案時不會得到可執行檔。

  • 一個資料夾下的所有原始碼檔案只能屬於同一個包,同樣屬於同一個包的源碼檔案不能放在多個資料夾下。

Go語言套件設計想法

#任何套件系統設計的目的都是為了簡化大型程式的設計和維護工作,透過將一組相關的特性放進一個獨立的單元以便於理解和更新,在每個單元更新的同時保持和程序中其它單元的相對獨立性。這種模組化的特性允許每個包可以被其它的不同項目共享和重用,在項目範圍內、甚至全球範圍統一的分發和復用。

每個套件一般都定義了一個不同的名字空間用於它內部的每個識別碼的存取。每個名字空間關聯到一個特定的包,讓我們給 類型、函數 等選擇一個簡短明了的名字,這樣可以避免在我們使用它們的時候減少和其它部分名字的衝突。

當我們修改了一個原始文件,我們必須重新編譯該原始檔案對應的套件和所有依賴該套件的其他套件。即使是從頭開始構建,Go 語言編譯器的編譯速度也明顯快於其它編譯語言。 Go 語言的閃電般的編譯速度主要得益於三個語言特性。

明確聲明

所有導入的套件必須在每個文件的開頭明確聲明,這樣的話編譯器就沒有必要讀取和分析整個源文件來判斷包的依賴關係。

禁止循環依賴

禁止包的環狀依賴,因為沒有循環依賴,包的依賴關係形成一個有向無環圖,每個包可以被獨立編譯,而且很可能是被並發編譯。

目標檔案

編譯後套件的目標檔案不只記錄套件本身的匯出訊息,目標檔案同時也記錄了套件的依賴關係。因此,在編譯一個套件的時候,編譯器只需要讀取每個直接導入套件的目標文件,而不需要遍歷所有依賴的文件。

【相關推薦:Go影片教學程式設計教學

以上是golang包的特性是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

Go的爬蟲Colly中Queue線程的問題是什麼? Go的爬蟲Colly中Queue線程的問題是什麼? Apr 02, 2025 pm 02:09 PM

Go爬蟲Colly中的Queue線程問題探討在使用Go語言的Colly爬蟲庫時,開發者常常會遇到關於線程和請求隊列的問題。 �...

Go語言中用於浮點數運算的庫有哪些? Go語言中用於浮點數運算的庫有哪些? Apr 02, 2025 pm 02:06 PM

Go語言中用於浮點數運算的庫介紹在Go語言(也稱為Golang)中,進行浮點數的加減乘除運算時,如何確保精度是�...

在 Go 語言中,為什麼使用 Println 和 string() 函數打印字符串會出現不同的效果? 在 Go 語言中,為什麼使用 Println 和 string() 函數打印字符串會出現不同的效果? Apr 02, 2025 pm 02:03 PM

Go語言中字符串打印的區別:使用Println與string()函數的效果差異在Go...

GoLand中自定義結構體標籤不顯示怎麼辦? GoLand中自定義結構體標籤不顯示怎麼辦? Apr 02, 2025 pm 05:09 PM

GoLand中自定義結構體標籤不顯示怎麼辦?在使用GoLand進行Go語言開發時,很多開發者會遇到自定義結構體標籤在�...

在Go語言中使用Redis Stream實現消息隊列時,如何解決user_id類型轉換問題? 在Go語言中使用Redis Stream實現消息隊列時,如何解決user_id類型轉換問題? Apr 02, 2025 pm 04:54 PM

Go語言中使用RedisStream實現消息隊列時類型轉換問題在使用Go語言與Redis...

Go語言中哪些庫是由大公司開發或知名的開源項目提供的? Go語言中哪些庫是由大公司開發或知名的開源項目提供的? Apr 02, 2025 pm 04:12 PM

Go語言中哪些庫是大公司開發或知名開源項目?在使用Go語言進行編程時,開發者常常會遇到一些常見的需求,�...

Golang的目的:建立高效且可擴展的系統 Golang的目的:建立高效且可擴展的系統 Apr 09, 2025 pm 05:17 PM

Go語言在構建高效且可擴展的系統中表現出色,其優勢包括:1.高性能:編譯成機器碼,運行速度快;2.並發編程:通過goroutines和channels簡化多任務處理;3.簡潔性:語法簡潔,降低學習和維護成本;4.跨平台:支持跨平台編譯,方便部署。

在Go編程中,如何正確管理Mysql和Redis的連接與釋放資源? 在Go編程中,如何正確管理Mysql和Redis的連接與釋放資源? Apr 02, 2025 pm 05:03 PM

Go編程中的資源管理:Mysql和Redis的連接與釋放在學習Go編程過程中,如何正確管理資源,特別是與數據庫和緩存�...

See all articles