- 一、golang 语言环境搭建
- 1、 下载
- 2、安装
- Go 环境变量
- $GOROOT 表示 Go 在你的电脑上的安装位置
- $GOARCH 表示目标机器的处理器架构,它的值可以是 386、amd64 或 arm。
- $GOOS 表示目标机器的操作系统,它的值可以是 darwin、freebsd、linux 或 windows。
- $GOBIN 表示编译器和链接器的安装位置,默认是 $GOROOT/bin
- $GOPATH 工作目录
- 查看环境变量 go env
- $HOME/.profile 当前用户
- /etc/profile 系统全部用户
- 刷新
- Go 1.13 及以上(推荐)
- 打开命令行,输入以下命令
- 当需要引用其他模块时,go.mod 文件会列出需要的模块以及对应版本
- 创建go.mod
- Hello World!Don’t communicate by sharing memory, share memory by communicating.
- GOOS 目标系统:
- GOARCH 系统架构
- 在linux上编译arm平台的二进制
- CGO_ENABLED=1 GOOS=linux GOARCH=arm CC=arm-linux-gnueabi-gcc go build
- 在linux上编译arm64平台的二进制
- 如果提示找不到openssl/rand.h文件
- for macOS:
- for Debian, Ubuntu
一、golang 语言环境搭建
1、 下载
https://golang.org/dl/go1.15.6.linux-amd64.tar.gz
2、安装
- 解压 ``` tar -C /usr/local -xzf go1.15.6.linux-amd64.tar.gz
tar -C ~/software -xzf /home/hdj/Downloads/go1.15.6.linux-amd64.tar.gz
-
配置环境变量
Go 环境变量
$GOROOT 表示 Go 在你的电脑上的安装位置
$GOARCH 表示目标机器的处理器架构,它的值可以是 386、amd64 或 arm。
$GOOS 表示目标机器的操作系统,它的值可以是 darwin、freebsd、linux 或 windows。
$GOBIN 表示编译器和链接器的安装位置,默认是 $GOROOT/bin
$GOPATH 工作目录
查看环境变量 go env
$HOME/.profile 当前用户
/etc/profile 系统全部用户
export PATH=$PATH:/usr/local/go/bin
刷新
source $HOME/.profile
-
安装c工具
sudo apt-get install bison ed gawk gcc libc6-dev make
-
查看是否安装成功
go version
<a name="42ee552d"></a>
### 3、下载golang IDE工具
[https://www.jetbrains.com/go/download/#section=linux](https://www.jetbrains.com/go/download/#section=linux)
<a name="20212751"></a>
### 4、golang 命令工具
- go build 编译并安装自身包和依赖包
- go install 安装自身包和依赖包
- gofmt 格式化代码
- go doc package 生成文档
- go fix 用于将你的 Go 代码从旧的发行版迁移到最新的发行版
- go test 是一个轻量级的单元测试框架
<a name="66f0b997"></a>
## 二、golang入门学习
<a name="4195be19"></a>
### 2.1、编写helloworld.go并运行
- 编写hello.go代码代码
package main
import “fmt”
func main() { fmt.Println(“Hello, World!”) }
-
命令行运行
go run hello.go
-
查看更多命令
go help
<a name="8b789b3f"></a>
### 2.2、调用外部代码
-
可以使用pkg.go.dev网站找到已发布模块的包,并导入自己的代码当中使用
-
为了顺利导入包并使用,需要配置包下载代理服务
- [https://goproxy.cn/](https://goproxy.cn/)
Go 1.13 及以上(推荐)
打开命令行,输入以下命令
go env -w GO111MODULE=on go env -w GOPROXY=https://goproxy.cn,direct
-
代码 HelloWorld.go
package main
import “fmt” import “rsc.io/quote”
func main() { fmt.Print(“Hello World!”) fmt.Println(quote.Go()) }
-
配置依赖关系
当需要引用其他模块时,go.mod 文件会列出需要的模块以及对应版本
创建go.mod
go mod init HelloWorld
-
运行
go run HelloWorld.go
Hello World!Don’t communicate by sharing memory, share memory by communicating.
<a name="b6779fc9"></a>
### 2.3、编译打包
GOOS 目标系统:
GOARCH 系统架构
# env GOOS=target-OS GOARCH=target-architecture go build package-import-path
在linux上编译arm平台的二进制
sudo apt-get install libc6-armel-cross libc6-dev-armel-cross binutils-arm-linux-gnueabi libncurses5-dev sudo apt-get install gcc-arm-linux-gnueabi g++-arm-linux-gnueabi CGO_ENABLED=1 GOOS=android GOARCH=arm go build
CGO_ENABLED=1 GOOS=linux GOARCH=arm CC=arm-linux-gnueabi-gcc go build
在linux上编译arm64平台的二进制
sudo apt-get install gcc-aarch64-linux-gnu CGO_ENABLED=1 GOOS=linux GOARCH=arm64 go build
如果提示找不到openssl/rand.h文件
for macOS:
brew install openssl brew link openssl —force
或者 export CGO_LDFLAGS=”-L/usr/local/opt/openssl/lib” export CGO_CPPFLAGS=”-I/usr/local/opt/openssl/include”
for Debian, Ubuntu
sudo apt-get install libssl-dev
CGO_ENABLED=0 GOOS=android GOARCH=arm64 CC=arm64-linux-gnueabi-gcc go build -a -o cloudreve -ldflags “ -X ‘github.com/cloudreve/Cloudreve/v3/pkg/conf.BackendVersion=$VERSION’ -X ‘github.com/cloudreve/Cloudreve/v3/pkg/conf.LastCommit=$COMMIT_SHA’”
``
|
GOOS- Target Operating System |
GOARCH- Target Platform |
| :---: | :---: |
|
android|
arm|
|
darwin|
386|
|
darwin|
amd64|
|
darwin|
arm|
|
darwin|
arm64|
|
dragonfly|
amd64|
|
freebsd|
386|
|
freebsd|
amd64|
|
freebsd|
arm|
|
linux|
386|
|
linux|
amd64|
|
linux|
arm|
|
linux|
arm64|
|
linux|
ppc64|
|
linux|
ppc64le|
|
linux|
mips|
|
linux|
mipsle|
|
linux|
mips64|
|
linux|
mips64le|
|
netbsd|
386|
|
netbsd|
amd64|
|
netbsd|
arm|
|
openbsd|
386|
|
openbsd|
amd64|
|
openbsd|
arm|
|
plan9|
386|
|
plan9|
amd64|
|
solaris|
amd64|
|
windows|
386|
|
windows|
amd64` |
参考
- https://pkg.go.dev/rsc.io/quote
- https://github.com/ustclug/mirrorrequest/issues/225
- 配置代理 https://goproxy.cn/
- https://github.com/unknwon/the-way-to-go_ZH_CN/blob/master/eBook/directory.md
- 编译 https://studygolang.com/articles/14376
- docker go编译镜像 https://github.com/karalabe/xgo
- go get github.com/mitchellh/gox
- https://gobyexample.com/
- golang 语言规范 http://golang.org/doc/go_spec.html
- golang 常见问题 https://golang.org/doc/faq