Go语言的数据类型及其他 | 青训营

124 阅读3分钟

数据类型

基本数据类型与复杂数据类型

基本数据类型:

数值型:

1、整数类型(int、int8、int16、int32、int64、uint、uint8、uint16、uint32、uint64、byte)

2、浮点类型(float32、float64)

3、复数(complex64、complex128)

字符型:没有专门的字符型,使用byte保存单个字母字符

布尔型、字符串

数值型中的int32又称为rune,可保存一个unicode码点。int和uint的大小和操作系统位数一样,32位OS则为4字节,64位OS则为8字节。浮点数默认64位,整数默认int。

复杂数据类型:

指针、数组、结构体、管道、函数、切片、接口、映射

值类型与引用类型

值类型:基本数据类型、数组、结构体。变量直接存储值,通常存储于栈中,函数传参时使用值传递

引用类型:指针、切片、映射、管道、接口等。变量存储的是值的地址,通常存储于堆中,会发生GC,函数传参时使用引用传递。

查看变量类型

查看变量类型:

a, sex:= 2, "male"

fmt.Printf("a的类型:%T,sex的类型:%T\n", a, sex)

查看变量占用内存大小时,先导入unsafe和fmt包

import (
"fmt"
"unsafe"
)

再调用unsafe.Sizeof函数就行

fmt.Printf("a占用内存大小:%d, sex占用内存大小:%d", unsafe.Sizeof(a), unsafe.Sizeof(sex))

输出结果:

image.png

字符与字符串

输出字符时,需要格式化输出,否则会输出的它的ascii值

c1 := 's'
c2 := '0'

fmt.Println("c1 = ", c1, ", c2 = ", c2)
fmt.Printf("c1 = %c, c2 = %c\n", c1, c2)

输出如下

image.png

输出汉字和对应unicode码值

c3 := '宋'
fmt.Printf("c3 = %c, 对应unicode码值: %d\n", c3, c3)

结果如下:

image.png

跨行字符串,用符号包住

var s = `
NAVI战队来自乌克兰。
它在2021年斯德哥尔摩Major中已全胜赢得总冠军。

多行拼接字符串,要在+后面换行,而不是字符串后面。

数值型:

1、整数类型(int、int8、int16、int32、int64、uint、uint8、uint16、uint32、uint64、byte)

2、浮点类型(float32、float64)

3、复数(complex64、complex128)

字符型:没有专门的字符型,使用byte保存单个字母字符

布尔型、字符串

数值型中的int32又称为rune,可保存一个unicode码点。int和uint的大小和操作系统位数一样,32位OS则为4字节,64位OS则为8字节。浮点数默认64位,整数默认int。

复杂数据类型:

指针、数组、结构体、管道、函数、切片、接口、映射 多行拼接字符串,要在+后面换行,而不是字符串后面。

数值型:

1、整数类型(int、int8、int16、int32、int64、uint、uint8、uint16、uint32、uint64、byte)

2、浮点类型(float32、float64)

3、复数(complex64、complex128)

字符型:没有专门的字符型,使用byte保存单个字母字符

布尔型、字符串

数值型中的int32又称为rune,可保存一个unicode码点。int和uint的大小和操作系统位数一样,32位OS则为4字节,64位OS则为8字节。浮点数默认64位,整数默认int。

复杂数据类型:

指针、数组、结构体、管道、函数、切片、接口、映射

计算机软件经历了数十年的发展,形成了多种学术流派,有面向过程编程、面向对象编程、函数式编程、面向消息编程等,这些思想究竟孰优孰劣,众说纷纭。

除了OOP外,近年出现了一些小众的编程哲学,Go语言对这些思想亦有所吸收。例如,Go语言接受了函数式编程的一些想法,支持匿名函数与闭包。再如,Go语言接受了以Erlang语言为代表的面向消息编程思想,支持goroutine和通道,并推荐使用消息而不是共享内存来进行并发编程。总体来说,Go语言是一个非常现代化的语言,精小但非常强大。