第二章 变量

变量

  • 有符号整型
    • int, 至少32位,取决于cpu
    • int8, 8位
    • int16, 16位
    • int32, 32位
    • int64, 64位
  • 无符号整型
    • uint, 至少32位,取决于cpu
    • uint8, 8位
    • uint16, 16位
    • uint32, 32位
    • uint64, 64位
  • 浮点型
    • float32, 32位浮点
    • float64, 64位浮点
  • 复数类型
    • complex, 默认实部和虚部都是float64的浮点数,即默认是complex128
    • complex64, 实部和虚部都是float32的浮点数
    • complex128, 实部和虚部都是float64的浮点数
    • imag, 虚部
    • real, 实部
  • 布尔类型
    • bool, 布尔值,必须赋值为truefalse
    • true
    • false
  • 字符类型
    • byte, 单个字符,utf-8编码,长度为8位
    • string, 字符串
    • rune, unicode编码,长度为32位
  • 指针
    • uintptr, 指针,长度取决于cpu

变量和常量

go语言使用var声明变量,使用const声明常量

var i int = 10  //声明一个int型变量i,并赋值

var j = 10      //编译器会进行自动推导
k := 5             // :=符号等同于var k = ,表示声明一个新的变量,同样编译器会自动推导类型


const m int = 10    //声明一个常量m
const n = 10        //声明一个常量n

go语言对未初始化的变量会默认赋值为0,字符串赋值为空。go语言的自动推导会将整数推导为int,浮点数推导为float64,复数推导为complex128,字符串推导为string
同时go还提供了一个有趣的功能让我们更加方便的声明多个常量:iotaiota的默认为0,每出现一个会自动加一,直到遇到下一个const会重置为0.

const (
    RED = 1 << iota     //1 << 0 == 1
    BLUE                //相当于BLUE = 1 << iota, 1 << 1 == 2
    GREEN               //相当于GREEN = 1 << iota,1 << 2 == 4
)

const (
    SUCCESS = iota  //重置为0,0
    FAILED              //1
)

字符串

go语言中字符串使用双引号"或者单引号'来创建,使用的是utf-8的编码方式,并且支持+、==、>、<、!=、>=、<=等操作,这些操作会一个字节一个字节的比较字符串。

数组和切片

数组

go语言的数组是一个定长的相同类型的序列,和c语言的数组类似。可以使用[]来索引数组,下标从0开始。

var a [3]int        //创建一个长度为3的int型数组,内部会初始化为0
var b [4]int{1, 2, 3, 4}    //创建一个长度为4的int型数组,同时进行初始化
var c [...]int{1, 2, 3}     //创建数组,并初始化,长度由初始化内容决定

可以使用len()计算数组的长度。

切片

由于在go语言中数组是按照值进行传递的,也就是说如果将数组作为参数进行传递,那么会拷贝数组的全部内容,这样对于长数组会造成巨大的性能损失。因此go又引入了切片,切片是按引用进行传递的,是一个可变长的数组,因此切片不仅有长度(len()函数获取),表示切片内当前保存的元素个数,还有容量(cap()函数获取),表示切片当前能保存的最大元素个数。如果容量不足,切片会重新申请一块更大的内存保存数据。

var a = make([]int, len, cap)       //创建一个int类型,长度为len,容量为cap的切片,cap>len
var b = make([]int, len)            //创建一个int类型,长度为len的切片,不指定容量
var c []int{}                           //创建int型切片
var d []int{1, 2, 3, 4}             //创建int型切片,并进行初始化

映射

go语言的映射(map)是一种内置结构,保存键值对的集合,唯一的限制是映射的键类型必须支持==!=操作。

var a = make(map[int]string, cap)       //创建一个int-->string的映射,初始化容量为cap
var b = make(map[string]int)            
var c map[int]string
var d map[int]string{1:'1', 2:'2'}

映射可以使用[]进行访问

m[k] = v        //将值v赋给m的键k,如果k已经有对应的值,会覆盖
v := m[k]       //创建一个变量,并将m的键k对应的值赋值给v,如果键k不存在,那么会传给v一个零值
v, found := m[k]    //将键k对应的值传给v,如果键存在found为true,否则为false

Delete(m, k)会从m从删除键k,如果k不存在,什么都不会做
len()函数也可以计算映射的长度

变量持有类型

对于go语言,除了通道、函数、方法、映射和切片外,其他的内置类型都是按照值进行传递的。

猜你喜欢

转载自blog.csdn.net/wf649572404/article/details/80820196