Go程序设计语言(一)

emmmm,好弱好弱,老老实实复习语法和练习吧,一定要撸代码啊。本文涉及《Go程序设计语言》的第 2 章,程序结构。

2.1 名称

Go中函数、变量、常量、类型、语句标签和包的名称遵循一个简单的规则:名称的开头是一个字母或者下划线,后面可以跟任意数量的字符、数字和下划线,并区分大小写。
Go中 25 个保留关键字,不能作为名称:
break default func interface select
case defer go map struct
chan else goto package switch
const fallthroug if range type
continue for import return var

另外还有三十几个内置的预声明的常量、类型和函数:
常量: true false iota nil
类型: int int8 int16 int32 int64 unit uint8 uint16 uint32 uint64 uintptr float32 float64 complex128 complex64 bool byte rune string error
函数: make len cap new append copy close delete complex real imag panic recover

风格上,当遇到单词组合的名称时,Go程序员使用“驼峰式”的风格–更喜欢使用大写字母而不是下划线。所以标准苦衷的函数名采用QuoteRuneToASCII和parseRequestLine的形式。缩写词,所有字母同时大写或者小写。

2.2 声明

声明给一个程序实体命名,并且设定其部分或全部属性。有四个主要的声明,变量(var)、常量(const)、类型(type)和函数。

fmt.Printf(‘%g’) 这里的%g表示对于浮点数而言,采用最少数字来表示

2.3 变量

var 声明创建一个具体类型的变量,然后给他附加一个名字,设置他的初始值。每一个声明有一个通用的形式:
var name type = expression

注意,对于字符串而言,应该使用双引号。

2.3.1 短变量声明

name := exprssion的形式,

anim := gif.GIF{LoopCount: nframes}
freq := rand.Float64() * 3.8
t := 0.0
因其短小、灵活,故而在局部变量的声明和初始化中主要使用短声明。

1
2
3
4
5
6
i := 100
var boiling float64 = 100
var names []string
var err error
var p Point
i, j := 0, 1

一个容易但被忽略但重要的地方是:短变量声明不需要声明所有在左边的变量。如果一些变量在同一个词法块中声明,那么对于那些变量,短声明的行为等同于赋值。

2.3.2 指针

指针的值是一个变量的地址。不是所有值都有地址,但是所有的变量都有。使用指针,可以在无需知道变量名字的情况下,间接读取或更新变量的值。

指针类型的零值是nil。测试 p!=nil,结果是true说明p指向一个变量。指针是可比较的,两个指针当且仅当指向同一个变量或者两者都是nil的情况下才相等。

2.3.3 new 函数

表达式new(T)创建一个未命名的T类型变量,初始化为T类型的零值,并返回其地址(地址类型为*T)

2.3.4 变量的生命周期

2.4 赋值

= *= += ++ –

2.4.1 多重赋值

x, y = y, x

求最大公约数,这个算法真厉害啊。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package main 

import "fmt"

func main() {
var x, y int
x = 5
y = 11
fmt.Println(gcd(x, y))
}

func gcd(x int, y int) int {
for y != 0 {
x, y = y, x%y
}
return x
}
1
2