Go Programming Intro
为什么学习Go?
- DLL,Jar地狱
- 项目管理工具, 包之间会产生冲突,包的依赖(版本),如果一个包出现安全问题,上千个系统都要更换
- Semantic version x.x.x, 特别是第一个编号的不一样,使得包的依赖更加
- 变更legacy code的继承方式有多难?
- 旧的代码和新的代码融合,还要写adapter,delegator
- 有多少次忘了关闭资源?
- JDBC, 及时你close statement,catch里面还要close一次
- Java不能做到多地运行
- 尽管JVM做了隔离,但是包的数量非常庞大,不兼容问题
Go语言
- 单个执行文件,没有动态库
- Duck Typing的面向对象,可以在后期增加接口
- Defer方式的关闭资源,永远不会忘掉
- 多种编译器,可以编译不同架构的可执行文件
- 更多的特性和功能支持编写更好的代码,例如协程(goroutine) Aaka
- Java本身不支持用户态线程,需要额外的包
- 单元测试、benchmarking
- gc的区别,Java还需要调很多参数,Go不需要
为程序员节省很多工作,从项目管理角度来说,代码风格统一等等
Go对C的调用很简单,Java还需要使用NIO
安装Go环境
Go的环境变量
- $GOROOT - Go的安装目录
- $GOPATH - 默认为$GOROOT, 是包含Go源代码、包以及二进制文件的目录列表
- $GOARCH - 处理器架构
- $GOOS - 目录机器的操作系统:darwin、freebsd、linux、windows
$GOBIN - $GOROOT/bin compile、link等文件
Go语言是根据处理器和操作系统去编译的
无论是通过源文件还是安装包安装,至少需要设置以上的环境变量
Linux
- 编辑.bashrc, 加入
- export GOROOT=$HOME/go
- export GOBIN=$GOROOT/bin
- export GOARCH=amd64
- export GOOS=linux
安装C语言工具
1
$ sudo apt-get install bison ed gawk gcc libc6-dev make
安装mercurial版本控制软件
1
$ sudo apt-get install mercurial
下载源代码
1
$ hg clone -u release https://go.googlecode.com/hg/ $GOROOT
编译
1
2$ cd $GOROOT/src
$ ./all.bash
- 编辑.bashrc, 加入
Mac OS
1
2$ brew install go
$ brew install godepWindows
- 直接下载安装包
Go的编译器、IDE
- Eclipse + Goclipse
- LiteIDE
- Intellij
- NetBean
- GoLand
MacOS10.13 安装example
下载 Go官方,直接.dmg安装包下载安装
配置环境参数
1
2
3$ which go
/usr/local/go/bin/go
$ open .bash_profile添加以下参数到.bash_profile
export GOROOT=”/usr/local/go/bin/“
export PATH=”$GOROOT:$PATH”
export GOPATH=”/Users/allen/Documents/Code/workspace06/w1/“
export PATH=”$GOPATH:$PATH”
export GOBIN=”/Users/allen/Documents/Code/workspace06/w1/bin”
export PATH=”$GOBIN:$PATH”1
2
3$ . .bash_profile
$ go version
go version go1.9.2 darwin/amd64
IDE Golang 下载安装包即可
入门第一个小程序
程序
package main
import "fmt"
func createMessage(name string) string{
if len(name) == 0 {
return "Hello world";
} else {
return "Hello " + name;
}
}
func main() {
fmt.Println(createMessage("Tom"));
}
结果