1、解壓壓縮包到go工作目錄,如解壓到E:\opensource\go\go,解壓后的目錄結(jié)構(gòu)如下:
創(chuàng)新互聯(lián)公司專注于焉耆網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠為您提供焉耆營銷型網(wǎng)站建設(shè),焉耆網(wǎng)站制作、焉耆網(wǎng)頁設(shè)計(jì)、焉耆網(wǎng)站官網(wǎng)定制、小程序設(shè)計(jì)服務(wù),打造焉耆網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供焉耆網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。
E:\opensource\go\go
├─api
├─bin
│ ├─go.exe
│ ├─godoc.exe
│ └─gofmt.exe
├─doc
├─include
├─lib
├─misc
├─pkg
├─src
└─test
2、增加環(huán)境變量GOROOT,取值為上面的go工作目錄
3、Path環(huán)境變量中添加";%GOROOT%\bin",以便能夠直接調(diào)用go命令來編譯go代碼,至此go編譯環(huán)境就配置好了
注:如果不想手動(dòng)設(shè)置系統(tǒng)環(huán)境變量,也可下載go啟動(dòng)環(huán)境批處理附件,
修改goenv.bat文件中的GOROOT值為上面的go工作目錄后直接雙擊該bat文件,go編譯環(huán)境變量即設(shè)置完成。
4、測試go編譯環(huán)境,啟動(dòng)一個(gè)cmd窗口,直接輸入go,看到下面的提示就是搭建成功了
E:\opensource\go\gogo
Go is a tool for managing Go source code.
Usage:
go command [arguments]
The commands are:
build compile packages and dependencies
clean remove object files
doc run godoc on package sources
env print Go environment information
fix run go tool fix on packages
fmt run gofmt on package sources
get download and install packages and dependencies
install compile and install packages and dependencies
list list packages
run compile and run Go program
test test packages
tool run specified go tool
version print Go version
vet run go tool vet on packages
Use "go help [command]" for more information about a command.
Additional help topics:
gopath GOPATH environment variable
packages description of package lists
remote remote import path syntax
testflag description of testing flags
testfunc description of testing functions
Use "go help [topic]" for more information about that topic.
5、編譯helloworld測試程序,go語言包中test目錄帶有helloworld.go測試程序,源碼見"附一 helloworld.go",
直接調(diào)用"go build helloworld.go"就生成了"helloworld.exe"可執(zhí)行程序,運(yùn)行一下這個(gè)程序看到了我們期望的hello,wolrd。
E:\opensource\go\go\testgo build helloworld.go
E:\opensource\go\go\testhelloworld.exe
hello, world
E:\opensource\go\go\test
附一 helloworld.go
// cmpout
// Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
// Test that we can do page 1 of the C book.
package main
func main() {
print("hello, world\n")
}
GOPATH是你的工作目錄,對(duì)于項(xiàng)目文件而言,項(xiàng)目的結(jié)構(gòu)和你的工作目錄的結(jié)構(gòu)有很大關(guān)系。
GOPATH路徑下默認(rèn)是有以下三個(gè)目錄的,
1.src 存放源代碼(比如:.go .c .h .s等)
2.pkg 編譯后生成的文件(比如:.a)
3.bin 編譯后生成的可執(zhí)行文件(為了方便,可以把此目錄加入到 $PATH 變量中,如果有多個(gè)gopath,那么使用${GOPATH//://bin:}/bin添加所有的bin目錄)
本教程介紹 Go 中多模塊工作區(qū)的基礎(chǔ)知識(shí)。使用多模塊工作區(qū),您可以告訴 Go 命令您正在同時(shí)在多個(gè)模塊中編寫代碼,并輕松地在這些模塊中構(gòu)建和運(yùn)行代碼。
在本教程中,您將在共享的多模塊工作區(qū)中創(chuàng)建兩個(gè)模塊,對(duì)這些模塊進(jìn)行更改,并在構(gòu)建中查看這些更改的結(jié)果。
本教程需要 go1.18 或更高版本。使用go.dev/dl中的鏈接確保您已在 Go 1.18 或更高版本中安裝了 Go 。
首先,為您要編寫的代碼創(chuàng)建一個(gè)模塊。
1、打開命令提示符并切換到您的主目錄。
在 Linux 或 Mac 上:
在 Windows 上:
2、在命令提示符下,為您的代碼創(chuàng)建一個(gè)名為工作區(qū)的目錄。
3、初始化模塊
我們的示例將創(chuàng)建一個(gè)hello依賴于 golang.org/x/example 模塊的新模塊。
創(chuàng)建你好模塊:
使用 . 添加對(duì) golang.org/x/example 模塊的依賴項(xiàng)go get。
在 hello 目錄下創(chuàng)建 hello.go,內(nèi)容如下:
現(xiàn)在,運(yùn)行 hello 程序:
在這一步中,我們將創(chuàng)建一個(gè)go.work文件來指定模塊的工作區(qū)。
在workspace目錄中,運(yùn)行:
該go work init命令告訴為包含目錄中模塊的工作空間go創(chuàng)建一個(gè)文件 。go.work./hello
該go命令生成一個(gè)go.work如下所示的文件:
該go.work文件的語法與go.mod相同。
該go指令告訴 Go 應(yīng)該使用哪個(gè)版本的 Go 來解釋文件。它類似于文件中的go指令go.mod 。
該use指令告訴 Go在進(jìn)行構(gòu)建時(shí)hello目錄中的模塊應(yīng)該是主模塊。
所以在模塊的任何子目錄中workspace都會(huì)被激活。
2、運(yùn)行工作區(qū)目錄下的程序
在workspace目錄中,運(yùn)行:
Go 命令包括工作區(qū)中的所有模塊作為主模塊。這允許我們?cè)谀K中引用一個(gè)包,即使在模塊之外。在模塊或工作區(qū)之外運(yùn)行g(shù)o run命令會(huì)導(dǎo)致錯(cuò)誤,因?yàn)樵揼o命令不知道要使用哪些模塊。
接下來,我們將golang.org/x/example模塊的本地副本添加到工作區(qū)。然后,我們將向stringutil包中添加一個(gè)新函數(shù),我們可以使用它來代替Reverse.
在這一步中,我們將下載包含該模塊的 Git 存儲(chǔ)庫的副本golang.org/x/example,將其添加到工作區(qū),然后向其中添加一個(gè)我們將從 hello 程序中使用的新函數(shù)。
1、克隆存儲(chǔ)庫
在工作區(qū)目錄中,運(yùn)行g(shù)it命令來克隆存儲(chǔ)庫:
2、將模塊添加到工作區(qū)
該go work use命令將一個(gè)新模塊添加到 go.work 文件中。它現(xiàn)在看起來像這樣:
該模塊現(xiàn)在包括example.com/hello模塊和 `golang.org/x/example 模塊。
這將允許我們使用我們將在模塊副本中編寫的新代碼,而不是使用命令stringutil下載的模塊緩存中的模塊版本。
3、添加新功能。
我們將向golang.org/x/example/stringutil包中添加一個(gè)新函數(shù)以將字符串大寫。
將新文件夾添加到workspace/example/stringutil包含以下內(nèi)容的目錄:
4、修改hello程序以使用該功能。
修改workspace/hello/hello.go的內(nèi)容以包含以下內(nèi)容:
從工作區(qū)目錄,運(yùn)行
Go 命令在go.work文件指定的hello目錄中查找命令行中指定的example.com/hello模塊 ,同樣使用go.work文件解析導(dǎo)入golang.org/x/example。
go.work可以用來代替添加replace 指令以跨多個(gè)模塊工作。
由于這兩個(gè)模塊在同一個(gè)工作區(qū)中,因此很容易在一個(gè)模塊中進(jìn)行更改并在另一個(gè)模塊中使用它。
現(xiàn)在,要正確發(fā)布這些模塊,我們需要發(fā)布golang.org/x/example 模塊,例如在v0.1.0. 這通常通過在模塊的版本控制存儲(chǔ)庫上標(biāo)記提交來完成。發(fā)布完成后,我們可以增加對(duì) golang.org/x/example模塊的要求hello/go.mod:
這樣,該go命令可以正確解析工作區(qū)之外的模塊。
把文件放在~/.bash_profile 或者/etc/profile
GOROOT go語言當(dāng)前安裝的目錄 例如:/user/local/go
GOPATH go語言的工作區(qū)集合 多個(gè) mac 或 linux : window ;
GOBIN 存放go程序的可執(zhí)行文件的目錄
PATH 方便go語言命令和go程序的可執(zhí)行文件,需要追加其值
環(huán)境變量一定要追加 PATH="$PATH:$GOROOT/bin:$GOBIN"
source ~/.bash_profile 立即生效使用
1、下載go的zip文件。并且一定要把文件解壓到c:\go目錄下。
2、配置windows的高級(jí)環(huán)境變量。包括:GOROOT、GOOS、GOBIN、GOARCH。并且在path變量里面把c:\go\bin加入。以便可以在命令行直接運(yùn)行g(shù)o命令。
舉例:我的機(jī)器:
GOPATH= c:\go;c:\go\src;F:\workspace\goSample01;
GOBIN=c:\go\bin;F:\workspace\goSample01\bin;
其中,c:\go是go的安裝路徑;
F:\workspace\goSample01是我寫的go語言項(xiàng)目的工程目錄;
F:\workspace\goSample01\bin是go語言項(xiàng)目的工程目錄下的可執(zhí)行文件路徑;
3、在完成環(huán)境變量配置后,打開一個(gè)命令行窗口,直接輸入go,然后回車,看看是否出現(xiàn)go的幫助信息。如果出現(xiàn),那么go的基本環(huán)境就OK了。
注意:這個(gè)基本環(huán)境不包含開發(fā)工具,也不能直接編譯帶C代碼的go程序。
4、
(可選)為了支持Import遠(yuǎn)程包,最好裝個(gè)gomingw。下載地址:
/downloads/list。如果下的是壓縮包,請(qǐng)把它解壓到C盤。例如,C:\gowin-env。里面有個(gè)Console.bat是以后使用go
get的環(huán)境。舉例:有個(gè)文件a.go,里面import(
"fmt"
"github.com/astaxie/beedb"
_ "github.com/ziutek/mymysql/godrv"
為了編譯該a.go文件,需要啟動(dòng)Console.bat,然后在該命令行窗口,進(jìn)入c:\go\src目錄下,執(zhí)行g(shù)o getgithub.com/astaxie/beedb
Go get github.com/ziutek/mymysql/godrv .
Go會(huì)自動(dòng)下載該遠(yuǎn)程包并編譯和安裝這些包。
配置goclipse(可選)
(如果不喜歡eclipse開發(fā)工具,請(qǐng)?zhí)^這個(gè)配置。)
1、下載并安裝goclipse插件。Goclipse是go語言for eclipse的插件,下載地址:
2、啟動(dòng)eclipse并創(chuàng)建go項(xiàng)目。然后寫個(gè)最簡單的helloworld.go文件,并運(yùn)行。代碼如下:
packagemainimport"fmt"func main(){ fmt.Printf("hello, world")}
配置gocode(可選)
如果不需要go語法輔助和eclipse里面的(按ALT+/)彈出go語言自動(dòng)輔助功能,請(qǐng)?zhí)^這個(gè)配置。
1、下載gocode的zip文件,解壓后放在go的bin目錄下。
2、下載并安裝Git軟件。并且在path里面配置git的執(zhí)行路徑。例如c:\git\bin
3、在命令行執(zhí)行:go build .\gocode。如果一切正常,那么將會(huì)編譯生成一個(gè)gocode.exe文件在go的bin目錄下。如果編譯失敗,那么就轉(zhuǎn)第4步。
4、如果第3步直接編譯gocode源文件成功,那就直接到第5步。否則,就需要通過git下載gocode源文件,然后再編譯。在命令行執(zhí)行:go get -u github.com/nsf/gocode 。就會(huì)生成gocode.exe文件。
5、在goclipse插件里面指定gocode的路徑。就可以在elcipse里面調(diào)用gocode來幫助寫編碼了。
從開發(fā)工具這塊看,go語言還不夠成熟,開發(fā)工具都還不完善,有待改進(jìn)。
下載go-tour教程源代碼(可選)
Google有個(gè)在線運(yùn)行g(shù)o語言的教程(),很不錯(cuò)。支持在web上直接運(yùn)行大部分的go程序,想了解這個(gè)教程的源代碼的朋友可以通過以下方式獲取。如果沒興趣,可以跳過這個(gè)步驟。
1、下載安裝Mercurial軟件。
2、在命令行下輸入:
hg clone
作為測試用的。如果把http改成https協(xié)議,下載就會(huì)失敗。搞不懂。
編譯帶調(diào)用C代碼的go文件(可選)
1、為了在windows下編譯帶C代碼的go程序,你首先需要下載并安裝MinGW或者Cygwin。
2、首選安裝MinGW。在安裝MinGW之后,記得要把MinGW安裝目錄\bin路徑設(shè)置在path環(huán)境變量里面,以便能在dos窗口下直接調(diào)用gcc。
3、下載一個(gè)gowin-env。下載地址:gowin-env。下載后解壓到某個(gè)目錄下,例如:C:\gowin-env. 然后,編輯go-env.bat。配置相關(guān)的go參數(shù)。例如,我的配置是:
set GOARCH=386
set GOOS=windows
set GOROOT=c:\go
set GOBIN=%GOROOT%\bin
set GOPATH=%GOROOT%;F:\workspace\goSample01;
設(shè)置好go-env.bat后,就可以點(diǎn)擊Console.bat來啟動(dòng)編譯和運(yùn)行窗口。
4、編寫一個(gè)帶C代碼的go程序。例如,testc.go
5、編譯
例如:
go build -compiler gccgo test_c.go
運(yùn)行調(diào)用C代碼的go文件(可選)
1、testc.go.
創(chuàng)建rand目錄,然后在rand里面創(chuàng)建testc.go. 代碼如下:
package rand
/*
//
#include stdio.h
*/
import "C"
func PrintHello() {
C.puts(C.CString("Hello, world\n"))
}
2、a.go
在rand下創(chuàng)建a.go.代碼如下:
package rand
import "fmt"
func SayHello(name string){
fmt.Println(name)
}
3、test_import.go
在rand的上一級(jí)創(chuàng)建test_import.go。代碼如下:
package main
import "./rand"
func main(){
rand.SayHello("tom")
rand.PrintHello()
}
4、運(yùn)行test_import.go
go run test_import.go
在測試其它幾個(gè)C代碼的時(shí)候,發(fā)現(xiàn)windows版本的cgo還有些編譯問題,同樣的代碼轉(zhuǎn)移到蘋果的XCODE下就沒有問題。后來終于發(fā)現(xiàn)原因了,原來有些例子是unix平臺(tái)下的,而在windows平臺(tái)下,方法名和參數(shù)需要做調(diào)整。
例如:下面代碼在windows下編譯報(bào)一堆錯(cuò)誤。
package rand
/*
#include stdlib.h
*/
import "C"
func Random() int {
return int(C.random())
}
func Seed(i int) {
C.srandom(C.uint(i))
}
這里需要把return int(C.random()) 修改為“return int(C.rand())”
C.srandom(C.uint(i))修改為“C.srand(C.uint(i))”編譯就OK了。