Go语言语法及特性总结
Posted 零君聊软件
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Go语言语法及特性总结相关的知识,希望对你有一定的参考价值。
Go语言是最近几年增长最快的编程语言之一,特别是云的逐渐普及更是促进了Go语言的普及。本文详细总结了Go语言的语法以及特性,这些知识也是成为一个合格的Go语言开发者必须具备的基本条件。本文主要参考了Go语言官网的Effective Go。
1、Hello World
按照惯例,以一个Hello World开始。你可以在任何你喜欢的编辑器中输入下面的代码,保存成HelloWorld.go文件(当然,你也可以取其它的名字,但后缀必须是.go)。零君目前使用的IDE是Visual Studio Code。
package main
import "fmt"
func main() {
fmt.Println("Hello World")
}
Go与C、Java一样,程序的入口点也是main函数。"fmt"是Go语言的一个标准包(package)。
运行上面的代码之前,需要先配置好go语言环境。如下两步即可:
1、首先下载适合本地平台的go语言包,安装。然后配置环境变量GOROOT指向go语言的安装目录。
2、配置环境变量GOPATH。GOPATH设置的是Go语言的工作目录,可以设置成任意目录。${GOPATH}里面包含三个子目录,分别是src、pkg、bin。src是存放source code的地方,pkg和bin则是存放编译产生的二进制文件。
将上面HelloWorld.go放到如下地方:
${GOPATH}/src/example/HelloWorld.go
然后执行下面的命令,就会看到期望的"Hello World",
cd ${GOPATH}/src/example
go run HelloWorld.go
2、编码风格
编码风格很大程度上决定了代码可读性,特别是一个团队共同开发维护一个项目时,如果不同的人采用不同的风格,比如不同的缩进,那么每个人阅读别人的代码时就会很不习惯。Go语言提供了一个工具gofmt处理这些问题,例如使用如下命令格式化上面的HelloWorld.go,
go fmt HelloWorld.go
也可以直接对一个package里面所有的源文件同时格式化,
go fmt github.com/coreos/etcd/client
这里要特别提两点:
(1) Go语言里面缩进是使用Tab;
(2) 当代码中存在多个连续的空行,gofmt格式化之后会保留一个空行。如果你无意中在某个地方按了几次回车,而你压根就不期望在那里出现空行,那么gofmt之后最终还是会保留一个空行;这时你就需要手动删除这个多余的空行。
Go语言既支持/* xxx */式的跨行的注释,也支持//单行注释。例如:
/*
Package test is a example for demo.
You can update the demo yourself.
*/
// Package test is a example for demo.
// You can update the demo yourself
对于命名规则,Go语言推荐驼峰式,而不建议下划线式,例如"softLink"、“SoftLink”是推荐的名字,而"soft_Link","Soft_Link"则不是。
用过C++或Java的人都熟悉Getter/Setter函数,以Java为例,比如有一个成员变量“int score”,那么可以为这个变量定义两个函数如下:
public int GetScore() {
return score
}
public void SetScore(int score) {
this.score = score
}
Go语言虽然不是面向对象的开发语言,但同样可以为某个类型定义Getter/Setter方法,但是Go语言对于Getter方法的命令习惯不同。还是上面的例子,Go语言推荐的Getter方法名是Score,而不是GetScore。Setter方法相同。当然,如果将变量score直接命名为Score,那么就不需要对应的Getter/Setter方法了。
在Go语言中,任何命名的首字母如果是大写,那么该变量或函数(或方法)在包外面就是可见的,类似于C++/Java中的public修饰符。反之,如果是小写的,那么只能在包内使用。
3、控制结构
像其它语言一样,Go也有if、for、switch等控制结构。除此之外,Go还支持基于类型的switch,以及多路通讯选择select。
声明与赋值
Go语言中的变量既可以显示声明类型,也可以不用显示声明类型。例如下面就是显示声明了一个int类型的变量:
var i int
而下面的例子中就没有显示声明变量的类型,因为rand.Intn的返回类型是int,所以变量v的类型也就是int。注意这里操作符是:=,表示声明一个新的变量并给这个变量赋值。如果操作符是=,那仅仅是给变量赋值,这时如果变量之前没有声明过,就会编译失败。
v := rand.Intn(10)
Go语言与C、Java的一个不同,就是Go的函数或方法可以返回多个值,例如:
f, err := os.Open(filename)
if err != nil {
return err
}
如果文件成功打开,则f就是指向新打开文件的File指针,err则为nil;如果打开失败,err就对应具体的错误。这是Go语言里面错误处理方式。
上面的例子同时声明了两个新的变量,f和err。如果将上面的代码改成如下,也是合法的。但是第二次打开文件的那条语句,只是声明了变量f2;由于err之前声明过,所以这里只是重新赋值。对于这种只有部分变量声明的情况,操作符
以上是关于Go语言语法及特性总结的主要内容,如果未能解决你的问题,请参考以下文章