十年網(wǎng)站開發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營維護(hù)+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
是Go語言嗎?
10余年的交城網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。全網(wǎng)營銷推廣的優(yōu)勢(shì)是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整交城建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)從事“交城網(wǎng)站設(shè)計(jì)”,“交城網(wǎng)站推廣”以來,每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。
Go 編譯過程 九個(gè)步驟
第一步. all.bash
% cd $GOROOT/src
% ./all.bash
第一步 all.bash 只是調(diào)用了另外兩個(gè) shell 腳本:make.bash 和run.bash。若使用 Windows 或 Plan9,其過程也基本類似,只是腳本分別以 .bat 或 .rc 結(jié)尾。在文章的其他部分,請(qǐng)用適當(dāng)?shù)牟僮飨到y(tǒng)對(duì)應(yīng)的擴(kuò)展來補(bǔ)全命令。
第二步. make.bash
. ./make.bash --no-banner
make.bash 作為 all.bash 內(nèi)容的一部分,如果它退出也會(huì)中斷構(gòu)建過程
第三步. cmd/dist
gcc -O2 -Wall -Werror -ggdb -o cmd/dist/dist -Icmd/dist cmd/dist/*.c
當(dāng)健全檢查完成后,make.bash 開始編譯 cmd/dist。
第四步. go_bootstrap
現(xiàn)在 go_bootstrap 已經(jīng)構(gòu)建完成,make.bash 的最后一步是使用 go_bootstrap 編譯完整的 Go 標(biāo)準(zhǔn)庫,包括一個(gè)完整的 go 工具用以替換。
echo "# Building packages and commands for $GOOS/$GOARCH."
"$GOTOOLDIR"/go_bootstrap install -gcflags "$GO_GCFLAGS" \
-ldflags "$GO_LDFLAGS" -v std
第五步. run.bash
現(xiàn)在 make.bash 已經(jīng)完成,回到 all.bash 的執(zhí)行,這會(huì)調(diào)用 run.bash。run.bash 的任務(wù)是編譯和測試標(biāo)準(zhǔn)庫、運(yùn)行時(shí)以及語言測試集。
bash run.bash --no-rebuild
由于 make.bash 和 run.bash 都會(huì)調(diào)用 go install -a std,因此需要使用 –no-rebuild 標(biāo)志來避免重復(fù)前面的步驟,–no-rebuild 跳過了第二個(gè) go install。
# allow all.bash to avoid double-build of everythingrebuild=trueif [ "$1" = "--no-rebuild" ]; then shiftelse echo '# Building packages and commands.' time go install -a -v std echofi
第六步. go test -a std
echo '# Testing packages.'
time go test std -short -timeout=$(expr 120 \* $timeout_scale)s
echo
接下來 run.bash 會(huì)在標(biāo)準(zhǔn)庫里所有的包上來運(yùn)行用 testing 包編寫的單元測試。由于 $GOPATH 和 $GOROOT 中有著相同的命名空間,所以不能直接使用 go test … 否則 $GOPATH 中的每個(gè)包也會(huì)被逐一測試,因此創(chuàng)建了一個(gè)用于標(biāo)準(zhǔn)庫中的包的別名:std。由于一些測試需要比較長的時(shí)間,且會(huì)消耗大量內(nèi)存,因此用 -short 標(biāo)志對(duì)一些測試進(jìn)行了過濾。
第七步. runtime 和 cgo 測試
run.bash 接下來的部分會(huì)運(yùn)行平臺(tái)對(duì) cgo 支持的測試,執(zhí)行一些性能測試,并且編譯一些伴隨 Go 發(fā)行版一起的雜項(xiàng)程序。隨著時(shí)間的流逝,這些雜項(xiàng)程序的清單會(huì)越來越長,那么它們也就會(huì)不可避免的被從編譯過程中悄悄剝離出去。
第八步. go run test
(xcd ../test
unset GOMAXPROCS
time go run run.go
) || exit $?
run.bash 的倒數(shù)第二步會(huì)調(diào)用在 $GOROOT 下的 test 目錄里的編譯器和運(yùn)行時(shí)的測試。他們是對(duì)于編譯器和運(yùn)行時(shí)自身的,較為低級(jí)細(xì)節(jié)的測試。會(huì)執(zhí)行語言規(guī)格測試,test/bugs 和 test/fixedbugs 子目錄保存有那些已經(jīng)被發(fā)現(xiàn)并被修復(fù)的問題的獨(dú)立的測試。驅(qū)動(dòng)測試的是一個(gè)小 Go 程序 $GOROOT/test/run.go,會(huì)執(zhí)行 test 目錄里的每個(gè) .go 文件。一些 .go 文件的首行包含了指導(dǎo) run.go 對(duì)結(jié)果作出判斷的指令,例如,程序?qū)?huì)失敗,或提供一個(gè)確定的輸出隊(duì)列。
第九步. go tool api
echo '# Checking API compatibility.'
go tool api -c $GOROOT/api/go1.txt,$GOROOT/api/go1.1.txt \
-next $GOROOT/api/next.txt -except $GOROOT/api/except.txt
run.bash 的最后一步調(diào)用了 api 工具。
go語言 一個(gè)主package包引入同級(jí)目錄下go文件包編譯出錯(cuò)是設(shè)置錯(cuò)誤造成的,解決方法為:
1、先使用import "strings"導(dǎo)入strings庫。
2、HasPrefix?判斷字符串?s?是否以?prefix?開頭。
3、HasSuffix?判斷字符串?s?是否以?suffix?結(jié)尾。
4、可以看看判斷的代碼。
5、在cmd下運(yùn)行一下go run test.go,看看如下結(jié)果。
6、Contains?判斷字符串?s?是否包含?substr,也就是判斷一下S是否在strings中。
7、在cmd下運(yùn)行g(shù)o run test.go看看結(jié)果。
Copyright ? 1999-2020, CSDN.NET, All Rights Reserved
打開APP
銀色種子
關(guān)注
go 編譯步驟 原創(chuàng)
2021-04-23 16:29:49
銀色種子
碼齡7年
關(guān)注
## go 步驟
```
/*
Go項(xiàng)目構(gòu)建及編譯
一個(gè)Go工程中主要包含以下三個(gè)目錄:
src:源代碼文件
pkg:包文件
bin:相關(guān)bin文件
1: 建立工程文件夾 goproject
2: 在工程文件夾中建立src,pkg,bin文件夾
3: 在GOPATH中添加projiect路徑 例 e:/goproject
4: 如工程中有自己的包examplepackage,那在src文件夾下建立以包名命名的文件夾 例 examplepackage
5:在src文件夾下編寫主程序代碼代碼 goproject.go
6:在examplepackage文件夾中編寫 examplepackage.go 和 包測試文件 examplepackage_test.go
7:編譯調(diào)試包
go build examplepackage
go test examplepackage
go install examplepackage
這時(shí)在pkg文件夾中可以發(fā)現(xiàn)會(huì)有一個(gè)相應(yīng)的操作系統(tǒng)文件夾如windows_386z,
在這個(gè)文件夾中會(huì)有examplepackage文件夾,在該文件中有examplepackage.a文件
8:編譯主程序
go build goproject.go
成功后會(huì)生成goproject.exe文件
至此一個(gè)Go工程編輯成功。
*/
go及gomobile的環(huán)境配置這里就不介紹了,直接說aar的生成和使用。
1. 設(shè)置環(huán)境變量GOPATH
GOPATH的值可以有多個(gè),用半角分號(hào)間隔,但不能以其結(jié)束,設(shè)置完成后需要重新做 gomobile init 。
2. 在GOPATH里創(chuàng)建src文件夾,用于存放go的包和源文件
3. 在src中創(chuàng)建hello文件夾(go文件的包名)
4. 在hello中創(chuàng)建hello.go文件,并輸入內(nèi)容
5. 編譯
執(zhí)行命令: gomobile bind -target=android hello
會(huì)生成一個(gè)hello.aar文件
6. 導(dǎo)入到android工程
將hello.aar文件放入工程的libs中,并配置build.gradle
在根結(jié)點(diǎn)加入:
在dependencies結(jié)點(diǎn)下加入依賴:
7. 在Java中測試
運(yùn)行后,結(jié)果會(huì)輸出 Hello, Android and Gopher
只需要指定目標(biāo)操作系統(tǒng)的平臺(tái)和處理器架構(gòu)即可:
因?yàn)椴恢С諧GO,所以要禁用CGO
然后再執(zhí)行g(shù)o build命令,得到的就是能夠在Linux平臺(tái)運(yùn)行的可執(zhí)行文件了。
Mac 下編譯 Linux 和 Windows 平臺(tái) 64位 可執(zhí)行程序:
Linux下編譯 Mac 和 Windows 平臺(tái)64位可執(zhí)行程序:
Windows下編譯Mac平臺(tái)64位可執(zhí)行程序:
整個(gè)過程看起來非常簡單,運(yùn)行起來也非常簡單,調(diào)用make release命令,并給VERSION變量賦值不同的版本號(hào)即可:
命令會(huì)編譯出不同平臺(tái)可運(yùn)行的壓縮包:
1、解壓壓縮包到go工作目錄,如解壓到E:\opensource\go\go,解壓后的目錄結(jié)構(gòu)如下:
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")
}