数据类型
基本数据类型与复杂数据类型
基本数据类型:
数值型:
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))
输出结果:
字符与字符串
输出字符时,需要格式化输出,否则会输出的它的ascii值
c1 := 's'
c2 := '0'
fmt.Println("c1 = ", c1, ", c2 = ", c2)
fmt.Printf("c1 = %c, c2 = %c\n", c1, c2)
输出如下
输出汉字和对应unicode码值
c3 := '宋'
fmt.Printf("c3 = %c, 对应unicode码值: %d\n", c3, c3)
结果如下:
跨行字符串,用符号包住
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语言是一个非常现代化的语言,精小但非常强大。