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语言在这两者间架起了桥梁,不仅提供了高性能的语言,同时也让开发更快速。
Go 语言被设计成一门应用于搭载 Web 服务器,存储集群或类似用途的巨型中央服务器的系统编程语言。
对于高性能分布式系统领域而言,Go 语言无疑比大多数其它语言有着更高的开发效率。它提供了海量并行的支持,这对于游戏服务端的开发而言是再好不过了。
计算机软件经历了数十年的发展,形成了多种学术流派,有面向过程编程、面向对象编程、函数式编程、面向消息编程等,这些思想究竟孰优孰劣,众说纷纭。
除了OOP外,近年出现了一些小众的编程哲学,Go语言对这些思想亦有所吸收。例如,Go语言接受了函数式编程的一些想法,支持匿名函数与闭包。再如,Go语言接受了以Erlang语言为代表的面向消息编程思想,支持goroutine和通道,并推荐使用消息而不是共享内存来进行并发编程。总体来说,Go语言是一个非常现代化的语言,精小但非常强大。
为了保持语言的简洁和简单,按照类似的语言省略常用的功能。
Go语言的特性有:
不支持类型继承不支持任何方法或运算符重载不支付包之间循环依赖不支持对指针运算不支持断言不支持泛型编程自动垃圾回收更丰富的内置类型函数多返回值错误处理匿名函数和闭包类型和接口并发编程语言交互性简洁、快速、安全并行、有趣、开源编译迅速(1)在线编辑
在学习Go语言编程之前,我们需要安装和配置好Go语言的开发环境。可以选择线上的编译器:http://tour.golang.org/welcome/1来直接执行代码。
注:由于某种原因,golang官网被国内屏蔽。你可以去 http://www.yinchengxueyuan.com/forum.php 索取。或是使用代理来访问外部网站。
(2)本地编辑
在自己的计算机上安装开发编译环境。
Go 语言支持以下系统:
LinuxFreeBSDMac 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,如果出现如下内容,则说明安装成功。
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
Go语言官网:http://golang.org/
go中文社区:https://studygolang.com
go中文在线文档:https://studygolang.com/pkgdoc
在Windows系统下进行安装后的测试。创建工作目录 C:\>Go_WorkSpace。 文件名: test.go,代码如下:
package main import "fmt" func main() { fmt.Println("Hello World!") } 注意:要想对中文的支持必须把文件的格式变为UTF-8编码接下来让我们来看下简单的代码,该代码输出了"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以包作为管理单位让我们来看下如何编写 Go 代码并执行它。步骤如下:
打开编辑器,如Goland,将以上代码添加到编辑器中。将以上代码保存为 test.go打开命令行,并进入程序文件保存的目录中,如C:\Go_WorkSpace。输入命令 go run test.go 并按回车执行代码。如果操作正确你将在屏幕上看到 "Hello World!" 字样的输出。使用 go 命令执行以上代码输出结果如下:
C:\Go_WorkSpace>go run test.go Hello, World!可以通过 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