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语言语法及特性总结的主要内容,如果未能解决你的问题,请参考以下文章

每天一点Go语言——Go语言语法基础及基本数据类型

我的Go+语言初体验——Go语言总结篇(语法+实际问题解决方案)

Go语言和其他语言的不同之基本语法

Go学习指南

Go/Python/Erlang编程语言对比分析及示例

2. Go语言基本语法 - 变量及常量