Golang 变量

115 阅读3分钟

变量

变量由 字母、数字、下划线 组成,其中首个字符不能是数字

  • 函数内定义的变量称为局部变量
  • 函数外定义的变量称为全局变量
  • 函数定义中的变量称为形式参数

变量的声明:

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"
)