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.go
hello.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 get github.com/mitchellh/mapstructure
可以将repo自动clone下来并编译,然后在代码直接引用就可以了。需要注意的是这时候package 名字将变成这样 import "github.com/mitchellh/mapstructure"
这里介绍Vim 配置主要是因为Vim不需要GUI桌面环境,有时候ssh 远程开发十分方便。Go 有几个不同的Vim插件,综合比较下来功能最强大的是 fatih/vim-go ,其功能包括
可以按照官方步骤安装,也可以clone我配置好的.vim环境
cd ~
git clone https://github.com/bluesalt/DOTVim .vim
ln -s .vim/.vimrc
打开一个.go 文件,按提示安装就可以了。
Author:忆之独秀
Email:leaguenew@qq.com
注明出处:http://blog.csdn.net/lavorange/article/details/73254637