自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Go 1.18 新增三大功能之一“工作區(qū)模式”介紹

開發(fā) 前端
本文我們先敘述使用 Go Modules 模式面臨的一些問題,然后介紹 Go v1.18 新增的 Workspaces 模式的使用方式,最后通過示例介紹使用 Workspaces 模式可以解決使用 Go Modules 模式中的問題。

?1.介紹

Go 官方在 Go v1.11 新增 Go Modules 模式,并一直持續(xù)到 Go v1.16,每個版本的 Go Modules 模式都會有一些變化。但是,我們的項目使用 Go Modules 模式時,仍然會遇到一些問題。

直到 Go v1.18 版本新增 Workspaces 模式,解決了 Go Modules 模式的這些問題,本文我們介紹 Workspaces 模式的使用方式。

2.引言

當在項目中需要導(dǎo)入一些私有 Git 倉庫或未發(fā)布到 Git 倉庫的依賴項時,或需要修改三方依賴模塊的代碼時,一般解決方法是將代碼下載到本地,在 go.mod? 文件中使用 Go Modules 模式中的 replace 指令替換為本地目錄路徑。

因為 go.mod? 文件也是和項目一起提交到 Git 倉庫,每個開發(fā)人員的本地目錄路徑可能不一樣,所以,就需要把在遠程倉庫拉取到的 go.mod? 文件中 replace 的目錄路徑手動替換為自己的本地目錄路徑之后,才可以正常使用。

3.使用方式

在介紹 Workspaces 模式的使用方式之前,我們需要先使用 Go Modules 模式創(chuàng)建一個 Go 項目,并且我們的 Go 項目依賴模塊 golang.org/x/example。

創(chuàng)建 Go 項目

# 進入 Home 目錄
cd ~
# 創(chuàng)建工作區(qū)目錄
mkdir workspace
# 進入工作區(qū)目錄
cd workspace
# 創(chuàng)建 Go 項目所在的目錄
mkdir hello
# 進入 Go 項目所在的目錄
cd hello
# 初始化
go mod init github.com/weirubo/hello
# 添加依賴項
go get golang.org/x/example
# 創(chuàng)建 main.go 文件
touch main.go

示例代碼:

package main

import (
"fmt"
"golang.org/x/example/stringutil"
)

func main() {
str := "hello"
reverseStr := stringutil.Reverse(str)
fmt.Println(reverseStr)
}

輸出結(jié)果:

go run main.go
olleh

閱讀上面這段內(nèi)容,是我們已經(jīng)非常熟悉的使用 Go Modules 模式創(chuàng)建 Go 項目的操作步驟,接下來,我們介紹 Workspaces 模式的使用方式。

創(chuàng)建工作區(qū)

# 進入 Home 目錄下的 workspace 目錄
cd ~/workspace
# 初始化工作區(qū)
go work init ./hello

執(zhí)行完以上命令,我們可以發(fā)現(xiàn)在 workspace 目錄下創(chuàng)建了一個 go.work? 文件,查看該文件,我們可以發(fā)現(xiàn)包含兩個指令,分別是 go? 和 use。

go 1.19

use ./hello

其中 go? 指令,是指定使用 Go 的哪個版本編譯項目,類似 go.mod? 文件中的 go 指令。

其中 use? 指令,是指在構(gòu)建項目時,hello 目錄中的模塊是主模塊。

在創(chuàng)建工作區(qū)后,我們進入工作區(qū)目錄,運行 main.go 文件。

cd ~/workspace
go run hello/main.go

輸出結(jié)果:

olleh

但是,如果我們進入 Home? 目錄(工作區(qū)外),運行 main.go 文件。

cd ~
go run workspace/hello/main.go

輸出結(jié)果:

workspace/hello/main.go:5:2: no required module provides package golang.org/x/example/stringutil: go.mod file not found in current directory or any parent directory; see 'go help modules'

我們可以在輸出結(jié)果中發(fā)現(xiàn),Go 找不到項目使用的依賴模塊,原因是我們在工作區(qū)外運行 Go 項目,Go 找不到需要的模塊。

4.使用場景

我們在學(xué)會使用 Workspaces 模式后,使用該模式解決 Part 02 提到的問題。

假如我們想要在 Go 項目的依賴模塊 golang.org/x/example? 新增一個函數(shù) ToUpper。

在 Go 未提供 Workspaces 模式時,我們需要下載依賴項到本地,然后修改下載到本地的依賴項文件。

cd ~/workspace/hello
git clone https://go.googlesource.com/example
# 編輯 go.mod
go mod edit -replace golang.org/x/example@v0.0.0-20220412213650-2e68773dfca0=/Users/frank/workspace/hello/example

此時,我們就可以修改我們下載到本地的依賴項文件 /Users/frank/workspace/hello/example/stringutil/reverse.go?,新增函數(shù) ToUpper。

func ToUpper(s string) string {
r := []rune(s)
for i := range r {
r[i] = unicode.ToUpper(r[i])
}
return string(r)
}

然后,我們可以在 main.go 文件中使用該函數(shù)。

...
toUpperStr := stringutil.ToUpper(str)
fmt.Println(toUpperStr)
...

輸出結(jié)果:

cd ~/workspace/hello
go run main.go
HELLO

使用 Go Modules 模式的 replace 指令,雖然可以實現(xiàn)我們的需求,但是,當該項目代碼在其他人電腦上運行時,必須先手動修改為自己的目錄路徑,才可以正常運行。

使用 Workspaces 模式

我們使用 Go 1.18 提供的 Workspaces 模式,實現(xiàn)我們的需求。

將下載到本地的依賴模塊 example 添加到工作區(qū):

cd ~/workspace
go work use ./hello/example

我們使用 go work use? 命令將 example? 模塊添加到工作區(qū),我們就可以使用我們下載到本地的依賴模塊 example? 的代碼,而不再使用 GOMODCACHE? 中的 example 模塊的代碼。

我們項目組成員只需維護自己本地的工作區(qū),不必再手動修改 go.mod? 文件中 replace 指令中的本地目錄路徑。

5.總結(jié)

本文我們先敘述使用 Go Modules 模式面臨的一些問題,然后介紹 Go v1.18 新增的 Workspaces 模式的使用方式,最后通過示例介紹使用 Workspaces 模式可以解決使用 Go Modules 模式中的問題。

需要注意的是,go.work? 文件不要推送到遠程倉庫,我們可以將其添加到 .gitignore 文件中。

我們在文中使用到的命令是 go work init? 和 go work use?,此外,還有其他命令,感興趣的讀者朋友們可以執(zhí)行命令 go help work 了解更多。

責(zé)任編輯:武曉燕 來源: Golang語言開發(fā)棧
相關(guān)推薦

2022-12-14 23:05:29

Go模糊測試

2022-01-19 08:51:00

Module工作區(qū)Go

2022-07-12 06:17:43

GoogleGolang開發(fā)工作

2023-09-26 01:21:34

2013-07-25 09:05:11

谷歌Android4.3

2019-04-29 13:35:32

iOS 13蘋果iPad

2022-01-10 11:33:17

Go測試軟件

2010-12-16 20:54:07

Windows Azu

2009-09-10 16:01:26

介紹LINQ

2022-01-26 09:02:57

GoCut方法

2012-07-27 14:45:12

傲游瀏覽器傲游瀏覽器

2012-08-10 10:59:18

IP-guard信息泄露信息防泄露

2010-03-04 13:36:55

openSUSE

2009-11-05 10:29:14

Visual Stud

2021-09-27 22:29:39

iOS微信系統(tǒng)

2022-09-08 17:16:10

iOS蘋果功能

2016-06-13 13:53:24

iosgif蘋果

2011-05-24 15:12:15

Android

2012-10-16 09:25:33

Windows 8

2018-04-03 12:26:14

點贊
收藏

51CTO技術(shù)棧公眾號