书写规则

除了一般通用的语法外,Go语言有一些强制型的书写规则。

Go语言语句结束符为换行跟Python一样,不象C或者Java使用";"表示语句结束。

var i = 10
var b = 20

命名

需要向外暴漏的函数、常量、全局变量、结构等,统一使用首字母大写。并采用驼峰(Camel Case)命名法进行命名。

注释

Go语言支持单行和多行注释

/*
  多行注释(块注释)
*/
// 单行注释(行注释)

语句块

if a == 0 {
    // 左括号必须在最最右侧结尾处
}

变量

Go语言通过var关键字声明变量;

// 声明变量
var s1 string
var i, j, k int

// 变量初始化
var s1 string = "hello"
var s1 = "hello"
var i, j, k int = 1, 2, 3

// 变量赋值
s1 = "hello"

另外一种方式是,使用:=进行声明并初始化,不过不能用于全局变量的声明

// 声明并赋值
s1 := "hello"
i, j, k := 1, 2, 3

多重赋值

// 使用多重赋值而不使用中间变量进行值交换
j, i = i, j

常量

单个常量定义

const Zero = 0.0
const BufferSize = 1204
const Eof = -1

同时定义多个常量

const (
    BufferSize = 1024
    Eof = -1
)

const BufferSize, Eof = 1024, -1

使用iota,iota可以被认为是一个可被编译器修改的常量,在每一个const关键字出现时被重置为0,每出现一次iota值加1,直到碰见下个const关键字

const (
    Sun = iota
    Mon = iota
    Tue = iota
    Wed = iota
    Thu = iota
    Fri = iota
    Sat = iota
)

流程控制

流程控制是语言必须的语法,每种语言用法也基本一样。

  • if else
  • switch case
  • for range, break, continue
  • goto

if else

注意括号的位置,这些必须在一行;条件表达式中可以省略小括号

if err == nil {
    fmt.Println("Success.")
} else {
    fmt.Println("Failure.")
}

swtich case

for range, break, continue

常用写法

sum :=0
for i := 0; i < 10; i++ {
   sum += i
}

使用for range可以对,字符串,slice,map进行迭代

str := "hello"
for i,ch := range str {
    //ch的类型为rune
   fmt.Println(i, ch)
}

// 访问slice
slice2 := [5]int{1, 2, 3, 4, 5}
for i,v := range slice2 {
    // i是索引v是值
   fmt.Println("slice2[",i,"] =",v)
}

// 访问map
m1 := map[string]int{"one": 1, "two": 2, "three": 3}
for key, val := range m1{
    fmt.Printf("%s => %d \n", key, val)
}

goto

还没使用过,暂时不说

函数

在Go中有特殊的两个函数main()和init(),这两个函数会被自动执行,main()时程序的入口,init()在包被导入时执行。

单返回值

func 函数名(参数名 参数类型)返回值类型 {
    ...
    return 值
}

多返回值

func 函数名(参数名 参数类型)(类型, 类型) {
    ...
    return 值1, 值2
}

处理过程中直接使用参数的名称进行引用,return语句后可以不写返回的参数名称。

func 函数名(参数名 参数类型)(返回值 类型, 返回值 类型) {
    ...
    return
}

当有多个值返回而你只是使用了其中一些参数,可以使用匿名变量来处理。

_, err := PutSupplier(supplier)

变长参数

匿名函数

Go 也支持匿名函数,可以像变量一样进行传递

// 定义匿名函数
f := func() {
    fmt.Println("我是匿名函数")
}

// 调用匿名函数
f()

错误处理

[ 编辑 | 历史 ]
最近由“jilili”在“2014-03-18 09:47:25”修改