【重学Golang 】03类型

149 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第7天,点击查看活动详情

基础类型

  • 整型

    • 有符号整型 如:int、int8、int16、int32 和 int64。(可以是负数,零或正数)
    • 无符号整型 如:uint、uint8、uint16、uint32 和 uint64。(只有零和正数)

    注意:

    • 以上用 bit 大小表示整型,int 和 uint 没有具体的 bit 大小的整型,可能是 32 bit 或 64 bit ,主要和硬件设备的 CPU 有关。
    • 字节类型 byte 等价于 uint8 类型。即 uint8 类型的别名,用于定义一个字节,所以字节 byte 类型也属于整型。
  • 浮点型

    • 即小数。如 3.2。Go 语言提供了两种精度的浮点数,分别是 float32 和 float64。
    • float32
    • float64 ,比较常用,因其精度高
  • 布尔型

    • 一个布尔型的值只有两种:true 和 false,
  • 字符串

    • 字符串是一个不可改变的字节序列,其可以包含任意的数据
    • len() 函数:返回字符串的字节数目
    • 支持索引操作,返回第 i 个字节的字节值
    name string = "hello"
    len(name) // 输出结果 5
    ​
    name[2]  // 输出结果 l
    
  • 复数

    • Go 语言提供了两种精度的复数类型:complex64 和 complex128,分别对应 float32 和 float64 两种浮点数精度。
    • complex() 用于构建复数,内建的 real() 和 imag() 函数分别返回复数的实部和虚部
    var x complex128 = complex(3, 4) // 3+4i
    ​
    fmt.Println(real(x))           // "3"
    fmt.Println(imag(x))           // "4"
    
  • 零值

    • 就是变量的默认值。声明一个变量没有初始化时,Go 语言会自动初始化其值为对应类型的零值
    • 数字类的零值是 0 ,布尔型的零值是 false,字符串的零值是 “” (空字符串)

复合类型

  • 数组

    • 数组是一个由固定长度的特定类型元素组成的序列,一个数组可以由零个或多个元素组成
    • 数组可通过索引下标访问数组的每个元素,下标的范围从 0 开始
    var a [3]int // 定义数组 a 其每个元素的初始化为 int 的零值,即 0var names [3]string = [3]string{"tom","jerry","lucy"}
    var names [3]string = [...]string{"tom","jerry","lucy"}
    var names [3]string = [3]string{"tom","jerry"} // 第三个元素的值为字符串的零值,即空字符串
    names :=[3]string{"tom","jerry","lucy"}
    
  • Slice 切片

    • 和数组很像,只是无固定长度,可以理解为动态数组。切片 Slice 的底层就是使用数组实现的
    • 声明切片 Slice
    slice1 := make([]string,4)
    

    以上声明了一个元素类型为 string 的切片,长度是 4 。记住:切片的容量不能比切片的长度小。

    • 基于数组生成切片
    //基于数组生成切片,包含索引start,但是不包含索引end
    slice1 :=array[start:end]
    
  • Map

    • map 是一个无序的 K-V 键值对集合,结构为 map[K]V。其中 K 对应 Key,V 对应 Value。
    • 声明和初始化
    personMap:=make(map[string]int)
    
    • 获取和删除:通过 [] 操作符,里面是 key
    personMap["tom"] = 20 // 赋值
    name := personMap["tom"] // 取值
    
    • map 的 [] 操作符可以返回两个值:

      1. 第一个值是对应的 Value;
      2. 第二个值标记该 Key 是否存在,如果存在,它的值为 true。
    • 遍历 Map, 返回值是2个,第一个是 key ,第二个是 value

    for k,v:=range personMap{
      ....
    }
    

参考资料: