目录 start

目录 end |2018-07-16| 码云 | CSDN | OSChina


Go

官网 | 镜像网 | Github Repo | Go Doc

Go 语言被设计成一门应用于搭载 Web 服务器,存储集群或类似用途的巨型中央服务器的系统编程语言。对于高性能分布式系统领域而言,Go 语言无疑比大多数其它语言有着更高的开发效率。它提供了海量并行的支持,这对于游戏服务端的开发而言是再好不过了。

参考博客: Golang官网被墙解决办法

社区

书籍

Go语言高级编程(Advanced Go Programming)

安装

官方教程 | 参考 教程

  1. sudo tar -C /usr/local -xzf go1.10.3.linux-amd64.tar.gz
  2. *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的版本则是配置成功

  3. 在 /home/kcp/code/go 下 新建 test.go
    package main
    import "fmt"
    func main() {
     fmt.Printf("hello, world\n")
    }
    
  4. go run test.go 或者 go build

Docker

使用Docker安装和部署

Docker image 这里的镜像都是用于 从源码编译构建成可执行文件的 环境
go 的 Docker镜像的讨论

  1. 实际运行的时候, 如果不需要调用外部Linux命令 就直接 from scratch
  2. 需要则 from alpine 更精简一点 更好是使用 frolvlad/alpine-glibc

环境变量解释

关于GOROOT、GOPATH、GOBIN、project目录 GOPATH 深度解析

  • 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 节。

基本开发环境搭建

Github:Golang

入门时使用VSCode是比较方便的, VSCode 会推荐我们安装如下工具

  1. tools 工具集
    1. guru golang.org/x/tools/cmd/guru
    2. gorename golang.org/x/tools/cmd/gorename
  2. lint golang.org/x/lint
    1. golint golang.org/x/lint/golint
  3. go-outline github.com/ramya-rao-a/go-outline
  4. go-symbols github.com/acroca/go-symbols
  5. goreturns github.com/sqs/goreturns

  6. [ ] godep 同样的方式

  7. 安装完后就会在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地址,

  1. mkdir -p src/golang.org/x/tools
  2. mkdir -p src/golang.org/x/lint
  3. https://github.com/golang/tools clone所有内容 放到 src/golang.org/x/tools 下
  4. https://github.com/golang/lint clone所有内容 放到 src/golang.org/x/lint 下
  5. 此时再执行 go get 那五个工具即可全部安装成功

问题又来了, Github 由于飘忽不定的被墙, 网速特别慢, 就可以利用码云来加速下载

  1. lint https://gitee.com/gin9/golang-lint.git
  2. tools https://gitee.com/gin9/golang-tools.git

数据类型

有关类型后置

螺旋形(C/C++)和顺序(Go)的声明语法 Why do a lot of programming languages put the type after the variable name?

基本类型

Array

Slice

Map

Set


基本语法

标准输入输出

参考博客: golang中的格式化输入输出

文件操作

递归读取当前目录的文件

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处理到,小写字母开头的成员不会有影响。

website: json to go struct

Tips

通过字符串调用指定函数

参考博客: Go 根据字符串调用指定函数

results matching ""

    No results matching ""