Go语言开发(一)、Go语言简介

Go语言开发(一)、Go语言简介

一、Go语言简介

1、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每半年发布一个版本。

2、Go语言的优点

Go语言优点如下:
A、可直接编译成机器码
B、丰富的标准库支持
C、内置强大的工具
D、支持跨平台编译
E、支持自动垃圾回收
F、更丰富的内置类型支持
G、支持函数多返回值
H、错误处理支持
I、支持匿名函数和闭包
J、支持类型和接口
L、支持并发编程
M、支持反射
N、支持与C语言交互

3、Go语言的缺点

Go语言缺点如下:
A、缺少框架
B、软件包管理不完善

4、Go语言用途

Go语言主要用途如下:
A、服务器编程,如处理日志、数据打包、虚拟机处理、文件系统等
B、分布式系统,数据库代理器等
C、网络编程,如Web应用、API应用、下载应用
D、内存数据库,如groupcache、couchbase的部分组建
E、云平台,目前国外很多云平台在采用Go开发,CloudFoundy的部分组建,前VMare的技术总监自己出来搞的apcera云平台。

二、Go语言环境安装

1、Go语言环境下载

Go语言支持以下系统:
A、Linux
B、FreeBSD
C、Mac OS X(Darwin)
D、Windows
Go语言环境安装包下载地址:
https://golang.org/dl/
https://golang.google.cn/dl/

根据操作系统平台下载相应的Go语言环境安装包。

2、Linux平台安装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

3、MAC平台安装Go语言环境

MAC平台可以使用.pkg结尾的安装包直接双击来完成安装,安装目录在 /usr/local/go/下。
brew install go

4、Windows平台安装Go语言环境

Windows平台可以使用.msi 后缀的安装包来安装。
默认情况下.msi文件会安装在c:\Go目录下,可以将 c:\Go\bin目录添加到PATH环境变量中。添加后需要重启命令窗口才能生效。

三、Go命令行工具

1、Go命令简介

Go语言自带有一套完整的命令操作工具,可以通过在命令行中执行go或go help来查看:

2、go build

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 目录下)则会报错;如果带上代码包名,则表示编译指定的代码包;如果带上源码文件,则表示编译指定源码文件。

3、go clean

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产生

4、go fmt

go fmt命令主要用来格式化代码文件。
开发工具一般都带有保存时自动格式化功能,底层其实就是调用了go fmt 命令。
gofmt -w src,可以格式化整个项目。

5、go get

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。

6、go install

go install命令在内部分成两步操作:第一步是生成结果文件(可执行文件或者.a包),第二步会把编译好的结果移到?$GOPATH/pkg 或者$GOPATH/bin。
.exe文件: 一般是go install带main函数的go文件产生的,有函数入口,所有可以直接运行。
.a应用包: 一般是 go install不包含main函数的go文件产生的,没有函数入口,只能被调用。

7、go test

go test命令会自动读取源码目录下面名为*_test.go的文件,生成并运行测试用的可执行文件。
默认不需要任何参数,go test命令会自动把源码包里所有test文件测试完毕,帮助信息可以使用go help testflag查看。
进行单元测试的工具,单元测试代码建议与被测试代码放在同一个代码包中,并以 "_test.go" 为后期,测试函数建议以"Test"为名称前缀。go test命令可以对代码包进行测试,也可以指定某个测试代码文件运行(要一并带上被测试代码文件)

8、go doc

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中所有项目的相关文档。

9、go fix

go fix用来修复老版本的代码到新版本,例如go1前老版本的代码转化到go1。

10、go version

go version命令用于查看go当前的版本。

11、go env

go env命令用于查看当前go的环境变量,用于打印GO语言的环境信息,如GOPATH是工作区目录,GOROOT是GO语言安装目录,GOBIN是通过go install命令生成可执行文件的存放目录(默认是当前工作区的bin目录下),GOEXE为生成可执行文件的后缀。

12、go list

go list命令用于列出当前全部安装的package。

13、go run

go run命令用于编译并运行Go程序,只能作用于命令源码文件,一般用于开发中快速测试。

14、go tool

go tool命令工具,go tool pprof性能检查工具,? ?go tool cgo跟C语言和GO语言有关的命令。

15、go vet

go vet是静态检查工具,用于一般项目快完成时进行进行优化。

16、go bug

go bug命令用于GO语言调试。

17、go generate

通过扫描Go源码中的特殊注释来识别要运行的常规命令。go generate不是go build的一部分,go generate不包含依赖关系分析,必须在运行go build前显式运行。go generate由Go package的作者使用,而不是其客户端。

18、go help

go help xx命令用于查看帮助信息,如go help bug用于查看go bug的帮助信息。

四、Go语言开发环境

1、LiteIDE

LiteIDE是一款开源、跨平台的轻量级Go语言集成开发环境(IDE)。
下载地址 :http://sourceforge.net/projects/liteide/files/
源码地址 :https://github.com/visualfc/liteide

2、GoLand

Goland是由捷克JetBrains公司旨在为go开发者提供的一个符合人体工程学的新的商业IDE。Goland整合了IntelliJ平台的有关go语言的编码辅助功能和工具集成特点,特点如下:
A、编码辅助功能
Goland会分析开发者代码,在符号之间寻找连接。提供代码提示,快速导航,灵活的错误分析能力以及格式化和重构功能。
B、符合人体工程学的设计
强大的静态代码分析能力和符合人体工程学的设计,使开发者不仅仅是在工作,更是一种愉快的编程体验。
C、工具的集成
关键任务工具,例如代码覆盖工具,功能齐全的调试器和版本控制都集成在一起,而不会有一些随意安装的插件。
D、IntelliJ插件生态系统
除了丰富的内置工具,如果需要任何东西,在IntelliJ插件生态系统中都可以找到。
官方网址:https://www.jetbrains.com/go/
Goland安装完后需要对Go开发环境进行配置。

点击Configure->Settings菜单,配置如下:

五、Go语言示例

1、helloworld.go编写

package main
import "fmt"

func main() {
   fmt.Println("Hello, World!")}

2、编译执行

go run helloworld.go
打印出:Hello, World!

原文地址:http://blog.51cto.com/9291927/2126775

时间: 2024-10-11 16:29:09

Go语言开发(一)、Go语言简介的相关文章

嵌入式linux C++语言(一)——C++简介

嵌入式linux C++语言(一)--C++简介 一.C++简介 C语言作是结构化和模块化的语言,适合处理较小规模的程序.对于复杂的问题,规模较大的程序,需要高度的抽象和建模时,C语言并不合适.为了解决软件危机, 20世纪80年代, 计算机界提出了OOP(object oriented programming)思想,支持面向对象的程序设计语言应运而生.Smalltalk 就是当时问世的一种面向对象的语言.在实践工作中,由于C语言的广泛使用,在C语言的基础上根据面向对象的思想发展了C语言,形成了C

安装Go语言开发环境

安装Go语言开发环境实例代码 - 详述Go语言安装所在需要的工作:安装C语言工具,安装Mercurial,更新go到新版本等操作实例. 安装go环境 1.简介 Go是一个开源项目,采用BSD授权协议. 该文档介绍如何获取Go源代码,如何编译,以及如何运行Go程序. 目前有两种方式使用Go语言.这里主要讲述如何使用Go专用的gc系列工具 (6g.8g等).另一个可选的编译器是 基于gcc后端的 gccgo编译器.关于gccgo的细节清参考安装并使用gccgo编译器 . Go编译器可以支持三种指令集

Go语言开发(二)、Go语言基础

Go语言开发(二).Go语言基础 一.Go语言程序结构 Go语言程序基本结构如下:A.包声明B.引入包C.函数D.变量E.语句 & 表达式F.注释 package main //包声明 import "fmt" //引入包 func main(){ //main函数 //打印Hello World fmt.Print("Hello World!") } 二.Go语言基础语法 1.Go语言标记 Go语言程序由多个标记组成,可以是关键字.标识符.常量.字符串.符

Go语言开发(三)、Go语言内置容器

Go语言开发(三).Go语言内置容器 一.Go语言数组 1.Go语言数组简介 Go语言提供了数组类型的数据结构.数组是具有相同唯一类型的一组已编号且长度固定的数据项序列,类型可以是任意的原始类型例如×××.字符串或者自定义类型.相对于去声明number0, number1, ..., and number99的变量,使用数组形式numbers[0], numbers[1] ..., numbers[99]更加方便且易于扩展.数组元素可以通过索引(位置)来读取(或者修改),索引从0开始,第一个元素

Go语言开发(四)、Go语言面向对象

Go语言开发(四).Go语言面向对象 一.结构体和方法 1.结构体的定义 在结构体中可以为不同项定义不同的数据类型.结构体是由一系列具有相同类型或不同类型的数据构成的数据集合.结构体定义需要使用type和struct语句.struct语句定义一个新的数据类型,结构体有中有一个或多个成员.type语句设定了结构体的名称.结构体的格式如下: type struct_variable_type struct { member definition; member definition; ... mem

Go语言开发(五)、Go语言面向接口

Go语言开发(五).Go语言面向接口 一.Duck Typing简介 1.Duck Typing简介 对于一门强类型的静态语言来说,要想通过运行时多态来隔离变化,多个实现类就必须属于同一类型体系,必须通过继承的方式与同一抽象类型建立is-a关系.而Duck Typing则是一种基于特征,而不是基于类型的多态方式.Duck Typing仍然关心is-a,只不过is-a关系是以对方是否具备相关的特征来确定的.是否满足is-a关系可以使用所谓的鸭子测试(Duck Test)进行判断."当看到一只鸟走起

Go语言开发(六)、Go语言闭包

Go语言开发(六).Go语言闭包 一.函数式编程 1.函数式编程简介 函数式编程是一种编程模型,将计算机运算看作是数学中函数的计算,并且避免了状态以及变量的概念.在面向对象思想产生前,函数式编程已经有数十年的历史.随着硬件性能的提升以及编译技术和虚拟机技术的改进,一些曾被性能问题所限制的动态语言开始受到关注,Python.Ruby和Lua等语言都开始在应用中崭露头角.动态语言因其方便快捷的开发方式成为很多人喜爱的编程语言,伴随动态语言的流行,函数式编程也开始流行. 2.函数式编程的特点 函数式编

Go语言开发(七)、Go语言错误处理

Go语言开发(七).Go语言错误处理 一.defer延迟函数 1.defer延迟函数简介 defer在声明时不会立即执行,而是在函数return后,再按照FILO(先进后出)的原则依次执行每一个defer,一般用于异常处理.释放资源.清理数据.记录日志等.每次defer语句执行时,defer修饰的函数的返回值和参数取值会照常进行计算和保存,但是defer修饰的函数不会执行.等到上一级函数返回前,会按照defer的声明顺序倒序执行全部defer的函数.defer所修饰函数的任何返回值都会被丢弃.如

java语言开发环境

[如何搭建Java开发环境] [简介] JDK的全称是 Java Development Kit,即Java标准版开发包.Sun公司提供的一套用于开发Java应用程序的开发包,提供了编译.运行Java程序所需的各种工具和资源.包括Java编译器.Java运行时环境,以及常用的Java类库等. Java运行时环境(Java Runtime Environment)JRE.是运行Java程序的必须条件. JRM包含JVM. JVM是运行Java程序的核心虚拟机. JRM包含JVM.类加载器.字节码校