Go语言是一门跟C非常接近的语言,对于C系(C/C++,Java)语言熟悉的新手可以很快上手。但是Go语言又有自己的一些特点,本文主要目的是让初学者了解这些特点,从而快速的上手。
一、安装
wget https://storage.googleapis.com/golang/go1.8.3.linux-amd64.tar.gz tar -C /usr/local -xvzf go1.8.3.linux-amd64.tar.gz上述步骤将go安装到/usr/local/go目录下面,也可以安装到其他任何位置。安装后需要设置环境变量。
>export GOROOT=/usr/local/go:就是安装Go的主目录,go命令就来自于$GOROOT/bin/go。
>export GOPATH=/home/niuliguo/workspace/goworkspace:可以把GOPATH看做是一个工作空间,这个是一个必须的变量,Go是通过GOPATH来解决依赖的,而且源文件也要组织放在$GOPATH/src目录下。
>export PATH=$PATH:$GOPATH/bin:$GOROOT/bin,把二进制可执行文件添加到PATH变量中。
以上三句话可以放到~/.bash:
export GOROOT=/usr/local/go export GOPATH=/home/niuliguo/workspace/goworkspace export PATH=$PATH:$GOPATH/bin:$GOROOT/bin然后执行:
>source ~/.bashrc
二、Hello World
创建目录和文件:
mkdir -p $GOPATH/src/hello cd $GOPATH/src/hello vim hello.gohello.go:
package main import ( "fmt" ) func main() { fmt.Println("Hello world") }运行文件:
>go run hello.go
go run hello.go:将hello.go编译成二进制可执行程序,然后再运行。
go build / ./hello:在当前目录下编译二进制文件
go install:将可执行文件安装到$GOPATH/bin目录下
三、依赖管理
Go依赖管理的基本单位是 package ,简而言之,当你把所有 *.go 文件放到一个目录下时,它们就是同一个package。
3.1 标准库package
标准库package是指Golang内置的package,例如 fmt,strings等,导入这些库比较简单,只需要import “$package_name" 即可,go编译器会在GOROOT中找到这些依赖的。需要注意的是Go 允许 sub package的, 例如 math/rand,crypto/rand 等, 在引入sub package时,sub package最后一部分作为package name,所以前面两个sub package的名字都是rand,当它们出现在同一个源文件中时就会出现冲突(这种情况是比较少见)。Go允许在import package时重命名package , 例如 import crand "crypto/rand" ,这时候 crypto/rand就便成 crand了,其作用类似于Python的 import ... as 语句。
3.2 第三方package
目前绝大多数第三方package都是通过github以源码的方式发布的,所以有两种方式可以安装第三方package
a.手动clone 源码到 $GOPATH/src 下,然后引用方法类似预自己写的package
b.Go 依赖管理支持自动clone,例如go getgithub.com/mitchellh/mapstructure
可以将repo自动clone下来并编译,然后在代码直接引用就可以了。需要注意的是这时候package 名字将变成这样import "github.com/mitchellh/mapstructure"