package main /* 指针 Go虽然保留了指针,但与其它编程语言不同的是,在Go当中不 支持指针运算以及”->”运算符,而直接采用”.”选择符来操作指针 目标对象的成员 操作符”&”取变量地址,使用”*”通过指针间接访问目标对象 默认值为 nil 而非 NULL 递增递减语句 在Go当中,++ 与 -- 是作为语句而并不是作为表达式 */ import ( "fmt" ) func main() { a := 1 var p *int = &a fmt.Println(p) //0xc0420120b8 fmt.Println(*p) //1 b := a++ //++只能是语句,不能是表达式, unexpected ++ at end of statement fmt.Println(b) //1 /* 条件表达式没有括号 支持一个初始化表达式(可以是并行方式) 左大括号必须和条件语句或else在同一行 支持单行模式 初始化语句中的变量为block级别,同时隐藏外部同名变量 1.0.3版本中的编译器BUG */ a1 := 10 if a1 := 1; a1 < 2 { //a在if和else里面的局部变量,覆盖外部在a,if走完后用全局的a fmt.Println(a1) } else { fmt.Println(a1) } fmt.Println(a1) if a, b, c = 1, 2, 3; a+b+c > 6 { } else { } for { a++ if a > 3 { break } } for a < 3 { a++ } for i := 0; i < 3; i++ { a++ } /* 选择语句switch 可以使用任何类型或表达式作为条件语句 不需要写break,一旦条件符合自动终止 如希望继续执行下一个case,需使用fallthrough语句 支持一个初始化表达式(可以是并行方式),右侧需跟分号 左大括号必须和条件语句在同一行 */ a := 1 switch a { //switch a := 1;{ a是局部变量 case 0: fmt.Println("0") //不用写break case 1: fmt.Println("1") case a >= 1: fmt.Println("1") fallthrough //继续执行下一个case default: fmt.Println("default") } /* 跳转语句goto, break, continue 三个语法都可以配合标签使用 标签名区分大小写,若不使用会造成编译错误 Break与continue配合标签可用于多层循环的跳出 Goto是调整执行位置,与其它2个语句配合标签的结果并不相同 */ LABEL1: for { for i := 0; i < 10; i++ { if i > 3 { break LABEL1 //不使用LABEL则break只是跳出上一层的for循环, //使用break + 标签则跳出与标签同级的for循环(使用标签可以指定跳出哪成for循环), //这里是最外层的for循环//与标签平级的for循环不再执行, //如果改成goto LABEL1则又会去从LABEL1开始执行,应该goto到最外层for循环结束处 } else { fmt.Println(i) } } } LABEL2: for { for i := 0; i < 10; i++ { if i > 3 { continue //结束本次循环 continue LABEL2 //continue + 标签:跳到与标签平级的for循环的下一次循环,而不是 //本层循环(指定跳到哪个for循环的下一层) } else { fmt.Println(i) } } } }