go 变量声明总结 --定义 初始化

声明

标准格式: var 变量名 变量类型

简短格式:(var) 变量名:= 值  

  • 定义变量,同时显式初始化。
  • 不能提供数据类型。
  • 只能用在函数内部。

举栗子

基础类型: var a int | var a , b string |  var c byte | var d bool | 

     a := 10 | b := "123456" | c := 'a' | d := true

基础类型包括:bool string   

       (u)int (u)int8 (u)int16 (u)int32 (u)int64   byte(同uint8)   rune(同int32代表一个Unicode码)

       float32 float64

       complex64 complex128

容器声明 (数组 切片 map sync.Map list chan)

  数组

标准声明: var 数组变量名 [n]Type     var array [10]int

简短格式:q := [...]int{1, 2, 3}

初始化:默认为对应类型的零值

  • var array [3]int = [3]int{1, 2, 3}   
  • q := [...]int{1, 2, 3} 长度出现 ... 表示数组的长度是根据初始化值 
  • var array [3]int  \  array = [3]int{1,2,3}

  切片

直接声明: var name []Type

简短格式:(var)a := []int{1, 2, 3}    //这两种声明和数组的区别在于没有定义个数

数组生成: slice[开始位置:结束为止]   如:a := [3]int{1,2,3}  \     开始位置从0开始,同数组下标; 结束位置不取值

      a[1:2] 表示一个切片值为:[2] 

      a[:3] 表示[1 2 3]   a[1:] 表示[2 3]  

      a[2] 表示[3]           a[1] 表示[2]

make生成:make([]Type, size, cap)  //cap为预分配,size为实际大小 ;len()函数计算时,输出结果为size值;cap提前分配空间,降低多次分配空间导致性能下降的可能

            make一定发生了内存分配,数组生生成的,只是将新的切片结构指向已经分配好的内存区域,从这点上来说,数组生成的切片有点像指针。

初始化:  var strList []string     //值为 []   strList == nil 

      var numList := []int{} // 值为[] numList != nil

      a := make([]int, 2, 10) 

  map

 直接声明:var name map[keyType]valueType 如:var mapList map[int]string   直接声明后不能直接操作map下标因为此时变量指向空指针,make生成后可以

 简短格式:mapList := map[int]string{1:"a", 2:"b"} 

 make生成:mapList := make(map[int]string) ; make 也可以定义预容量cap,有利于提高性能。

      mapList[1] = "a" \ mapList[2] = "b" 

      make生成操作map更灵活, 不能使用new()来构造map,使用new会获得一个空引用的指针。        

  sync.Map

import "sync"

直接声明:var scene sync.Map

不可用make创建

  list

import "container/list"

直接声明: var listA list.List

内部方法创建:listA := list.New()

  chan

直接声明: var chanA = chan int ; 通道是引用类型,声明后值为nil,需要make

make:   chanA = make(chan int)

简短格式: chanA := make(chan int)

猜你喜欢

转载自www.cnblogs.com/zz8781/p/12916886.html