-
Notifications
You must be signed in to change notification settings - Fork 20
GoBase
目录 start
目录 end|2019-05-10 18:10|
官网 | 镜像官网 | Github Repo | Go Doc
Go 语言被设计成一门应用于搭载 Web 服务器,存储集群或类似用途的巨型中央服务器的系统编程语言。对于高性能分布式系统领域而言,Go 语言无疑比大多数其它语言有着更高的开发效率。它提供了海量并行的支持,这对于游戏服务端的开发而言是再好不过了。
参考博客: Golang官网被墙解决办法 参考博客: why is go popular in china 参考博客: 我为什么放弃Go语言 参考博客: 使用Go语言工作400天后的感受 Golang vs Rust vs Dlang 哪个更有前途
大致就是go偏向Java Python Rust 偏向 C++ 的领域
go相关应用 docker golang lantern kubernetes awesome-go gogs synching hugo grafana etcd hub influxdb caddy beego martini cayley nsq codis delve cobra shadowsocks-go phcolus
-
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.gopackage main import "fmt" func main() { fmt.Printf("hello, world\n") }
- go run test.go 或者 go build
使用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
- dep
github.com/golang/dep
由于 golang.org 用的是Google的服务器, 所以..., 这几个工具不能直接安装 guru gorename imports(goreturns要用到) lint golint 但是本质上都是获取源码而已, 所以可以从github获取
汇总一下命令
cd $GOPATH
mkdir -p src/golang.org/x/tools
git clone --deepth 1 https://github.com/golang/tools src/golang.org/x/tools
mkdir -p src/golang.org/x/lint
git clone --deepth 1 https://github.com/golang/lint src/golang.org/x/lint
mkdir -p src/github.com/golang/dep
git clone --deepth 1 https://github.com/golang/dep src/github.com/golang/dep
go get golang.org/x/tools/cmd/guru
go get golang.org/x/tools/cmd/gorename
go get golang.org/x/lint
go get golang.org/x/lint/golint
go get github.com/ramya-rao-a/go-outline
go get github.com/acroca/go-symbols
go get github.com/sqs/goreturns
go get github.com/golang/dep
可以利用码云来加速下载
有关类型后置
螺旋形(C/C++)和顺序(Go)的声明语法 Why do a lot of programming languages put the type after the variable name?
// string到int
int,err:=strconv.Atoi(string)
// string到int64
int64, err := strconv.ParseInt(string, 10, 64)
// int到string
string:=strconv.Itoa(int)
// int64到string
string:=strconv.FormatInt(int64,10)
基本结构
// 函数名 (参数 ) 返回值{函数体}
func functionName (param1 int) int {
}
函数作为参数
functionName func(string, string)
递归读取当前目录的文件
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
}
结构体必须是大写字母开头的成员才会被处理(大写字母开头才有对外权限)
type GridConfig struct {
ID int `json:"id"`
Row int `json:"row"`
Col int `json:"col"`
Data []int `json:"data"`
}
// 第一种
func (*GenerateGrid) ReadConfig() []GridConfig {
var datas []GridConfig
fp, _ := os.Open("grid.json")
dec := json.NewDecoder(fp)
for {
err := dec.Decode(&datas)
if err != nil {
fmt.Println(err)
break
}
//use v
// fmt.Printf("%+v", datas)
for _, line := range datas {
fmt.Println(" ", line)
}
}
// 第二种方式
var datas []GridConfig
raw, err := ioutil.ReadFile("./grid.json")
// fmt.Println(raw)
if err != nil {
fmt.Println(err.Error())
os.Exit(1)
}
err = json.Unmarshal(raw, &datas)
if err != nil {
fmt.Println("error:", err)
}
for _, line := range datas {
fmt.Println(" ", line)
}
return datas
}
-
【 Algorithm 】
-
【 Blog 】
-
【 C 】
-
【 Database 】
-
【 Distributed 】
-
【 FrontEnd 】
- 【 FrontEnd/Frame 】
- 【 FrontEnd/Node 】
- Font
- Hexo
- JavaScript
- LearnPS
- ResponseCode
- SVG
- ViewSolution
- extjs学习笔记
-
【 Functional 】
-
【 Go 】
-
【 Groovy 】
-
【 Java 】
- 【 Java/AdvancedLearning 】
- 【 JavaBasic 】
- 【 JavaCache 】
- 【 JavaCollection 】
- 【 JavaConcurrency 】
- 【 JavaMap 】
- Annotation
- ClassFile
- Collection
- Concurrency
- Deploy
- Exception
- ExtendsAndInterface
- Generics
- IO
- JDBC
- JDKAndJRE
- JMX
- JVM
- Java11
- Java7
- Java8
- JavaNetwork
- JavaReleaseVersion
- JavaWeb
- JvmPerformance
- MQ
- MultipleLanguage
- Proxy
- Reflection
- Serialize
- SyntaxAndType
- Thread
- WebPerformance
- 【 Java/Android 】
- 【 Java/Ecosystem 】
- 【 Java/MSA 】
- 【 Java/Spring 】
- 【 Java/TemplateEngine 】
- 【 Java/Test 】
- 【 Java/Tool 】
- 【 Java/thread 】
- AlibabaJavaStandard
- DesignPattern
- HashMap解析
- Java-NIO
- Java虚拟机
- Log
- MIS
- Quartz
- RESTful
- WebSocket学习笔记
- ZooKeeper学习笔记
- android学习笔记
- 【 Java/AdvancedLearning 】
-
【 Kotlin 】
-
【 Linux 】
- 【 Linux/Alpine 】
- 【 Linux/Arch 】
- 【 Linux/Base 】
- 【 Linux/Centos 】
- 【 Linux/Container 】
- 【 Linux/Debian 】
- 【 Linux/Tool 】
- JavaDevInit
- Linux系统学习
-
【 MyBlog 】
-
【 Python 】
- 【 Python/Tool 】
- Python
- PythonConcurrent
- PythonGUI
- PythonGame
- PythonNet
- PythonOffices
- PythonWeb
- Python基础
- Python核心学习
-
【 Reactive 】
-
【 Rust 】
-
【 Scala 】
-
【 Script 】
-
【 Skills 】
- 【 Skills/Application 】
- 【 Skills/CS 】
- 【 Skills/Cache 】
- 【 Skills/Councurrency 】
- 【 Skills/DevOps 】
- 【 Skills/Document 】
- 【 Skills/Ecology 】
- 【 Skills/Network 】
- 【 Skills/Search 】
- 【 Skills/SoftwareEngineering 】
- 【 Skills/Spider 】
- 【 Skills/Test 】
- 【 Skills/Vcs 】
- 【 Skills/Work 】
- AppManual
- CelebrityQuotes
- Miscellaneous
- Platform
- Problem
- Protobuf
- RegularExpression
- SoftwareDesignEngineer
- Website
-
【 Windows 】