标签:Go语言 简介
Go语言开发(一)、Go语言简介Go,全称golang,是Google开发的一种静态强类型、编译型、并发型并具有垃圾回收功能的编程语言。 Go从2007年末由Robert Griesemer、Rob Pike、Ken Thompson(C语言发明者)主持开发,于2009年11月正式宣布成为开放源代码项目,并在Linux及Mac OS X平台上进行了实现,后续增加了Windows平台的实现。2012年初,Go语言官方发布了Go 1.0稳定版本,目前Go语言基于1.x每半年发布一个版本。
Go语言优点如下:
A、可直接编译成机器码
B、丰富的标准库支持
C、内置强大的工具
D、支持跨平台编译
E、支持自动垃圾回收
F、更丰富的内置类型支持
G、支持函数多返回值
H、错误处理支持
I、支持匿名函数和闭包
J、支持类型和接口
L、支持并发编程
M、支持反射
N、支持与C语言交互
Go语言缺点如下:
A、缺少框架
B、软件包管理不完善
Go语言主要用途如下:
A、服务器编程,如处理日志、数据打包、虚拟机处理、文件系统等
B、分布式系统,数据库代理器等
C、网络编程,如Web应用、API应用、下载应用
D、内存数据库,如groupcache、couchbase的部分组建
E、云平台,目前国外很多云平台在采用Go开发,CloudFoundy的部分组建,前VMare的技术总监自己出来搞的apcera云平台。
Go语言支持以下系统:
A、Linux
B、FreeBSD
C、Mac OS X(Darwin)
D、Windows
Go语言环境安装包下载地址:
https://golang.org/dl/
https://golang.google.cn/dl/
根据操作系统平台下载相应的Go语言环境安装包。
将下载的源码包解压至/usr/local目录sudo tar -C /usr/local -xzf go1.10.1.linux-amd64.tar.gz
将 /usr/local/go/bin目录添加至PATH环境变量
export PATH=$PATH:/usr/local/go/bin
MAC平台可以使用.pkg结尾的安装包直接双击来完成安装,安装目录在 /usr/local/go/下。brew install go
Windows平台可以使用.msi 后缀的安装包来安装。
默认情况下.msi文件会安装在c:\Go目录下,可以将 c:\Go\bin目录添加到PATH环境变量中。添加后需要重启命令窗口才能生效。
Go语言自带有一套完整的命令操作工具,可以通过在命令行中执行go或go help来查看:
go build命令主要用于测试编译。在包的编译过程中,若有必要,会同时编译与依赖包。
如果是普通包,执行go build命令后不会产生任何文件。
如果是main包,执行go build命令后,会在当前目录下生成一个可执行文件。如果需要在$GOPATH/bin木下生成相应的exe文件,需要执行go install 或者使用 go build -o 路径/a.exe。
如果某个文件夹下有多个文件,而只想编译其中某一个文件,可以在go build之后加上文件名,例如go build a.go。go build命令默认会编译当前目录下的所有go文件。
可以指定编译输出的文件名。比如,可以指定go build -o myapp,默认情况是package名(非main包),或者是第一个源文件的文件名(main包)。
go build会忽略目录下以"_"或者”."开头的go文件。
如果源代码针对不同的操作系统需要不同的处理,那么可以根据不同的操作系统后缀来命名文件。例如有一个读取数组的程序,对于不同的操作系统可能有如下几个源文件:
array_linux.go
array_darwin.go
array_windows.go
array_freebsd.go
go build时会选择性地编译以系统名结尾的文件(Linux、Darwin、Windows、Freebsd)。Linux系统下面编译只会选择array_linux.go文件,其它系统命名后缀文件全部忽略。
如果直接使用,表示试图编译当前目录所对应的代码包,如果当前目录不是一个有效的代码包(包含在 $GOPATH/src 目录下)则会报错;如果带上代码包名,则表示编译指定的代码包;如果带上源码文件,则表示编译指定源码文件。
GO语言的源码文件分为三类,包括命令源码文件、库源码文件和测试源码文件。如果编译的是命令源码文件,或包含命令源码文件的包(main包)时,编译通过后会生成可执行文件;反之则不会生成任何文件,只是做检查性编译。
可以在执行go build命令时,加上一些标记,如:
-v 标记,可以把命令执行过程中构建的包名(包含编译过程中依赖的包)打印出来,如果 go build 的是一个源码文件,则会打印出的包名为?command-line-arguments,这是编译源码文件时生成的虚拟包名,所以看到不用觉得奇怪。
-x 标记,可以打印编译期间所用到的所有shell命令。
-o 标记,用来指定生成文件的路径和名称。
-a 标记,强制重新编译。
-buildmode=shared标记,指定当前编译生成的结果类型,如静态库和动态库。GO语言默认使用静态编译,好处是部署时非常简单,但使用动态库,可以减少分发包的大小。目前在windows下尚不支持编译成动态库。
如果是直接使用,表示试图编译当前目录所对应的代码包,如果当前目录不是一个有效的代码包(包含在 $GOPATH/src 目录下)则会报错;如果带上代码包名,则表示编译指定的代码包;如果带上源码文件,则表示编译指定源码文件。
go clean命令用来移除当前源码包里面编译生成的文件,包括:
_obj/ 旧的object目录,由Makefiles遗留
_test/ 旧的test目录,由Makefiles遗留
_testmain.go 旧的gotest文件,由Makefiles遗留
test.out 旧的test记录,由Makefiles遗留
build.out 旧的test记录,由Makefiles遗留
*.[568ao] object文件,由Makefiles遗留
DIR(.exe) 由 go build 产生
DIR.test(.exe) 由 go test -c 产生
MAINFILE(.exe) 由 go build MAINFILE.go产生
go fmt命令主要用来格式化代码文件。
开发工具一般都带有保存时自动格式化功能,底层其实就是调用了go fmt 命令。
gofmt -w src,可以格式化整个项目。
go get命令主要用来动态获取远程代码包,目前支持BitBucket、GitHub、Google Code和Launchpad。go get命令在内部分成两步操作:第一步是下载源码包,第二步是执行go install。下载源码包的go工具会自动根据不同的域名调用不同的源码工具,对应关系如下:
BitBucket (Mercurial Git)
GitHub (Git)
Google Code Project Hosting (Git, Mercurial, Subversion)
Launchpad (Bazaar)
为了go get能正常工作,必须确保安装合适的源码管理工具,并同时把源码管理工具命令加入到PATH中。
go get 命令本质上是首先通过源码工具clone代码到src目录,然后执行go install。
go install命令在内部分成两步操作:第一步是生成结果文件(可执行文件或者.a包),第二步会把编译好的结果移到?$GOPATH/pkg 或者$GOPATH/bin。
.exe文件: 一般是go install带main函数的go文件产生的,有函数入口,所有可以直接运行。
.a应用包: 一般是 go install不包含main函数的go文件产生的,没有函数入口,只能被调用。
go test命令会自动读取源码目录下面名为*_test.go的文件,生成并运行测试用的可执行文件。
默认不需要任何参数,go test命令会自动把源码包里所有test文件测试完毕,帮助信息可以使用go help testflag查看。
进行单元测试的工具,单元测试代码建议与被测试代码放在同一个代码包中,并以 "_test.go" 为后期,测试函数建议以"Test"为名称前缀。go test命令可以对代码包进行测试,也可以指定某个测试代码文件运行(要一并带上被测试代码文件)
go doc命令是一个很强大的文档工具,用于查看文档,如查看builti包执行go doc builtin,查看http包执行go doc net/http。查看某一个包里的函数,执行go doc fmt Printf,也可以查看函数相应的代码,执行go doc -src fmt Printf。
通过命令在命令行执行godoc -http=:端口号,比如godoc -http=:8080。然后在浏览器中打开127.0.0.1:8080,会看到一个golang.org的本地copy版本,通过网页可以查询pk文档等其它内容。如果设置了GOPATH,pkg分类下会列出标准包的文档,本地GOPATH中所有项目的相关文档。
go fix用来修复老版本的代码到新版本,例如go1前老版本的代码转化到go1。
go version命令用于查看go当前的版本。
go env命令用于查看当前go的环境变量,用于打印GO语言的环境信息,如GOPATH是工作区目录,GOROOT是GO语言安装目录,GOBIN是通过go install命令生成可执行文件的存放目录(默认是当前工作区的bin目录下),GOEXE为生成可执行文件的后缀。
go list命令用于列出当前全部安装的package。
go run命令用于编译并运行Go程序,只能作用于命令源码文件,一般用于开发中快速测试。
go tool命令工具,go tool pprof性能检查工具,? ?go tool cgo跟C语言和GO语言有关的命令。
go vet是静态检查工具,用于一般项目快完成时进行进行优化。
go bug命令用于GO语言调试。
通过扫描Go源码中的特殊注释来识别要运行的常规命令。go generate不是go build的一部分,go generate不包含依赖关系分析,必须在运行go build前显式运行。go generate由Go package的作者使用,而不是其客户端。
go help xx命令用于查看帮助信息,如go help bug用于查看go bug的帮助信息。
LiteIDE是一款开源、跨平台的轻量级Go语言集成开发环境(IDE)。
下载地址 :http://sourceforge.net/projects/liteide/files/
源码地址 :https://github.com/visualfc/liteide
Goland是由捷克JetBrains公司旨在为go开发者提供的一个符合人体工程学的新的商业IDE。Goland整合了IntelliJ平台的有关go语言的编码辅助功能和工具集成特点,特点如下:
A、编码辅助功能
Goland会分析开发者代码,在符号之间寻找连接。提供代码提示,快速导航,灵活的错误分析能力以及格式化和重构功能。
B、符合人体工程学的设计
强大的静态代码分析能力和符合人体工程学的设计,使开发者不仅仅是在工作,更是一种愉快的编程体验。
C、工具的集成
关键任务工具,例如代码覆盖工具,功能齐全的调试器和版本控制都集成在一起,而不会有一些随意安装的插件。
D、IntelliJ插件生态系统
除了丰富的内置工具,如果需要任何东西,在IntelliJ插件生态系统中都可以找到。
官方网址:https://www.jetbrains.com/go/
Goland安装完后需要对Go开发环境进行配置。
点击Configure->Settings菜单,配置如下:
package main
import "fmt"
func main() {
fmt.Println("Hello, World!")}
go run helloworld.go
打印出:Hello, World!
标签:Go语言 简介
原文地址:http://blog.51cto.com/9291927/2126775