go語言必須有一個main套件。 Go語言是編譯型的靜態語言,所以在執行Go語言程式之前,需要先將其編譯成二進位的可執行檔;而要產生Go語言可執行程序,必須要有名為main的套件,並且在該套件下必須有且只有一個main函數。
本教學操作環境:windows7系統、GO 1.18版本、Dell G3電腦。
Go程式是透過把套件連結到一起構成的。包是由一個個一起定義了屬於該包的常數、類型、變數、函數(它們可以被同一個包內的所有文件訪問,也可以透過導出而被其他的包使用)的源文件構成的。每個包的程式碼都可以當作很小的複用單元,被其他項目所引用。
每個原始檔案都有一個package語句定義了它屬於哪個包,後面跟著可能為空的import集合聲明了需要使用哪些包,再往後跟著可能為空的函數、類型、變量、常量的集合。
我們可以看到名為code和errno的檔案的歸屬包,都為errno,這就表明,在Go中並不像Java那樣以一個類別作為複用單元,而是以包作為一個很小的複用單元。
總結:在Go中最小的單元是包,而包下的可以有多個源文件,源文件就相當於class類,每個源文件透過package語句聲明了該文件屬於哪個包。
在Go語言裡,命名為main的套件具有特殊的意義。 Go語言的編譯程式會試圖把這種名字的套件編譯為二進位的可執行檔。所有用Go語言編譯的可執行程式都必須有一個名為main的套件。
簡單來說:要產生Go語言可執行程序,必須要有名為main的package包,且在該套件下必須有且只有一個main函數
#當編譯器發現這個某個套件的名字為main是,它一定也會發現名為main()是函數,否則不會建立執行檔。 main()函數是程式的入口,所以,如果沒有這個函數,程式就沒有辦法開始執行。程式編譯時,會使用宣告main套件的程式碼所在的目錄的目錄名稱作為二進位執行檔的檔名。
所謂無規矩不成方圓,在開發Go語言之前,我們一定要了解Go語言的一些特性和規範才能更好的開發出高品質,可通用的程式碼,不然開發出一個只有你看得懂的程序,那隻能算是自娛自樂罷了。本節根據一些經典程式碼和公司開發習慣給了一個命名規範範例,範例如下:
下面根據這個範例圖,講解一下我理解的開發規格:
#conf: 本目錄主要保存設定檔
handler:主要存放一些程式的入口文件,相當於Java中的Collter層
model:主要存放於資料庫操作相關的檔案
pkg:主要保存一些通用的工具類別等程式碼
router:主要保存路由服務的程式碼
service:主要保存業務程式碼
#vendor:主要保存專案本身的依賴套件
conf.yaml:專案的設定文件,可放在跟目錄下,也可放在conf資料夾下
main.go:程式的入口,一般放置在根目錄下
程序的初始化和執行都起始於main套件。如果main套件也導入了它的套件,那麼就會在編譯時將它們依序導入。一個被多個地方導入的套件只會被導入一次。當一個包被導入時,如果該包還導入了其它的包,那麼會先將其它包導入進來,然後再對這些包中的包級常數和變量進行初始化,接著執行init函數(如果有的話),依序類推。等所有被導入的套件都載入完畢了,就會開始對main套件中的包級常數和變數進行初始化,然後執行main套件中的init函數(如果存在的話),最後執行main函數。
import( "fmt" )然後在程式碼裡面可以透過如下的方式呼叫## #
fmt.Println("hello world")
上面这个fmt是Go语言的标准库,他其实是去GOROOT下去加载该模块。
点操作
import ( . "fmt" )
这个点操作的含义就是这个包导入之后在你调用这个包的函数时,你可以省略前缀的包名,也就是前面你调用的fmt.Println(“hello world”) 可以省略的写成Println(“hello world”)。注意:该包内的函数不能与其重名。
别名操作
import( f “fmt” )
别名操作顾名思义可以把包命名成另一个用起来容易记忆的名字,别名操作调用包函数时前缀变成了重命名的前缀,即f.Println(“hello world”),通常为了解决导入多个重名包的问题。
_操作
import ( _ "github.com/go-sql-driver/mysql" )
_操作其实只是引入该包但不使用,通常只为了执行该包中所有的init()函数,最常见的就是上面的mysql包。
以上是go語言必須有一個什麼包的詳細內容。更多資訊請關注PHP中文網其他相關文章!