内容简介:Go语言(或称Golang)是云计算时代的C语言。Go语言的诞生是为了让程序员有更高效的生产效率,Go语言专门针对多处理器系统应用程序的编程进行了优化,使用Go语言编译的程序可以媲美C或C++代码的速度,而且更加安全、支持并行进程。
1 Go 语言初识
1.1 语言简介
1.1.1语言的历史
Go 是一个开源的编程语言,它能让构造简单、可靠且高效的软件变得容易。
Go 是从 2007 年末由 Robert Griesemer, Rob Pike, Ken Thompson 主持开发,后来还加入了 Ian Lance Taylor, Russ Cox 等人,并最终于 2009 年 11 月开源,在 2012 年早些时候发布了 Go 1 稳定版本。现在 Go 的开发已经是完全开放的,并且拥有一个活跃的社区。
Go语言(或称Golang)是云计算时代的C语言。Go语言的诞生是为了让 程序员 有更高效的生产效率,Go语言专门针对多处理器系统应用程序的编程进行了优化,使用Go语言编译的程序可以媲美C或C++代码的速度,而且更加安全、支持并行进程。
开发人员在为项目选择语言时,不得不在快速开发和性能之间做出选择。C和C++这类语言提供了很快速的执行速度,而 Ruby 和 Python 这类语言则擅长快速开发。Go语言在这两者间架起了桥梁,不仅提供了高性能的语言,同时也让开发更快速。
1.1.2 语言的用途
Go 语言被设计成一门应用于搭载 Web 服务器,存储集群或类似用途的巨型中央服务器的系统编程语言。
对于高性能分布式系统领域而言, Go 语言无疑比大多数其它语言有着更高的开发效率。它提供了海量并行的支持,这对于游戏服务端的开发而言是再好不过了。
1.1.3 语言的特点
计算机软件经历了数十年的发展,形成了多种学术流派,有面向过程编程、面向对象编程、函数式编程、面向消息编程等,这些思想究竟孰优孰劣,众说纷纭。
除了 OOP 外,近年出现了一些小众的编程哲学, Go 语言对这些思想亦有所吸收。例如, Go 语言接受了函数式编程的一些想法,支持匿名函数与闭包。再如, Go 语言接受了以 Erlang 语言为代表的面向消息编程思想,支持 goroutine 和通道,并推荐使用消息而不是共享内存来进行并发编程。总体来说, Go 语言是一个非常现代化的语言,精小但非常强大。
为了保持语言的简洁和简单,按照类似的语言省略常用的功能。
Go 语言的特性有:
- 不支持类型继承
- 不支持任何方法或运算符重载
- 不支付包之间循环依赖
- 不支持对指针运算
- 不支持断言
- 不支持泛型编程
- 自动垃圾回收
- 更丰富的内置类型
- 函数多返回值
- 错误处理
- 匿名函数和闭包
- 类型和接口
- 并发编程
- 语言交互性
- 简洁、快速、安全
- 并行、有趣、开源
- 编译迅速
1.1.4 语言的优势
- 可直接编译成机器码,不依赖其他库,glibc的版本有一定要求,部署就是扔一个文件上去就完成了。
- 静态类型语言,但是有动态语言的感觉,静态类型的语言就是可以在编译的时候检查出来隐藏的大多数问题,动态语言的感觉就是有很多的包可以使用,写起来的效率很高。
- 语言层面支持并发,这个就是Go最大的特色,天生的支持并发。Go就是基因里面支持的并发,可以充分的利用多核,很容易的使用并发。
- 内置runtime,支持垃圾回收,这属于动态语言的特性之一,虽然目前来说GC(内存垃圾回收机制)不算完美,但是足以应付我们所遇到的大多数情况,特别是Go1.1之后的GC。
- 简单易学,Go语言的作者都有C的基因,那么Go自然而然就有了C的基因。Go关键字是25个,但是表达能力很强大,几乎支持大多数你在其他语言见过的特性:继承、重载、对象等。
- 丰富的标准库。Go目前已经内置了大量的库,特别是网络库非常强大。
- 内置强大的工具,Go目前已经内置了很多 工具 链,最好的应该是gofmt工具,自动格式化代码,能够让团队review变得如此的简单,代码格式一摸一样,都不一样都很困难。
- 跨平台编译,如果你写的Go代码不包括cgo,那么就可以做到windows系统编译 linux 的应用,如何做到的呢?Go引用了plan9的代码,这就是不依赖系统的信息。
- 内嵌C支持,Go里面也可以直接包含C代码,利用现有的丰富的C库。
1.1.5 语言的应用
- 服务器编程,以前你如果使用C或者C++做的那些事情,用Go来做很适合,例如处理日志、数据打包、虚拟机处理、文件系统等。
- 分布式系统,数据库代理器等。
- 网络编程,这一块目前应用最广,包括Web应用、API应用、下载应用。
- 内存数据库,如Google开发的groupcache,couchbase的部分组建。
- 云平台,目前国外很多云平台在采用Go开发,CloudFoundy的部分组建,前VMare的技术总监自己出来搞的apcera云平台。
1.2 环境搭建
1.2.1 安装和设置
(1)在线编辑
在学习 Go 语言编程之前,我们需要安装和配置好 Go 语言的开发环境。可以选择线上的编译器: http://tour.golang.org/welcome/1 来直接执行代码。
注:由于某种原因,golang官网被国内屏蔽。你可以去 http://www.yinchengxueyuan.com/forum.php 索取。或是使用代理来访问外部网站。
(2)本地编辑
在自己的计算机上安装开发编译环境。
Go 语言支持以下系统:
- Linux
- FreeBSD
- Mac OS X(也称为 Darwin)
- Window
安装包下载地址为: https://golang.org/dl/ 。 各个系统对应的包名:
1)UNIX/Linux/Mac OS X, 和 FreeBSD 安装
以下介绍了在UNIX/Linux/Mac OS X, 和 FreeBSD系统下使用源码安装方法:
①下载源码包:go1.10.1.linux-amd64.tar.gz
②将下载的源码包解压至 /usr/local目录
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/ 下。
2)Windows 系统下安装
Windows 下可以使用 .msi 后缀(在下载列表中可以找到该文件,如go1.4.2.windows-amd64.msi)的安装包来安装。默认情况下.msi文件会安装在 C:\Go 目录下。你可以将 C:\Go\bin 目录添加到 PATH环境变量中。添加后你需要重启命令窗口才能生效。
在cmd中输入go,如果出现如下内容,则说明安装成功。
1.2.2 标准命令概述
Go语言中包含了大量用于处理Go语言代码的命令和工具。其中,go命令就是最常用的一个,它有许多子命令。这些子命令都拥有不同的功能,如下所示:
- build:用于编译给定的代码包或Go语言源码文件及其依赖包。
- clean:用于清理执行其他go命令后遗留的目录和文件。
- doc:用于执行godoc命令以打印指定代码包。
- env:用于打印Go语言环境信息。
- fix:用于执行go tool fix命令以修正给定代码包的源码文件中包含的过时语法和代码调用。
还有:fmt、generate、get、install、list、run、test、tool、version、vet
1.2.3 学习资料
Go语言官网:http://golang.org/
go中文社区:https://studygolang.com
go中文在线文档:https://studygolang.com/pkgdoc
1.3 第一个Go程序
1.3.1 Hello World
在Windows系统下进行安装后的测试。创建工作目录 C:\>Go_WorkSpace。 文件名: test.go,代码如下:
package main import "fmt" func main() { fmt.Println("Hello World!") }
注意:要想对中文的支持必须把文件的格式变为UTF-8编码
1.3.2 代码分析
Go 语言的基础组成有以下几个部分:
- 包声明
- 引入包
- 函数
- 变量
- 语句 & 表达式
- 注释
接下来让我们来看下简单的代码,该代码输出了"Hello World!":
package main import "fmt" func main() { /* 打印Hello World! */ fmt.Println("Hello World!") }
让我们来看下以上程序的各个部分:
- 第一行代码 package main 定义了包名。你必须在源文件中非注释的第一行指明这个文件属于哪个包,如:package main。package main表示一个可独立执行的程序,每个 Go 应用程序都包含一个名为 main 的包。
- 下一行 import "fmt" 告诉 Go 编译器这个程序需要使用 fmt 包(的函数,或其他元素),fmt 包实现了格式化 IO(输入/输出)的函数。
- 下一行 func main() 是程序开始执行的函数。main 函数是每一个可执行程序所必须包含的,一般来说都是在启动后第一个执行的函数(如果有 init() 函数则会先执行该函数)。
- 下一行 /*...*/ 是注释,在程序执行时将被忽略。单行注释是最常见的注释形式,你可以在任何地方使用以 // 开头的单行注释。多行注释也叫块注释,均已以 /* 开头,并以 */ 结尾,且不可以嵌套使用,多行注释一般用于包的文档描述或注释成块的代码片段。
- 下一行 fmt.Println(...) 可以将字符串输出到控制台,并在最后自动增加换行字符 \n。 使用 fmt.Print("Hello world\n") 可以得到相同的结果。 Print 和 Println 这两个函数也支持使用变量,如:fmt.Println(arr)。如果没有特别指定,它们会以默认的打印格式将变量 arr 输出到控制台。
- 当标识符(包括常量、变量、类型、函数名、结构字段等等)以一个大写字母开头,如:Group1,那么使用这种形式的标识符的对象就可以被外部包的代码所使用(客户端程序需要先导入这个包),这被称为导出(像面向对象语言中的 public);标识符如果以小写字母开头,则对包外是不可见的,但是他们在整个包的内部是可见并且可用的(像面向对象语言中的 protected )。
//1)go语言以包作为管理单位 //2)每个文件必须先声明包 //3)程序必须有一个main包(重要) package main //属于可以执行的文件 import "fmt" //导入fmt模块实现输入输出 /* func 函数 main 主要执行函数 ()参数 {}函数体 */ //入口函数 func main() { //左括号必须和函数名同行 //打印 //"Hello,World!"打印到屏幕,Println()会自动换行 //调用函数,大部分都需要导入包 fmt.Println("Hello World!") //go语言语句结尾没有分号 /* 这也是注释,是块注释 */ }
- 入口。go有且只有一个入口函数,main
- 调用函数
- go以包作为管理单位
1.3.3 命令行运行程序
让我们来看下如何编写 Go 代码并执行它。步骤如下:
- 打开编辑器,如Goland,将以上代码添加到编辑器中。
- 将以上代码保存为 test.go
- 打开命令行,并进入程序文件保存的目录中,如C:\Go_WorkSpace。
- 输入命令 go run test.go 并按回车执行代码。
- 如果操作正确你将在屏幕上看到 "Hello World!" 字样的输出。
使用 go 命令执行以上代码输出结果如下:
C:\Go_WorkSpace>go run test.go Hello, World!
1.4 Go程序的一般结构
// 当前程序的包名 package main // 导入其他包 import . "fmt" // 常量定义 const PI = 3.14 // 全局变量的声明和赋值 var name = "gopher" // 一般类型声明 type newType int // 结构的声明 type gopher struct{} // 接口的声明 type golang interface{} // 由main函数作为程序入口点启动 func main() { Println("Hello World!") }
- Go 程序是通过 package 来组织的。
- 只有 package 名称为 main 的包可以包含 main 函数。
- 一个可执行程序有且仅有一个 main 包。
- 通过 import 关键字来导入其他非 main 包。
可以通过 import 关键字单个导入:
import "fmt" import "io"
也可以同时导入多个:
import ( "fmt", "io" )
使用 <PackageName>.<FunctionName> 调用:
package main // 为fmt起别名为fmt2 import fmt2 "fmt" func main(){ fmt2.Println("Hello world!") }
省略调用(不建议使用):
// 调用的时候只需要Println(),而不需要fmt.Println() import . "fmt"
前面加个点表示省略调用,那么调用该模块里面的函数,可以不用写模块名称了:
import . "fmt" func main (){ Println("Hello world!") }
- 通过 const 关键字来进行常量的定义。
- 通过在函数体外部使用 var 关键字来进行全局变量的声明和赋值。
- 通过 type 关键字来进行结构(struct)和接口(interface)的声明。
- 通过 func 关键字来进行函数的声明。
可见性规则
Go语言中,使用大小写来决定该常量、变量、类型、接口、结构或函数是否可以被外部包所调用。
函数名首字母小写即为 private:
func function() {}
函数名首字母大写即为 public:
func Function() {}
新浪微博:古老医麦
技术交流论坛:http://www.yinchengxueyuan.com/forum.php
以上所述就是小编给大家介绍的《Golang——1_语言初识》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。