前言
基本数据类型,变量存的就是值,也叫值类型。每一种数据都定义了明确的数据类型,在内存中分配了不同大小的内存空间。
Printf 和 Println 的区别
- printf 输出后不换行, println输出后自动换行;
- printf 格式化输出,println 直接输出内容
- Printf 根据format参数生成格式化的字符串并写入标准输出。
判断数据类型以及查看变量使用内存空间
package main // import "unsafe" // import "fmt" // 引入多个 import ( "fmt" "unsafe" ) func main() { var i int8 = 12 fmt.Println("i= ", i) var i2 uint8 = 129 fmt.Println("i2= ", i2) var n = 12 fmt.Printf("n的类型是%T\n", n) // n的类型是int var name = "xiao" fmt.Printf("name的类型是%T\n", name) // name的类型是string // 查看变量占用的字节大小和数据类型 fmt.Printf("name的类型是%T", name, unsafe.Sizeof(name)) }
基本数据类型
数值型
整数类型 (默认值是0)
int, int8, int16, int32, int64 uint, uint8, uint16, uint32, uint64 无符号数(表示的范围更大) byte
- bit: 计算机中的最小存储单位
- byte: 计算机中基本存储单元
- 1byte = 8bit (一个字节8位)
var i int8 = -129 // constant -129 overflows int8 var i2 uint8 = -129 // constant -129 overflows uint8
浮点类型 (默认值是0)
- float32
- float64(默认类型)
浮点数 = 符号位 + 指数位 + 尾数位
浮点数都是有符号的
使用浮点类型的时候就需要注意存在丢失精度的问题
var num1 float32 = 12.556883123132 // 精度会丢失 var num2 float64 = 12.556883123132 // 64位比32位精度要准确 fmt.Println("num1=", num1, "num2", num2) // num1= 12.556883 num2 12.556883123132 var num = 12.64 fmt.Printf("num的类型", num) // num的类型%!(EXTRA float64=12.64) var num3 = 5.6e2 // 5.6 * 10^2 = 5.6 * 100 = 560 fmt.Println("num3=", num3)
字符型
没有专门的字符型,使用byte
来保存单个字母字符
ASCII
码(128个)
- Go语言的字符使用UTF-8编码
- 英文字母:1个字节
- 汉字:3个字节
- 字符必须使用单引号括起来,双引号会报错
单引号针对单个字符,字符串要使用双引号
UTF-8是对ASCII的扩容
var str1 byte = 'a' var str2 byte = '0' // 当直接输出byte时,输出的使对应字符的ASCII码值(十进制) fmt.Println("str1", str1, "str2", str2) // str1 97 str2 48 fmt.Printf("str1=%c str2=%c", str1, str2) // str1=a str2=0 fmt.Printf("str1=%c", str1) // str1=a fmt.Printf("str2=%c", str2) // str2=0 var name byte = '吖' fmt.Printf("name=%c", name) // overflows byte 超出byte类型的存储范围了 // 汉字更换成int类型 var name int = '吖' fmt.Printf("name=%c", name) // name=吖 var name1 int =22269 fmt.Printf("name1=%c", name1) // name1=国 // 数据类型只是为了定义存储空间的大小,对应计算机中的内存空间
布尔型(bool)(默认值是false)
用于逻辑运算,流程控制。bool
类型只占用一个字节的内存空间
var a = false fmt.Println(a) // false fmt.Println(unsafe.Sizeof(a)) // 1
字符串(string)(默认值是"")
UTF-8
编码
字符串一经定义,则不能修改
var address string = "北京长城" fmt.Println(address) // 北京长城 var str = "hello" str[0] = 'a' // cannot assign to str[0] (strings are immutable) fmt.Println(str) // 反引号 // 以字符串原生形式输出,包括换行和特殊字符,可以实现防止攻击、输出源代码等效果。 // 字符串拼接, + 号要放在上面,否则会报错(因为go默认在一行后面加;号) var str01 = "hello" + " world" str01 += " haha!" + "xixi" + "heihei" fmt.Println(str01) // hello world haha!xixiheihei
基本数据类型的默认值
var a int var b float32 var c float64 var d bool var e string // %v表示按照变量的值输出 fmt.Printf("a=%d,b=%v,c=%v,d=%v e=%v", a,b,c,d,e)
上面输出: a=0,b=0,c=0,d=false e=
派生/复杂数据类型
- 指针(Pointer)
- 数组
- 结构体(struct)
- 管道(Channel)
- 函数
- 切片(slice)
- 接口(interface)
- map
后面陆续讲解复杂数据类型。