目录 start
目录 end
|2018-07-16| 码云 | CSDN | OSChina
Go
官网 | 镜像网 | Github Repo | Go Doc
Go 语言被设计成一门应用于搭载 Web 服务器,存储集群或类似用途的巨型中央服务器的系统编程语言。对于高性能分布式系统领域而言,Go 语言无疑比大多数其它语言有着更高的开发效率。它提供了海量并行的支持,这对于游戏服务端的开发而言是再好不过了。
社区
书籍
Go语言高级编程(Advanced Go Programming)
安装
- sudo tar -C /usr/local -xzf go1.10.3.linux-amd64.tar.gz
- *shrc或者 /etc/profile 中添加
export GOROOT=/usr/local/go export GOPATH=$HOME/Code/go # workspace export GOBIN=$GOPATH/bin # 'go install' command install dir export PATH=$PATH:$GOBIN:$GOPATH:$GOROOT/bin
查看版本
go version
正常输出go的版本则是配置成功 - 在 /home/kcp/code/go 下 新建 test.go
package main import "fmt" func main() { fmt.Printf("hello, world\n") }
- go run test.go 或者 go build
Docker
使用Docker安装和部署
Docker image
这里的镜像都是用于 从源码编译构建成可执行文件的 环境
go 的 Docker镜像的讨论
- 实际运行的时候, 如果不需要调用外部Linux命令 就直接
from scratch
- 需要则
from alpine
更精简一点 更好是使用frolvlad/alpine-glibc
环境变量解释
- Go 开发环境依赖于一些操作系统环境变量,你最好在安装 Go 之间就已经设置好他们。如果你使用的是 Windows 的话,你完全不用进行手动设置,Go 将被默认安装在目录 c:/go 下。这里列举几个最为重要的环境变量:
$GOROOT
表示 Go 在你的电脑上的安装位置,它的值一般都是 $HOME/go,当然,你也可以安装在别的地方。$GOARCH
表示目标机器的处理器架构,它的值可以是 386、amd64 或 arm。$GOOS
表示目标机器的操作系统,它的值可以是 darwin、freebsd、linux 或 windows。$GOBIN
表示编译器和链接器的安装位置,默认是$GOROOT/bin
,如果你使用的是 Go 1.0.3 及以后的版本,一般情况下你可以将它的值设置为空,Go 将会使用前面提到的默认值。- 为了区分本地机器和目标机器,你可以使用
$GOHOSTOS
和$GOHOSTARCH
设置目标机器的参数,这两个变量只有在进行交叉编译的时候才会用到, - 如果你不进行显示设置,他们的值会和本地机器(
$GOOS
和$GOARCH
)一样。
- 为了区分本地机器和目标机器,你可以使用
$GOPATH
默认采用和$GOROOT
一样的值,但从 Go 1.1 版本开始,你必须修改为其它路径。它可以包含多个包含 Go 语言源码文件、包文件和可执行文件的路径,- 而这些路径下又必须分别包含三个规定的目录:src、pkg 和 bin,这三个目录分别用于存放源码文件、包文件和可执行文件。
$GOARM
专门针对基于 arm 架构的处理器,它的值可以是 5 或 6,默认为 6。$GOMAXPROCS
用于设置应用程序可使用的处理器个数与核数,详见第 14.1.3 节。
基本开发环境搭建
入门时使用VSCode是比较方便的, VSCode 会推荐我们安装如下工具
- tools 工具集
- guru
golang.org/x/tools/cmd/guru
- gorename
golang.org/x/tools/cmd/gorename
- guru
- lint
golang.org/x/lint
- golint
golang.org/x/lint/golint
- golint
- go-outline
github.com/ramya-rao-a/go-outline
- go-symbols
github.com/acroca/go-symbols
goreturns
github.com/sqs/goreturns
[ ] godep 同样的方式
安装完后就会在GOPATH中能找到这些工具对应的命令了, 由于 golang.org 被墙
- 所以 只有这几个工具不能直接 go get : guru gorename imports(goreturns要用到) lint golint
https://github.com/golang/tools 是 tools 的Github地址,
https://github.com/golang/lint 是 lint 和 golint 的Github地址,
mkdir -p src/golang.org/x/tools
mkdir -p src/golang.org/x/lint
- 将 https://github.com/golang/tools clone所有内容 放到 src/golang.org/x/tools 下
- 将 https://github.com/golang/lint clone所有内容 放到 src/golang.org/x/lint 下
- 此时再执行 go get 那五个工具即可全部安装成功
问题又来了, Github 由于飘忽不定的被墙, 网速特别慢, 就可以利用码云来加速下载
数据类型
有关类型后置
螺旋形(C/C++)和顺序(Go)的声明语法 Why do a lot of programming languages put the type after the variable name?
基本类型
Array
Slice
Map
Set
基本语法
标准输入输出
文件操作
递归读取当前目录的文件
package main
import (
"fmt"
"os"
"path/filepath"
)
func main() {
filepath.Walk("./", walkfunc)
}
func walkfunc(path string, info os.FileInfo, err error) error {
if(!info.IsDir()){
fmt.Println(path)
}
return nil
}
JSON
参考博客: Go操作JSON 参考博客: go and json 参考博客: 在Go语言中使用JSON
结构体必须是大写字母开头的成员才会被JSON处理到,小写字母开头的成员不会有影响。