smallyu的博客

smallyu的博客

马上订阅 smallyu的博客 RSS 更新: https://smallyu.net/atom.xml

Go 语言基本语法

2019年3月15日 21:18

Go语言虽然在语言设计上不被王垠看好,但它如此简洁的代码结构确实让人着迷。

语句

Go语言语句结尾不需要;

变量和常量

使用var声明变量。当变量需要初始化时,可以使用赋值符号:=代替=以省略var关键字。

var a intvar b stringvar c int = 10var d = "golang"  // 编译器自动推断类型d := 10

与C语言或Java不同,Go语言的类型声明在变量右侧。需要注意的是,如果程序中声明的变量未经使用,程序将无法通过编译。Go语言是一种工程化的语言,因此它的一些特性让人感觉不可理喻,但又会在实际工程中提高效益。

Go语言的变量赋值支持一些炫酷的写法,比如要交换变量x和y的值,可以使用这种违反直觉的写法:

x, y = y, x

Go语言中使用const定义常量,truefalseiota是预定义常量。其中iota稍显特殊,iota会在每一个const关键字出现时重置为0,然后在下一次const出现前,每出现一次iota,iota的值加1。

const a = iota   // 0const b = iota   // 0const (  c = iota       // 0  d = iota       // 1)

数组和切片

声明一个元素个数为3的数组,并初始化:

array := [3]int{0, 1, 2}array[0] = 3fmt.Println(array)

和其他语言一样,Go语言在声明数组后并不能改变数组的大小。所以Go语言提供了像Python一样的切片。切片可以从数组中产生,也可以使用make()函数新建。

array := [3]int{0, 1, 2}slice1 := array[:2]       // 从数组中创建slice2 := make([]int, 3)  // 直接创建fmt.Println(slice1)       // [0 1]fmt.Println(slice2)       // [0 0 0]

除切片外,映射也是使用make函数创建,映射的类型全称是var myMap map[string] int,意为声明变量myMap,key为string,value为int。

流程控制

Go语言允许if-else语句的条件表达式不加小括号,当然加上也无妨。

a := 1if a == 1 {  print(1)} else if (a == 2) {  print(2)} else {  print(3)}

选择语句的条件表达式同样不需要小括号,另外也不需要break,其他匹配项并不会执行,这一点和Scala相同。对选择语句的优化貌似已经是不约而同的做法。

i := 0switch i {case 0:  print(0)case 1:  print(1)}

循环结构的条件表达式依然不需要小括号。Go语言只支持for循环。同时对无限循环的场景也做了优化,不再需要for(;;)的写法。

for {  print(1)}

函数

Go语言诞生自C语言的派系,因此Go语言从一开始就不是OOP或FP的语言,没有类、对象等概念。函数是程序中的一等公民。和C语言相同,(main包下的)main函数是整个程序的入口。

func add(a int, b int) (int, int) {  return a + b, a - b}func main() {  x, y := add(1, 2)  print(x, y)}

Go语言的语句简洁高效,函数名后的第一个括号为入参,第二个括号是出参。函数支持多返回值。如果参数类型相同,可以将类型声明合并到一起,如(a, b int)

结构体

刚才提到Go语言没有类、对象等概念,但是Go语言有类似C语言的结构体,并且能力强大。这里定义一个Person...

剩余内容已隐藏

查看完整文章以阅读更多