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

go get 和 go install 對比介紹

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

一、問題背景

安裝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:用于從遠(yuǎn)程代碼存儲庫(如 GitHub)中下載或更新 Go 代碼包。它會下載代碼包并將其存儲在 $GOPATH/src 目錄下對應(yīng)的位置,并編譯代碼包中的程序和庫。如果目標(biāo)包之前已經(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 進(jìn)行比較:

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

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

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

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

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

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

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

(三)為什么要用 go install

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

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

到此這篇關(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)是在編譯過程中自動進(jìn)行的一類基本優(yōu)化之一,文章圍繞主題展開更多詳細(xì)介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-06-06
  • golang類型轉(zhuǎn)換之interface轉(zhuǎn)字符串string簡單示例

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

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

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

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

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

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

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

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

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

    這篇文章主要介紹了Go到底能不能實(shí)現(xiàn)安全的雙檢鎖,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(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實(shí)現(xiàn)常見排序算法的示例代碼

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

    現(xiàn)在的面試真的是越來越卷了,算法已經(jīng)成為了面試過程中必不可少的一個環(huán)節(jié),你如果想進(jìn)稍微好一點(diǎn)的公司,算法是必不可少的一個環(huán)節(jié)。本文為大家準(zhǔn)備了Golang實(shí)現(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

最新評論