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

Go基礎(chǔ)教程之環(huán)境搭建及常用命令

 更新時(shí)間:2025年03月03日 10:42:17   作者:愛吃牛肉的大老虎  
這篇文章主要介紹了Go基礎(chǔ)教程之環(huán)境搭建及常用命令的相關(guān)資料,包括Go語言簡介、環(huán)境配置、包管理工具GoModules以及常用命令的全面介紹,需要的朋友可以參考下

1 Go

1.1 簡介

1.1.1 定義

Go語言,也被稱為Golang,是一種由Google開發(fā)的靜態(tài)類型、編譯型編程語言,是一個(gè)開源的編程語言,它能讓構(gòu)造簡單、可靠且高效的軟件變得容易。
Go是從2007年末由Robert Griesemer, Rob Pike, Ken Thompson主持開發(fā),后來還加入了Ian Lance Taylor, Russ Cox等人,并最終于2009年11月開源,在2012年早些時(shí)候發(fā)布了Go 1穩(wěn)定版本。現(xiàn)在Go的開發(fā)已經(jīng)是完全開放的,并且擁有一個(gè)活躍的社區(qū)。

官方網(wǎng)站:https://go.dev/

中文網(wǎng)站:https://studygolang.com/

1.1.2 特點(diǎn)用途

Go語言的特點(diǎn):

  • 編譯型語言:
    Go語言通過編譯生成機(jī)器碼,因此具有較高的運(yùn)行效率,接近C語言的性能。
  • 并發(fā)編程支持:
    Go語言內(nèi)置了輕量級的并發(fā)支持,通過goroutine和channel實(shí)現(xiàn)高效的并發(fā)編程。這使得Go語言非常適合開發(fā)高并發(fā)應(yīng)用,如網(wǎng)絡(luò)服務(wù)器、分布式系統(tǒng)等。
  • 簡潔的語法:
    Go語言的語法簡潔明了,易于學(xué)習(xí)和使用,降低了編程的復(fù)雜性。
  • 自動(dòng)垃圾回收:
    Go語言具有自動(dòng)垃圾回收機(jī)制,可以有效避免內(nèi)存泄漏問題,減輕了開發(fā)者對內(nèi)存管理的負(fù)擔(dān)。
  • 跨平臺支持:
    編譯后的Go程序可以在不同操作系統(tǒng)上運(yùn)行,如Windows、Linux、macOS等。
  • 標(biāo)準(zhǔn)庫豐富:
    Go語言提供了豐富的標(biāo)準(zhǔn)庫,包含了許多實(shí)用的工具和功能,如網(wǎng)絡(luò)編程、文件操作、加密等,方便開發(fā)者快速構(gòu)建軟件系統(tǒng)。
  • 工具鏈完善:
    Go語言擁有一個(gè)完善的工具鏈,包括代碼格式化工具(gofmt)、性能分析工具(go tool pprof)、測試工具(go test)等,這些工具有助于提高開發(fā)效率和代碼質(zhì)量。

Go語言的用途:

  • 服務(wù)器端開發(fā):
    Go語言非常適合用于開發(fā)高性能的Web服務(wù)器和API服務(wù)。使用Go語言開發(fā)的Gin和Beego等框架,能夠高效地處理HTTP請求。
  • 云計(jì)算:
    Go語言是云計(jì)算領(lǐng)域的重要編程語言。許多云服務(wù)、云應(yīng)用程序都是用Go語言開發(fā)的。例如,Google的Kubernetes容器編排系統(tǒng)和Docker容器化平臺都是用Go語言編寫的。
  • 大數(shù)據(jù)處理:
    Go語言在處理大規(guī)模數(shù)據(jù)時(shí)表現(xiàn)出色。得益于其高效的并發(fā)支持,Go語言能夠顯著提升數(shù)據(jù)處理性能。
  • 系統(tǒng)編程:
    Go語言也可以用于開發(fā)操作系統(tǒng)、網(wǎng)絡(luò)工具等系統(tǒng)軟件。
  • 網(wǎng)絡(luò)編程:
    Go語言提供了簡潔而強(qiáng)大的網(wǎng)絡(luò)編程庫,使得開發(fā)網(wǎng)絡(luò)應(yīng)用程序變得簡單和高效。
  • 靜態(tài)分析工具:
    Go語言的簡潔性和靈活性使其成為開發(fā)靜態(tài)分析工具的理想選擇。
  • 命令行工具:
    許多高效的命令行工具都是用Go語言編寫的。
  • 物聯(lián)網(wǎng)開發(fā):
    Go語言具有運(yùn)行效率高、并發(fā)編程支持強(qiáng)等特點(diǎn),非常適合物聯(lián)網(wǎng)開發(fā)。
  • 區(qū)塊鏈開發(fā):
    Go語言的安全性和高效性使其成為區(qū)塊鏈開發(fā)的首選語言之一。以太坊、Hyperledger Fabric等知名區(qū)塊鏈平臺均使用Go語言作為核心開發(fā)語言。

1.2 環(huán)境配置

1.2.1 下載安裝

訪問國內(nèi)Go語言網(wǎng)站:Go語言中文網(wǎng)

1.2.2 環(huán)境配置

1.2.2.1 添加環(huán)境變量

win+e打開,右擊此電腦,選擇屬性,搜索查看高級系統(tǒng)設(shè)置,點(diǎn)擊環(huán)境變量

添加變量:

  • 設(shè)置 GOROOT(安裝路徑):
    點(diǎn)擊系統(tǒng)變量下的新建
    名稱:GOROOT,值:C:\Program Files\Go(Go 的安裝路徑
  • 設(shè)置 GOPATH(項(xiàng)目路徑):
    GOPATH 是 Go 項(xiàng)目工作目錄新建一個(gè)目錄,例如 D:\GoWorkspace。
    在系統(tǒng)變量中添加:
    名稱:GOPATH,值:D:\GoWorkspace。
  • 添加 PATH
    找到系統(tǒng)變量中的 Path,點(diǎn)擊編輯。
    添加以下路徑:
    %GOROOT%\binGo 的可執(zhí)行文件路徑)。
    %GOPATH%\binGOPATH 的 bin 目錄)。

1.2.2.2 各個(gè)環(huán)境變量理解

  • GOROOT 作用
    GOROOT 是 Go 的安裝路徑,用于告訴 Go 工具鏈(如 go build、go run)Go 的核心庫在哪里。
    默認(rèn)情況下,Go 的安裝程序會(huì)自動(dòng)檢測其安裝路徑并設(shè)置好 GOROOT,因此 通常不需要手動(dòng)添加 GOROOT 環(huán)境變量。
    那么就,是否需要在環(huán)境變量中手動(dòng)添加?如果GOROOT 是 Go 的默認(rèn)路徑(如 C:\Program Files\Go),且未修改過安裝路徑,無需手動(dòng)添加 GOROOT。但是,如果 Go 安裝到了非默認(rèn)路徑,或者 Go 工具鏈出現(xiàn)了找不到標(biāo)準(zhǔn)庫的問題,那么可以手動(dòng)設(shè)置 GOROOT。
  • GOPATH 作用
    GOPATH 是 Go 項(xiàng)目的工作空間目錄,用于存儲源碼、依賴包和生成的二進(jìn)制文件。
    它是 Go 1.x 的工作機(jī)制(在 Go Modules 之前非常重要),用來組織代碼結(jié)構(gòu)。
    • GOPATH 必要性
      如果使用的是 Go Modules(現(xiàn)代 Go 的推薦方式),GOPATH 的作用大大降低,但仍有以下場景需要:
      • 編譯后的可執(zhí)行文件會(huì)存放在 GOPATH/bin 中。
      • 某些工具(如 go install)仍然默認(rèn)依賴 GOPATH。
      • 在不使用 Go Modules 的老項(xiàng)目中,GOPATH 是必需的。
    • 為什么還要添加 GOPATH/bin 到 PATH當(dāng)用 go install 安裝工具(如 golangci-lint、dlv)時(shí),生成的可執(zhí)行文件會(huì)存放到 GOPATH/bin 下。
      將 GOPATH/bin 添加到 Path 中,方便在全局運(yùn)行這些工具。
    • 是否需要添加 GOPATH如果項(xiàng)目完全基于 Go Modules,可以不顯式配置 GOPATH如果需要兼容老項(xiàng)目,或安裝工具包,建議配置。
    • 是否需要添加 GOPATH/bin 到 PATH必須添加,否則用 go install 安裝的工具無法直接在命令行中使用。
  • 實(shí)際建議
    根據(jù)現(xiàn)代 Go 的實(shí)踐,以下是建議的簡化配置:
    • GOROOT:不需要手動(dòng)設(shè)置(如果使用默認(rèn)安裝路徑)。
    • GOPATH:對于大多數(shù)現(xiàn)代項(xiàng)目(使用 Go Modules),只需設(shè)置一個(gè)工作目錄(如 D:\GoWorkspace)作為 GOPATH。將 GOPATH/bin 添加到系統(tǒng) PATH,方便全局使用工具。

1.2.3 驗(yàn)證環(huán)境變量

打開新的命令行窗口,運(yùn)行以下命令:

go env

確保輸出的 GOROOT 和 GOPATH 正確。

1.3 包管理工具 Go Modules

1.3.1 開啟使用

Go Modules 是 Go 語言推薦的依賴管理方式。
啟用 Go Modules:

go env -w GO111MODULE=on

現(xiàn)在的新版本 Go(1.16 及更高版本)默認(rèn)已經(jīng)啟用了 Go Modules,因此在一般情況下,不需要手動(dòng)設(shè)置 GO111MODULE

檢查是否成功:

go env | findstr GO111MODULE

初始化項(xiàng)目, 在項(xiàng)目目錄下運(yùn)行:

go mod init <模塊名稱>

例如,創(chuàng)建一個(gè)模塊名稱為 example.com/mymodule 的項(xiàng)目:

go mod init example.com/mymodule

這會(huì)生成一個(gè) go.mod 文件,內(nèi)容類似如下:

module example.com/mymodule

go 1.20

運(yùn)行項(xiàng)目:

go run .

1.3.2 添加依賴包

當(dāng)在代碼中引入第三方包時(shí)(例如 github.com/gin-gonic/gin),Go 會(huì)自動(dòng)解析并下載依賴包。

例如,編寫代碼:

package main

import (
    "github.com/gin-gonic/gin"
)

func main() {
    r := gin.Default()
    r.GET("/", func(c *gin.Context) {
        c.JSON(200, gin.H{"message": "Hello, World!"})
    })
    r.Run()
}

運(yùn)行:

go mod tidy

這會(huì)下載所需的依賴包并更新 go.mod 和 go.sum 文件。
go.mod 記錄了直接依賴go.sum 記錄了依賴的校驗(yàn)信息。

1.3.3 配置國內(nèi)包源

由于網(wǎng)絡(luò)原因,下載依賴包時(shí)可能會(huì)很慢,建議更換為國內(nèi)包源。

1.3.3.1 通過 go env 配置

設(shè)置 Go Modules 使用國內(nèi)代理:

go env -w GOPROXY=https://goproxy.cn,https://mirrors.aliyun.com,direct

驗(yàn)證配置:

go env | findstr GOPROXY

輸出類似:

GOPROXY=https://goproxy.cn,https://mirrors.aliyun.com,direct

1.3.3.2 修改環(huán)境變量

如果不想每次都設(shè)置,可以直接在系統(tǒng)環(huán)境變量中添加 GOPROXY打開環(huán)境變量設(shè)置,添加一個(gè)新變量:

  • 名稱:GOPROXY
  • 值:https://goproxy.cn,https://mirrors.aliyun.com,direct

GOPROXY 可以配置多個(gè)代理地址,并用逗號(,)分隔。Go 會(huì)按照順序依次嘗試這些代理,直到找到一個(gè)可用的
這里加 direct 表示如果在指定的代理服務(wù)器上找不到模塊,Go 會(huì)直接嘗試從模塊源(如 Git 倉庫)下載依賴。這是一種后備機(jī)制,確保即使代理不可用,依賴仍有機(jī)會(huì)通過源下載。

1.3.4 更新和管理依賴

  • 下載和清理依賴:
    go mod tidy:這會(huì)添加缺失的依賴,并移除未使用的依賴。
  • 查看依賴包:
    go list -m all
  • 升級依賴:
    go get -u <包名>例如,升級 Gin:
    go get -u github.com/gin-gonic/gin
  • 指定依賴版本:
    編輯 go.mod 文件,直接指定版本:
    require github.com/gin-gonic/gin v1.9.0然后運(yùn)行:go mod tidy

1.3.5 沒有域名時(shí)項(xiàng)目操作

如果沒有域名,又想避免將來遷移麻煩,可以使用以下方式:
本地開發(fā)時(shí)使用簡單名稱:

go mod init myproject

以后需要發(fā)布時(shí)再修改: 修改 go.mod 文件的 module 字段即可,比如:

module github.com/username/myproject

結(jié)合私有模塊代理: 如果項(xiàng)目是私有的,可以使用 GOPRIVATE 指定私有模塊地址:

go env -w GOPRIVATE=company.com

1.3.6 go.mod

1.3.6.1 文件介紹

go.mod 是 Go Modules 的核心文件,用來定義模塊及其依賴項(xiàng)。
一個(gè)典型的 go.mod 文件可能包含以下內(nèi)容:

module example.com/mymodule

go 1.20

require (
    github.com/gin-gonic/gin v1.9.0
    golang.org/x/net v0.5.0
)

各部分含義:

  • module: 定義模塊的名稱(通常是項(xiàng)目的根路徑)。模塊名稱決定了這個(gè)項(xiàng)目在其他地方引入時(shí)的路徑。
  • go: 指定最低支持的 Go 版本。例如,go 1.20 表示此模塊要求 Go 1.20 或更高版本。
  • require: 列出此模塊的直接依賴包及其版本。
  • replace(可選): 用于替換依賴包的路徑或版本,常用于本地開發(fā)或依賴修復(fù)。
    replace github.com/example/foo => ../local/foo
  • exclude(可選): 指定不允許使用的模塊版本。
    exclude github.com/example/foo v1.2.3

1.3.6.2 操作 go.mod 的常用命令

初始化模塊:

go mod init <module-name>

添加依賴:

go get <package>@<version>

自動(dòng)管理依賴(清理未使用的依賴,并自動(dòng)添加缺失的依賴):

go mod tidy

1.3.7 go.sum

1.3.7.1 文件介紹

go.sum 是 go.mod 的配套文件,用于記錄模塊依賴的校驗(yàn)信息,確保依賴的完整性一致性。
作用:

  • 完整性驗(yàn)證: 在拉取依賴包時(shí),Go 會(huì)校驗(yàn)包的實(shí)際內(nèi)容是否與 go.sum 文件中的哈希值一致,防止依賴被篡改。
  • 緩存優(yōu)化: 記錄的校驗(yàn)值使得 Go 工具可以高效地在本地或遠(yuǎn)程緩存中找到匹配的依賴包。

一個(gè)典型的 go.sum 文件內(nèi)容如下:

github.com/gin-gonic/gin v1.9.0 h1:4Fq34...
github.com/gin-gonic/gin v1.9.0/go.mod h1:kf4B...
golang.org/x/net v0.5.0 h1:3jHk...
golang.org/x/net v0.5.0/go.mod h1:Lsk4...

各部分含義:

  • 每一行記錄一個(gè)依賴包的校驗(yàn)信息。
  • 每個(gè)依賴包有兩類記錄:
    • <模塊名> <版本> <校驗(yàn)值>:依賴包的完整內(nèi)容校驗(yàn)值。
    • <模塊名> <版本>/go.mod <校驗(yàn)值>:依賴包的 go.mod 文件校驗(yàn)值。

1.3.7.2 管理 go.sum 文件

  • 自動(dòng)生成: 當(dāng)運(yùn)行 go mod tidy 或使用依賴時(shí),go.sum 會(huì)自動(dòng)更新。
  • 不要手動(dòng)修改: go.sum 是由 Go 工具自動(dòng)維護(hù)的,手動(dòng)修改可能導(dǎo)致校驗(yàn)錯(cuò)誤。

1.4 常用命令

1.4.1 Go Modules 常用命令

1.4.1.1 模塊初始化

go mod init <module-name>

初始化一個(gè)新的模塊。

會(huì)在當(dāng)前目錄下生成 go.mod 文件。

示例:

go mod init example.com/mymodule

1.4.1.2 添加依賴

go get <package>@<version>

下載指定的依賴包并更新 go.mod 和 go.sum 文件。

@<version> 可選,不指定時(shí)默認(rèn)獲取最新版本。

示例:

go get github.com/gin-gonic/gin@v1.9.0

如果省略版本:

go get github.com/gin-gonic/gin

會(huì)安裝最新穩(wěn)定版。

1.4.1.3 移除未使用的依賴

go mod tidy

自動(dòng)清理未使用的依賴包,并下載缺失的依賴。
同時(shí)更新 go.mod 和 go.sum 文件。

1.4.1.4 下載所有依賴

go mod download

下載 go.mod 文件中列出的所有依賴包到本地模塊緩存。

1.4.1.5 查看依賴列表

go list -m all

列出當(dāng)前模塊的所有依賴及其版本(包括直接和間接依賴)。

1.4.1.6 檢查依賴更新

go list -u -m all

列出所有依賴,并顯示可以更新的版本(如果有)。

1.4.1.7 替換依賴

在 go.mod 文件中添加 replace 指令,替換依賴的路徑或版本。

replace github.com/example/foo => ../local/foo

替換為本地路徑版本。

更新依賴后,運(yùn)行:

go mod tidy

1.4.1.8 移除模塊中的依賴

手動(dòng)刪除代碼中不需要的依賴后運(yùn)行:

go mod tidy

這會(huì)從 go.mod 中移除未使用的依賴。

1.4.1.9 驗(yàn)證依賴

go mod verify

驗(yàn)證所有依賴的校驗(yàn)值是否與 go.sum 文件一致,用于檢查依賴包是否被篡改。

1.4.1.10 查看模塊路徑

go env GOMOD

輸出當(dāng)前模塊的 go.mod 文件路徑。如果沒有使用 Go Modules,輸出為空。

1.4.2 開發(fā)中的常用命令

1.4.2.1 編譯并運(yùn)行項(xiàng)目

go run .

在當(dāng)前模塊中運(yùn)行主程序文件。

1.4.2.2 構(gòu)建可執(zhí)行文件

go build

在當(dāng)前目錄下生成可執(zhí)行文件。

使用 Go Modules 時(shí),會(huì)自動(dòng)管理依賴。

1.4.2.3 安裝依賴工具

go install <package>

將指定的模塊安裝到 GOPATH/bin 或配置的 GOBIN 目錄下,其的核心功能是 編譯并安裝 Go 工具或程序,而不是直接管理依賴。具體來說:將指定的模塊或包編譯成可執(zhí)行文件,并安裝到 GOBIN 或 GOPATH/bin 目錄下。

1.4.2.4 清理模塊緩存

go clean -modcache

清理本地模塊緩存(默認(rèn)存儲在 ~/.cache/go-build)。

1.4.3 依賴調(diào)試與版本控制

1.4.3.1 強(qiáng)制使用特定版本

go get <package>@v1.2.3

強(qiáng)制將依賴包的版本降級或升級到指定版本。

1.4.3.2 顯示依賴關(guān)系

go mod graph

生成依賴關(guān)系的圖形表示(文本形式)。

總結(jié)

到此這篇關(guān)于Go基礎(chǔ)教程之環(huán)境搭建及常用命令的文章就介紹到這了,更多相關(guān)Go環(huán)境搭建內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Go json omitempty如何實(shí)現(xiàn)可選屬性

    Go json omitempty如何實(shí)現(xiàn)可選屬性

    在Go語言中,使用`omitempty`可以幫助我們在進(jìn)行JSON序列化和反序列化時(shí),忽略結(jié)構(gòu)體中的零值或空值,本文介紹了如何通過將字段類型改為指針類型,并在結(jié)構(gòu)體的JSON標(biāo)簽中添加`omitempty`來實(shí)現(xiàn)這一功能,例如,將float32修改為*float32
    2024-09-09
  • Go+Redis實(shí)現(xiàn)常見限流算法的示例代碼

    Go+Redis實(shí)現(xiàn)常見限流算法的示例代碼

    限流是項(xiàng)目中經(jīng)常需要使用到的一種工具,一般用于限制用戶的請求的頻率,也可以避免瞬間流量過大導(dǎo)致系統(tǒng)崩潰,或者穩(wěn)定消息處理速率。這篇文章主要是使用Go+Redis實(shí)現(xiàn)常見的限流算法,需要的可以參考一下
    2023-04-04
  • 關(guān)于Golang的Map的線程安全問題的解決方案

    關(guān)于Golang的Map的線程安全問題的解決方案

    在?Golang?編程中,map?是一種常用的數(shù)據(jù)結(jié)構(gòu),用于存儲鍵值對,然而,Golang?的?map?在并發(fā)訪問時(shí)是線程不安全的,本文將詳細(xì)介紹?Golang?中?map?的線程不安全性,并提供一些解決方案,幫助開發(fā)者在并發(fā)編程中正確使用?map,需要的朋友可以參考下
    2024-11-11
  • Golang時(shí)間處理中容易踩的坑分析解決

    Golang時(shí)間處理中容易踩的坑分析解決

    這篇文章主要為大家介紹了Golang時(shí)間處理中容易踩的坑分析解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • 一文初探Go語言中的reflect反射包

    一文初探Go語言中的reflect反射包

    這篇文章主要和大家分享一下Go語言中的reflect反射包,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)Go語言有一定的幫助,需要的小伙伴可以參考一下
    2022-12-12
  • Go語言panic和recover的用法實(shí)例

    Go語言panic和recover的用法實(shí)例

    panic()和recover()是Go語言中用于處理錯(cuò)誤的兩個(gè)重要函數(shù),本文主要介紹了Go語言panic和recover的用法實(shí)例,panic()用于中止程序并引發(fā)panic,而recover()用于捕獲panic并恢復(fù)程序的執(zhí)行,感興趣的可以了解一下
    2024-01-01
  • 提高golang源碼閱讀效率的六個(gè)高級技巧

    提高golang源碼閱讀效率的六個(gè)高級技巧

    隨著業(yè)務(wù)的發(fā)展,自己對代碼的審美的改變,我們不斷的迭代這些代碼,代碼量可以說是與日俱增,代碼的某些結(jié)構(gòu)也會(huì)發(fā)生大大小的改變,這些都要求我們在閱讀代碼的時(shí)候,需要更快的效率和技巧
    2024-01-01
  • go單例實(shí)現(xiàn)雙重檢測是否安全的示例代碼

    go單例實(shí)現(xiàn)雙重檢測是否安全的示例代碼

    這篇文章主要介紹了go單例實(shí)現(xiàn)雙重檢測是否安全,本文給大家分享雙重檢驗(yàn)示例代碼,代碼簡單易懂,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-03-03
  • Go語言實(shí)現(xiàn)定時(shí)器的原理及使用詳解

    Go語言實(shí)現(xiàn)定時(shí)器的原理及使用詳解

    這篇文章主要為大家詳細(xì)介紹了Go語言實(shí)現(xiàn)定時(shí)器的兩種方法:一次性定時(shí)器(Timer)和周期性定時(shí)器(Ticker),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2022-12-12
  • golang協(xié)程池模擬實(shí)現(xiàn)群發(fā)郵件功能

    golang協(xié)程池模擬實(shí)現(xiàn)群發(fā)郵件功能

    這篇文章主要介紹了golang協(xié)程池模擬實(shí)現(xiàn)群發(fā)郵件功能,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-05-05

最新評論