日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

go语言简述

發布時間:2024/6/21 综合教程 28 生活家
生活随笔 收集整理的這篇文章主要介紹了 go语言简述 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

0. 簡述

Go是一個開源的編程語言,它能讓構造簡單、可靠且高效的軟件變得容易。

Go語言被設計成一門應用于搭建web服務器,存儲集群或類似用途的巨型中央服務器的系統編程語言。對于高性能分布式系統領域而言,Go語言無疑比大多數其他語言有著更高的開發效率。它提供了海量并行的支持,這對于游戲服務器端的開發而言是再好不過的。

Go官網:https://golang.google.cn/或https://github.com/golang/go

package main
import "fmt"
func main() {
    fmt.Println("Hello, World!")
}

X86上編譯運行:

wang@ubuntu:~/go$ go build -o hello hello.go
wang@ubuntu:~/go$ ./hello
Hello, World!

或直接運行

wang@ubuntu:~/go$ go run hello.go
Hello, World!

X86平臺交叉編譯ARM64平臺上程序:

GOOS=linux GOARCH=arm64 go build -o hello hello.go
wang@ubuntu:~/go$ file hello
hello: ELF 64-bit LSB executable, ARM aarch64, version 1 (SYSV), statically linked, not stripped

godoc用法:

 godoc -http=localhost:6060 -play

godoc可提供離線的go文檔,便于本地查看。

可在https://godoc.org/中搜索所有golang庫的接口說明。

1. Go編譯器

兩種官方編譯器,gc和gccgo,其中gccgo基于gcc后端。

go編譯器支持8種指令集,不同建構編譯質量不同:

amd64 (also known as x86-64)    
386 (x86 or x86-32)   Comparable to the amd64 port.
arm (ARM)
Supports Linux, FreeBSD, NetBSD, OpenBSD and Darwin binaries. Less widely used than the other ports.
arm64 (AArch64)
Supports Linux and Darwin binaries. New in 1.5 and not as well exercised as other ports.
ppc64, ppc64le (64-bit PowerPC big- and little-endian)
Supports Linux binaries. New in 1.5 and not as well exercised as other ports.
mips, mipsle (32-bit MIPS big- and little-endian)
Supports Linux binaries. New in 1.8 and not as well exercised as other ports.
mips64, mips64le (64-bit MIPS big- and little-endian)
Supports Linux binaries. New in 1.6 and not as well exercised as other ports.
s390x (IBM System z)
Supports Linux binaries. New in 1.7 and not as well exercised as other ports.

go編譯環境可以被定制,與平臺和建構相關的是$GOOS和$GOARCH,分別指定目標操作系統和目標建構。常用組合如下:(注:$GOOS是darwin for macOS 10.1及以上和iOS)

$GOOS        $GOARCH
android     arm
darwin      386
darwin      amd64
darwin      arm
darwin      arm64
linux       386
linux       amd64
linux       arm
linux       arm64
windows     386
windows     amd64

go編譯器(或go環境)安裝

有兩種安裝方式:二進制發布包和源碼包,參考https://golang.google.cn/doc/install。一般情況下可直接下載二進制發布包,官方已提供了常用平臺的二進制發布包。

下載二進制tar包,tar -C /usr/local -xzf go$VERSION.$OS-$ARCH.tar.gz,一般安裝路徑為/usr/local,go工具命令要執行需要將/usr/local/go/bin導出到PATH環境變量中(/etc/profile可長期有效)。

源碼包安裝方式參考:Installing Go from source

ubuntu下可直接apt安裝:

sudo apt-get install golang-go

go工具卸載

linux下直接刪除/usr/local/go目錄即可(同時修改PATH環境變量,或/etc/profile)。

GO環境變量

go env可打印go環境變量。

$GOPATH

GOPATH指定workspace位置,默認為$home/go,go項目在本地的開發環境的項目根路徑(以便項目編譯,go build, go install,go get)。若工作在其他目錄,需設定GOPATH。export GOPATH=$HOME/go

或直接寫到/etc/profile中,然后source /etc/profile

注意GOPATH不能和go安裝目錄相同。

go env GOPATH

打印當前有效的GOPATH,若沒有設置打印默認位置。

For convenience, add the workspace'sbinsubdirectory to yourPATH:

$ export PATH=$PATH:$(go env GOPATH)/bin

GOPATH之下主要包含三個目錄:bin,pkg,src。bin目錄主要存放可執行文件;pkg目錄存放編譯好的庫文件,主要是*.a文件;src目錄下主要存放go的源文件。

$GOROOT

go的安裝目錄,配置后不會更改。一般為/usr/local/go或/usr/go或/usr/lib/go。

$GOROOT_FINAL

$GOOS and $GOARCH

用于不同平臺的交叉編譯,只需要在build之前設置這兩個變量即可,這也是go語言的優勢之一:可以編譯生成跨平臺運行的可執行文件。

注意:這個交叉編譯暫不支持cgo方式,因此交叉編譯時需要設置$CGO_ENABLED設置為0。

$GOHOSTOS and $GOHOSTARCH

$GOBIN

go二進制文件安裝目錄,默認為$GOROOT/bin。

$GO386

$GOARM

$GOMIPS

集成開發環境IDE

vscode-golang配置參考VS code golang 開發環境搭建

2. cgo

Cgo lets Go packages call C code.

The basics

If a Go source file imports"C", it is using cgo. The Go file will have access to anything appearing in the comment immediately preceding the lineimport "C", and will be linked against all other cgo comments in other Go files, and all C files included in the build process.

Note that there must be no blank lines in between the cgo comment and the import statement.

To access a symbol originating from the C side, use the package nameC. That is, if you want to call the C functionprintf()from Go code, you writeC.printf(). Since variable argument methods like printf aren't supported yet (issue975), we will wrap it in the C method "myprint":

package main

/*
#include <stdio.h>
#include <stdlib.h>

void myprint(char* s) {
    printf("%s", s);
}
*/
import "C"

import "unsafe"

func main() {
    cs := C.CString("Hello from stdio
")
    C.myprint(cs)
    C.free(unsafe.Pointer(cs))
}

參考:

1. http://golang.org/doc/articles/c_go_cgo.html

2.https://github.com/golang/go/wiki/cgo

3.http://wiki.jikexueyuan.com/project/go-command-tutorial/0.13.html 極客學院go命令詳解

4. https://books.studygolang.com/advanced-go-programming-book/ch2-cgo/readme.htmlGo語言高級編程(Advanced Go Programming)cgo編程

3. Go交叉編譯

參考:Go cross compilation

If cgo is not required (common go programs, not including c/c++)

The go tool won’t require any bootstrapping if cgo is not required. That allows you to target the following program to any GOOS/GOARCH without requiring you to do any additional work. Invokego build.

$ cat main.go
package main
import "fmt"
func main() {
    fmt.Println("hello world")
}

In order to target android/arm, run the following command.

$ GOOS=android GOARCH=arm GOARM=7 go build .

The produced binary is targeting ARMv7 processors that runs Android. All possible GOOS and GOARCH values are listed on theenvironment docs.

If cgo is required (including c/c++)

If you need to have cgo enabled, the go tool allows you to provide custom C and C++ compilers via CC and CXX environment variables.

$ CGO_ENABLED=1 CC=android-armeabi-gcc CXX=android-armeabi-g++ 
    GOOS=android GOARCH=arm GOARM=7 go build .

The toolchain will invoke android-armeabi-gcc and android-armeabi-g++ if it is required to compile any part of the package with a C or C++ compiler. Consider the following program with a slightly different main function. Rather than outputting “hello world” to the standard I/O, it will use Android system libraries to write “hello world” to the system log.

$ cat main.go
// +build android

package main

// #cgo LDFLAGS: -llog
//
// #include <android/log.h>
//
// void hello() {
//   __android_log_print(
//     ANDROID_LOG_INFO, "MyProgram", "hello world");
// }
import "C"
func main() {
    C.hello()
}

If you build the program with the command above and examine the build with -x, you can observe that cgo is delegating the C compilation to arm-linux-androideabi-gcc.

$ CGO_ENABLED=1 
CC=arm-linux-androideabi-gcc 
CXX=arm-linux-androideabi-g++ 
GOOS=android GOARCH=arm GOARM=7 go build -x .
...
CGO_LDFLAGS=”-g” “-O2” “-llog” /Users/jbd/go/pkg/tool/darwin_amd64/cgo -objdir $WORK/github.com/rakyll/hello/_obj/ -importpath github.com/rakyll/hello — -I $WORK/github.com/rakyll/hello/_obj/ main.go
arm-linux-androideabi-gcc -I . -fPIC -marm -pthread -fmessage-length=0 -print-libgcc-file-name
arm-linux-androideabi-gcc -I . -fPIC -marm -pthread -fmessage-length=0 -I $WORK/github.com/rakyll/hello/_obj/ -g -O2 -o $WORK/github.com/rakyll/hello/_obj/_cgo_main.o -c $WORK/github.com/rakyll/hello/_obj/_cgo_main.c
...

Pre-building the standard library

The go tool also provides a utility if you would like to pre-build the standard library, targeting a specific GOOS and GOARCH.

$ CGO_ENABLED=1 
    CC=arm-linux-androideabi-gcc 
    CXX=arm-linux-androideabi-g++ 
    GOOS=android GOARCH=arm GOARM=7 go install std

The standard library targeting android/armv7 will be available at $GOROOT/pkg/android_arm.

$ ls $GOROOT/pkg/android_arm
archive    fmt.a      math       runtime.a
bufio.a    go         math.a     sort.a
bytes.a    hash       mime       strconv.a
compress   hash.a     mime.a     strings.a
container  html       net        sync
crypto     html.a     net.a      sync.a
crypto.a   image      os         syscall.a
database   image.a    os.a       testing
debug      index      path       testing.a
encoding   internal   path.a     text
encoding.a io         reflect.a  time.a
errors.a   io.a       regexp     unicode
expvar.a   log        regexp.a   unicode.a
flag.a     log.a      runtime

If you prefer not to pre-build and install the standard library to the GOROOT, required libraries will be built while building user packages. But,the standard libraries builds are not preserved for future use at this stage and they will be rebuilt each time you rungo build.

go語言學習參考:

1.Go 系列教程(Golang tutorial series) go語言中文網

2. go入門指南博客

3. go語言學習博客

4.go基礎學習 coder python修行路

5.beego項目https://beego.me

6.https://github.com/golang/go

7.How to write Go Codehttps://golang.google.cn/doc/code.html

8.https://golang.google.cn/提供go在線測試環境和文檔

9.https://golang.google.cn/doc/go相關文檔

10.https://golang.google.cn/pkg/go標準庫

11.https://godoc.org/ go實用庫搜索

12.https://books.studygolang.com/advanced-go-programming-book/ch2-cgo/readme.htmlGo語言高級編程(Advanced Go Programming)

13.在 GitHub 上構建一個看上去正規的 Golang 項目

14.Go 語言設計與實現

總結

以上是生活随笔為你收集整理的go语言简述的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。