整型

整型分为两大类:

  • 按长度:int8、int16、int32、int64
  • 无符号整型:uint8、uint16、uint32、uint64
类型描述
uint8无符号8位整型(0到255)
uint16无符号16位整型(0到65535)
uint32无符号32位整型(0到4294967295)
uint64无符号64位整型(0到18446744073709551615)
int8有符号8位整型(-128到127)
int16有符号 16位整型 (-32768 到 32767)
int32有符号 32位整型 (-2147483648 到 2147483647)
int64有符号 64位整型 (-9223372036854775808 到 9223372036854775807)

特殊整型

类型描述
uint32位操作系统上就是uint32,64位操作系统上就是uint64
int32位操作系统上就是int32,64位操作系统上就是int64
uintptr无符号整型,用于存放一个指针

引用类型

数据类型长度默认值说明
slice nil引用类型,切片
map nil引用类型,map
channel nil引用类型,通道
interface nil引用类型,接口
function nil引用类型,函数

slice引用传递,修改值

package main

import "fmt"

func main() {
    var sliceOne []string
    // 赋值
    sliceOne = append(sliceOne, "值:")
    fmt.Println("初始值", sliceOne)
    // 引用传值
    exChange(sliceOne)
    // 输出的值被修改了
    fmt.Println(sliceOne)
}

func exChange(sliceOne []string) {
    for key, value := range sliceOne {
        sliceOne[key] = value + "拼接"
    }
}

输出结果:
image.png
这是一个很明显的修改引用类型的例子,函数 exChange 的修改,会影响到原来变量 sliceOne 的值。

slice引用传递,添加元素

package main

import "fmt"

func main() {
    sliceOne := []int{1, 2, 3}

    fmt.Println("值:", sliceOne, "len:", len(sliceOne), "cap:", cap(sliceOne))

    fmt.Printf("未扩容前的地址:%p \n", sliceOne)

    // 引用传值
    appendVal(sliceOne)
    // 输出的值被修改了
    fmt.Println(sliceOne)
}

// 添加值
func appendVal(sliceOne []int) {
    fmt.Printf("函数内部,扩容之前地址: %p \n", sliceOne)
    sliceOne = append(sliceOne, 4)
    fmt.Println("函数内输出值:", sliceOne, "len:", len(sliceOne), "cap:", cap(sliceOne))
    fmt.Printf("扩容后的地址:%p \n", sliceOne)
}

输出结果:
image.png
从上面的例子可以看到,这次我们向 sliceOne 添加元素,但是并未影响到函数体外的 sliceOne,原因在于:可以看到,在golang对 sliceOne 扩容之后,切片的地址发生了变化。

布尔值

golang中以bool类型进行声明布尔型数据,布尔型数据只有true和false。

注意:

  • 布尔类型变量的默认值为false
  • golang中不允许将整型强制装换为布尔型
  • 布尔型无法参与数值运算,也无法与其他类型进行装换

字符串

golang中的字符串以原生数据类型出现,使用字符串就像使用其他原生数据类型一样。golang的字符串的内部使用utf-8编码。字符串的值为" "中的内容。

str1 := "字符串1"
str2 := "字符串2"

fmt.Println(str1, str2)

image.png

多行字符串

golang中要定义一个多行字符串时,就必须使用反引号字符:

str1 := `
  很长很长的字符换
  很长很长的字符换
  很长很长的字符换
  很长很长的字符换
  很长很长的字符换
`

fmt.Printf("%s", str1)

image.png

参考文档:
BUG日记:Go的切片引用传递?
Golang基础 - 基本数据类型


Architecture
0 声望0 粉丝

知其然, 更要知其所以然~