变量
变量由 字母、数字、下划线 组成,其中首个字符不能是数字
- 函数内定义的变量称为局部变量
- 函数外定义的变量称为全局变量
- 函数定义中的变量称为形式参数
变量的声明:
Make 用于内存分配的,它只用于 chan、map 以及 slice 的内存创建,而且它返回的类型就是这三个类型本身,而不是他们的指针类型,因为这三种类型就是引用类型,所以就没有必要返回他们的指针了
New 用于类型的内存分配,并且内存置为零值,返回指向类型的指针
:= 这个符号直接取代了 var 和 type ,这种形式叫做 简短声明 。不过它有一个限制,那就是它只能用在函数内部;在函数外部使用则会无法编译通过,所以一般用 var 方式来定义 全局变量。
数值类型 零值为 0
var v_name_1, v_name_2, v_name_3 int
var v_name_1, v_name_2, v_name_3 int = 1, 2, 3
var v_name_1, v_name_2, v_name_3 = 1, 2, 3
v_name_1, v_name_2, v_name_3 : = 1, 2, 3
布尔类型 零值为 false
var v_name_1, v_name_2, v_name_3 bool
var v_name_1, v_name_2, v_name_3 bool = true, true, true
var v_name_1, v_name_2, v_name_3 = true, true, true
v_name_1, v_name_2, v_name_3 : = true, true, true
字符串类型 零值为 ""(空字符串)
var v_name_1, v_name_2, v_name_3 string
var v_name_1, v_name_2, v_name_3 string = "abc", "abc", "abc"
var v_name_1, v_name_2, v_name_3 = "abc", "abc", "abc"
v_name_1, v_name_2, v_name_3 : = "abc", "abc", "abc"
指针类型 零值为 nil
var v_name * int
var v_name_1 [ int ] = 1 ; var v_name_2 [ *int ] = &v_name_1
var v_name [ * int ] = new ( int )
v_name : = new ( int )
数组类型
var v_name [ 5 ] int
var v_name = [ 5 ] int { 1, 2, 3, 4, 5 }
var v_name = [ ... ] int { 1, 2, 3, 4, 5 }
var v_name = [ 5 ] int { 1:1, 4:4 } // 只初始化部分元素
var v_name = [ ... ] int { 1:1, 4:4 } // 只初始化部分元素
v_name : = [ 5 ] int { }
v_name : = [ 5 ] int { 1, 2, 3, 4, 5 }
v_name : = [ ... ] int { 1, 2, 3, 4, 5 }
v_name : = [ 5 ] int { 1:1, 4:4 } // 只初始化部分元素
v_name : = [ ... ] int { 1:1, 4:4 } // 只初始化部分元素
Slice类型 零值为 nil
var v_name [ ] int
var v_name = [ ] int { 1, 2, 3, 4, 5 }
var v_name = [ ] int { 1:1, 4:4 } // 只初始化部分元素
var v_name_1 = [ 5 ] int { 1, 2, 3, 4, 5 } ; // 初始化一个数组
var v_name_2 = v_name_1[ 1 : 2 ] // 长度位1个元素,容量为4个元素
var v_name_2 = v_name_1[ 1 : 2 : 3 ] // 长度位1个元素,容量为2个元素
v_name : = [ ] int { }
v_name : = [ ] int { 1, 2, 3, 4, 5 }
v_name : = [ ] int { 1:1, 4:4 } // 只初始化部分元素
v_name_1 : = [ 5 ] int { 1, 2, 3, 4, 5 } ; // 初始化一个数组
v_name_2 : = v_name_1[ 1 : 2 ] // 长度为1个元素,容量为4个元素
v_name_2 : = v_name_1[ 1 : 2 : 3 ] // 长度为1个元素,容量为2个元素
v_name : = make ( [ ] int , 3 , 5 ) // 长度为3个元素,容量为5个元素
var v_name = make ( [ ] int , 3 , 5 ) // 长度为3个元素,容量为5个元素
Map 类型 零值为 nil
var v_name map [ string ] int
var v_name = map [ int ] int { 1 : 1 }
v_name : = map [ string ] int { }
v_name : = map [ int ] int { 1 : 1 }
v_name : = make ( map [ int ] int )
var v_name = make ( map [ int ] int )
Channel 类型 零值为 nil
var v_name chan int //既可以接收数据,也可以发送数据
var v_name chan <- int //只可以用来发送 int 类型的数据
var v_name <- chan int //只可以用来接收 int 类型的数据
v_name : = make ( chan int ) //既可以接收数据,也可以发送数据
v_name : = make ( chan <- int ) //只可以用来发送 int 类型的数据
v_name : = make ( <- chan int ) //只可以用来接收 int 类型的数据
var v_name = make ( chan int ) //既可以接收数据,也可以发送数据
var v_name = make ( chan <- int ) //只可以用来发送 int 类型的数据
var v_name = make ( <- chan int ) //只可以用来接收 int 类型的数据
结构体类型 零值为 nil
var v_name struct { }
var v_name struct { id int }
函数类型 零值为 nil
var v_name func ( string ) int { }
v_name := func (string) int { }
接口类型 零值为 nil
var v_name error // error 是接口
var v_name interface{}
var v_name interface{} = 7
因式分解关键字
// 这种因式分解关键字的写法一般用于声明全局变量
var (
v_name_1 v_type_1
v_name_2 v_type_2
)
var (
int_par int = 1
str_par string = "abc"
)