三种声明方式:
var v_name v_type,var v_name v_type = value.var v_name;v_name :=默认值:
数值类型(包括complex64/128)为 0
布尔类型为 false
字符串为 “”(空字符串)
以下几种类型为 nil:
*int[]intmap[string] intchan intfunc(string) interror // error 是接口注意:
:= 赋值语句只能在函数(方法)体中使用函数(方法)体中定义的变量必须使用提示:
交换值: a,b = b,a多变量复制: a,b,c = 1,true,“string”空白标识符"_"也被用于抛弃值,如值 5 在:_, b = 5, 7 中被抛弃。 空标识符_使用: package main import "fmt" func main() { _,numb,strs := numbers() //只获取函数返回值的后两个 fmt.Println(numb,strs) } //一个可以返回多个值的函数 func numbers()(int,int,string){ a , b , c := 1 , 2 , "str" return a,b,c } //输出结果:2 str定义方式
显式类型定义: const b string = “abc”隐式类型定义: const b = “abc”iota常量,可以认为是一个可以被编译器修改的常量(记录的是常量的个数)。代码中只能读取值
常量用作枚举:
const ( a = iota b //没有赋值的将会使用前一个常量的赋值方式,即b=iota c )*Go语言的 for 循环同样支持 continue 和 break 来控制循环,但是它提供了一个更高级的 break,可以选择中断哪一个循环
JLoop: for j := 0; j < 5; j++ { fmt.Println(j) for i := 0; i < 10; i++ { if i > 5 { break JLoop //break 语句终止的是 JLoop 标签处的外层循环。此处的的j所在的循环 } fmt.Println(i) } } 注意: 左花括号{必须与 for 处于同一行。函数可以有多个返回值,都需要在返回值类型中声明类型
传递值,不会改变源字符串的值
package main import "fmt" func main() { str := "abc" reverse(str) fmt.Println(str) } func reverse(str string){ str = "cba" } //输出: abc 传递引用,会改变源字符串的值 package main import "fmt" func main() { str := "abc" reverse(&str) fmt.Println(str) } func reverse(str *string){ *str = "cba" } //输出: cba 闭包 package main import "fmt" func main() { fmt.Println(a()()) } func a() func() string { str := "ahah" b := func() string { return str } return b } 输出:ahah