首頁  >  文章  >  後端開發  >  go語言必須有一個什麼包

go語言必須有一個什麼包

青灯夜游
青灯夜游原創
2023-01-04 20:30:174031瀏覽

go語言必須有一個main套件。 Go語言是編譯型的靜態語言,所以在執行Go語言程式之前,需要先將其編譯成二進位的可執行檔;而要產生Go語言可執行程序,必須要有名為main的套件,並且在該套件下必須有且只有一個main函數。

go語言必須有一個什麼包

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

1. 套件的概念和原始檔案

Go程式是透過把套件連結到一起構成的。包是由一個個一起定義了屬於該包的常數、類型、變數、函數(它們可以被同一個包內的所有文件訪問,也可以透過導出而被其他的包使用)的源文件構成的。每個包的程式碼都可以當作很小的複用單元,被其他項目所引用。

每個原始檔案都有一個package語句定義了它屬於哪個包,後面跟著可能為空的import集合聲明了需要使用哪些包,再往後跟著可能為空的函數、類型、變量、常量的集合。

我們可以看到名為code和errno的檔案的歸屬包,都為errno,這就表明,在Go中並不像Java那樣以一個類別作為複用單元,而是以包作為一個很小的複用單元。

總結:在Go中最小的單元是包,而包下的可以有多個源文件,源文件就相當於class類,每個源文件透過package語句聲明了該文件屬於哪個包。

2. main套件

在Go語言裡,命名為main的套件具有特殊的意義。 Go語言的編譯程式會試圖把這種名字的套件編譯為二進位的可執行檔。所有用Go語言編譯的可執行程式都必須有一個名為main的套件。

簡單來說:要產生Go語言可執行程序,必須要有名為main的package包,且在該套件下必須有且只有一個main函數

#當編譯器發現這個某個套件的名字為main是,它一定也會發現名為main()是函數,否則不會建立執行檔。 main()函數是程式的入口,所以,如果沒有這個函數,程式就沒有辦法開始執行。程式編譯時,會使用宣告main套件的程式碼所在的目錄的目錄名稱作為二進位執行檔的檔名。

3. 套件目錄的命名規範

所謂無規矩不成方圓,在開發Go語言之前,我們一定要了解Go語言的一些特性和規範才能更好的開發出高品質,可通用的程式碼,不然開發出一個只有你看得懂的程序,那隻能算是自娛自樂罷了。本節根據一些經典程式碼和公司開發習慣給了一個命名規範範例,範例如下:

下面根據這個範例圖,講解一下我理解的開發規格:

  • #conf: 本目錄主要保存設定檔

  • handler:主要存放一些程式的入口文件,相當於Java中的Collter層

  • model:主要存放於資料庫操作相關的檔案

  • pkg:主要保存一些通用的工具類別等程式碼

  • router:主要保存路由服務的程式碼

  • service:主要保存業務程式碼

  • #vendor:主要保存專案本身的依賴套件

  • conf.yaml:專案的設定文件,可放在跟目錄下,也可放在conf資料夾下

  • main.go:程式的入口,一般放置在根目錄下

4. 導入


程序的初始化和執行都起始於main套件。如果main套件也導入了它的套件,那麼就會在編譯時將它們依序導入。一個被多個地方導入的套件只會被導入一次。當一個包被導入時,如果該包還導入了其它的包,那麼會先將其它包導入進來,然後再對這些包中的包級常數和變量進行初始化,接著執行init函數(如果有的話),依序類推。等所有被導入的套件都載入完畢了,就會開始對main套件中的包級常數和變數進行初始化,然後執行main套件中的init函數(如果存在的話),最後執行main函數。

套件在導入時,查找依賴時會根據從高到低的優先權來劃分,大概:
  • 目前套件下的vendor目錄。
  • 向上級目錄找,直到找到src下的vendor目錄。
  • 在GOPATH下面找依賴套件。
  • 在GOROOT目錄下尋找

套件匯入的語法

在寫Go程式碼的時候常用到import這個指令用來導入套件文件,看到的方式參考如下:
  • 常規導入

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视频教程编程教学

以上是go語言必須有一個什麼包的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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