欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

go get 和 go install 對比介紹

 更新時間:2023年04月19日 09:04:05   作者:Light_Tree  
go install和go get都是Go語言的工具命令,但它們之間有一些區(qū)別。go get:用于從遠程代碼存儲庫(如 GitHub)中下載或更新Go代碼包。go install:用于編譯并安裝 Go 代碼包,本文go get和go install對比介紹的非常詳細,需要的朋友可以參考一下

一、問題背景

安裝Go庫db2struct時,使用go get命令執(zhí)行

go get ``github.com/Shelnutt2/db2struct/cmd/db2struct

執(zhí)行db2struct -h報錯:

zsh: command not found: db2struct

改為go install命令執(zhí)行

go install ``github.com/Shelnutt2/db2struct/cmd/db2struct

后成功執(zhí)行db2struct -h,同時ls $GOPATH/bin也看到了可執(zhí)行文件db2struct

二、原因探究

(一)命令定義和區(qū)別

go installgo get 都是 Go 語言的工具命令,但它們之間有一些區(qū)別。

  • go get:用于從遠程代碼存儲庫(如 GitHub)中下載或更新 Go 代碼包。它會下載代碼包并將其存儲在 $GOPATH/src 目錄下對應(yīng)的位置,并編譯代碼包中的程序和庫。如果目標包之前已經(jīng)被下載過了,那么 go get 會嘗試更新到最新版本,并重新編譯程序和庫文件。在更新完代碼包后,go get 還會自動把下載的代碼包的可執(zhí)行文件復(fù)制到 $GOPATH/bin 目錄下,以方便直接使用該可執(zhí)行文件。
  • go install:用于編譯并安裝 Go 代碼包,并將其生成的可執(zhí)行程序或庫文件存儲到 $GOPATH/bin 或者 $GOPATH/pkg 目錄下。如果你在項目目錄下執(zhí)行 go install,它將會編譯并安裝當(dāng)前項目的代碼,生成可執(zhí)行文件并將其保存到 $GOPATH/bin 目錄下(如果項目是一個庫,則生成的是 .a 文件,并將其存儲到 $GOPATH/pkg 目錄下)。

因此,go get 用于下載和更新代碼包,并產(chǎn)生對應(yīng)的可執(zhí)行程序,而 go install 用于將一個 Go 代碼包轉(zhuǎn)化為可執(zhí)行程序或庫文件,并安裝到系統(tǒng)路徑以供直接使用。

使用表格形式對 go getgo install 進行比較:

命令功能下載位置生成文件位置
go get從遠程代碼庫中下載或更新 Go 代碼包$GOPATH/src$GOPATH/bin
go install編譯并安裝 Go 代碼包無需下載自身代碼,$GOPATH/src 用于依賴包的查找GOPATH/bin或GOPATH/bin 或 GOPATH/bin或GOPATH/pkg

(二)go get 是否包含了 go install

可以認為 go get 命令包含了 go install 命令的功能,但它們之間還是存在一些細微差別。

go get 命令用于從遠程代碼庫中下載或更新 Go 代碼包,并自動編譯生成相應(yīng)的可執(zhí)行程序,同時還將其安裝到 $GOPATH/bin 目錄下,以便簡化程序的運行。go get 命令不需要指定包的路徑,它會使用 Go 語言規(guī)范中約定的包導(dǎo)入路徑來獲取包信息,并自動處理包的依賴關(guān)系以方便編譯。

相比之下,go install 命令則更為靈活,它可以編譯并安裝當(dāng)前項目的代碼,生成可執(zhí)行文件或庫,并將其保存在 $GOPATH/bin$GOPATH/pkg 目錄下。同時,go install 命令還可以通過指定 -ldflags 參數(shù)來修改二進制文件的鏈接標志,從而將一些自定義的元信息加入到二進制文件中,使得可以在運行時通過代碼讀取這些信息。

在 Go 1.16 版本之后,go get 命令已經(jīng)默認使用了 Go 模塊管理工具。而 go install 命令則始終需要先進入到處于 Go 模塊管理的路徑下,然后才能使用該命令編譯并安裝相關(guān)代碼包。

綜上所述,可以認為 go get 命令包含了 go install 命令的部分功能,但是在一些特殊情況下,還是需要使用 go install 命令來進行更靈活的編譯和安裝操作。

(三)為什么要用 go install

在使用 go get 命令下載并安裝代碼包時,有些情況下生成的可執(zhí)行文件可能無法生效,這通常是因為 Go 語言版本不兼容或編譯環(huán)境不同導(dǎo)致的。而使用 go install 命令則可以避免這些問題,下面列舉了幾種常見情況:

  • 版本不兼容:如果 go get 命令下載的代碼包和當(dāng)前使用的 Go 語言版本不兼容,那么 go get 命令可能會產(chǎn)生編譯錯誤或生成無法運行的可執(zhí)行文件。對于這種情況,使用 go install 命令可以保證使用的是當(dāng)前系統(tǒng)上與 Go 語言版本兼容的編譯器。
  • 編譯環(huán)境不同:在使用 go get 命令下載代碼包時,有時它們的編譯環(huán)境與當(dāng)前環(huán)境不同,可能會導(dǎo)致可執(zhí)行文件無法正常工作。而在使用 go install 命令時,該命令會在當(dāng)前環(huán)境下重新編譯源代碼并生成可執(zhí)行文件,從而能夠更加穩(wěn)定地運行代碼。
  • 依賴關(guān)系復(fù)雜:在使用 go get 命令下載大型的代碼包時,它可能會自動下載和安裝大量依賴項。這樣可能會導(dǎo)致依賴關(guān)系變得復(fù)雜而難以管理,有時可能會在下載或編譯依賴項時產(chǎn)生錯誤或警告。而 go install 命令會直接從當(dāng)前路徑下對應(yīng)依賴項中尋找依賴項,因此可以避免這種情況下帶來的復(fù)雜性和錯誤。

綜上所述,盡管 go get 命令十分方便快捷,但在遇到一些特殊情況時,仍然需要使用 go install 命令以獲得更加穩(wěn)定的編譯和安裝效果。

可以使用如下表格來對比 go getgo install 的編譯區(qū)別:

命令功能編譯效果應(yīng)用場景
go get下載或更新 Go 代碼包并生成可執(zhí)行文件可能由于版本或編譯環(huán)境的不同,生成的可執(zhí)行文件無法運行或出現(xiàn)其他問題需要快速下載和安裝指定版本的 Go 代碼包,如果生成的可執(zhí)行文件無法運行,則需要使用 go install 命令重新編譯
go install編譯并安裝 Go 代碼并生成可執(zhí)行文件或庫在當(dāng)前環(huán)境下重新編譯源代碼并生成可執(zhí)行文件或庫,能夠更加穩(wěn)定地運行代碼包需要在當(dāng)前環(huán)境下重新編譯 Go 代碼并生成二進制文件,需要避免由于版本不兼容、編譯環(huán)境不同或依賴關(guān)系復(fù)雜性導(dǎo)致的編譯錯誤和生成的可執(zhí)行文件無法運行的問題。

到此這篇關(guān)于go get 和 go install 對比介紹的文章就介紹到這了,更多相關(guān)go get和go install對比內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Go?內(nèi)聯(lián)優(yōu)化讓程序員愛不釋手

    Go?內(nèi)聯(lián)優(yōu)化讓程序員愛不釋手

    這篇文章主要介紹了Go?內(nèi)聯(lián)優(yōu)化讓程序員愛不釋手,內(nèi)聯(lián)是在編譯過程中自動進行的一類基本優(yōu)化之一,文章圍繞主題展開更多詳細介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-06-06
  • golang類型轉(zhuǎn)換之interface轉(zhuǎn)字符串string簡單示例

    golang類型轉(zhuǎn)換之interface轉(zhuǎn)字符串string簡單示例

    在我們使用Golang進行開發(fā)過程中,總是繞不開對字符或字符串的處理,這篇文章主要給大家介紹了關(guān)于golang類型轉(zhuǎn)換之interface轉(zhuǎn)字符串string的相關(guān)資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-01-01
  • 深入探索Go?1.21中的?maps工具庫

    深入探索Go?1.21中的?maps工具庫

    隨著?Go?1.21.0?版本的發(fā)布,新增了兩個實用的泛型工具庫:maps?和?slices,下面小編就帶大家一起學(xué)習(xí)一下?maps?工具庫的相關(guān)知識吧
    2023-08-08
  • golang字符串轉(zhuǎn)Time類型問題

    golang字符串轉(zhuǎn)Time類型問題

    本文主要介紹了golang字符串轉(zhuǎn)Time類型問題,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • 一文搞懂Golang中iota的用法和原理

    一文搞懂Golang中iota的用法和原理

    我們知道iota是go語言的常量計數(shù)器,本文嘗試全面總結(jié)其使用用法以及其實現(xiàn)原理,需要的朋友可以參考以下內(nèi)容,希望對大家有所幫助
    2022-08-08
  • Go到底能不能實現(xiàn)安全的雙檢鎖(推薦)

    Go到底能不能實現(xiàn)安全的雙檢鎖(推薦)

    這篇文章主要介紹了Go到底能不能實現(xiàn)安全的雙檢鎖,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-05-05
  • Golang極簡入門教程(三):并發(fā)支持

    Golang極簡入門教程(三):并發(fā)支持

    這篇文章主要介紹了Golang極簡入門教程(三):并發(fā)支持,本文講解了goroutine線程、channel 操作符等內(nèi)容,需要的朋友可以參考下
    2014-10-10
  • Go 修改map slice array元素值操作

    Go 修改map slice array元素值操作

    這篇文章主要介紹了Go 修改map slice array元素值操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • Golang實現(xiàn)常見排序算法的示例代碼

    Golang實現(xiàn)常見排序算法的示例代碼

    現(xiàn)在的面試真的是越來越卷了,算法已經(jīng)成為了面試過程中必不可少的一個環(huán)節(jié),你如果想進稍微好一點的公司,算法是必不可少的一個環(huán)節(jié)。本文為大家準備了Golang實現(xiàn)常見排序算法的示例代碼,需要的可以參考一下
    2022-05-05
  • 淺析Golang中make和new的用法區(qū)別

    淺析Golang中make和new的用法區(qū)別

    在Go語言中,有兩個比較雷同的內(nèi)置函數(shù),分別是new和make方法,二者都可以用來分配內(nèi)存,那他們有什么區(qū)別呢?下面就跟隨小編一起來學(xué)習(xí)一下吧
    2024-02-02

最新評論