一、go基本数据类型
内置七类基本数据类型(20各具体子类型):
布尔类型:bool
整型:byte int int8 int16 int32 int64 uint uint8 uint16 uint32 uint64 uintptr
浮点型:float32(4个字节) float64(8个字节)
复数:complex64 complex128
字符:rune
字符串:string
错误:error
派生/复杂数据类型:
指针、数组、结构体、管道、函数、切片、接口、map
二、整数数据类型使用
用来存放整数值,比如0,-1,1111等
有符号整数第一位是符号
package main
import "fmt"
func main() {
var i int = 1
fmt.Println("i=", i)
var j int8 = -129
fmt.Println("j=", j)
}
int8 范围-128~127 ,超过这个范围,编译错误
无符号,第一位不是符号:
package main
import (
"fmt"
"unsafe"
)
func main() {
var i int = 1
fmt.Println("i=", i)
var j int16 = -10
fmt.Println("j=", j)
fmt.Printf("j的类型是 %T j的字节数是 %d ", j, unsafe.Sizeof(j))
//unsafe.Sizeof(j)返回j占用的字节数
}
输出:
PS D:\goproject\src\go_code\chaptor1\demo06> go run .\main.go
i= 1
j= -10
j的类型是 int16 j的字节数是 2
bit:计算机中最小存储单位,byte:计算机中基本存储单位。1 byte=8 bit
三、浮点数
go内置两种浮点数类型,分别是float32和float64
1、浮点数字面量被自动类型和推断为float64类型。
package main
import "fmt"
func main() {
var b = 10.00
fmt.Printf("b的数据类型是%T", b)
}
PS D:\goproject\src\go_code\chaptor1\demo7> go run .\main.go
b的数据类型是float64
2、一般使用float64,比float32更准确。
四、字符char
go中没有专门的字符类型,如果要存储单个字符(字母),一般使用byte保存
package main
import (
"fmt"
)
func main() {
var a = 'A'
var b = 'B'
fmt.Println("a=",a)
fmt.Println("b=",b)//直接输出byte值,就是输出对应字符的码值
fmt.Printf("a=%c b=%c", a, b)
//格式化输出对应字符
}
输出
PS D:\goproject\src\go_code\chaptor1\demo8> go run .\main.go
a= 65
b= 66
a=A b=B
五、bool
(1)bool类型只允许取值true和false
(2)占一个字节
package main
import (
"fmt"
"unsafe"
)
func main() {
var a = false
fmt.Println("a=",a)
fmt.Println("a占用的空间=", unsafe.Sizeof(a))
}
输出
PS D:\goproject\src\go_code\chaptor1\demo9> go run .\main.go
a= false
a占用的空间= 1
六、字符串string
字符串是一串固定长度的字符连接起来的字符序列。go的字符串是由字节组成,使用UTF-8编码,字符串一旦被赋值,字符串就不能修改。
字符串的两种表示形式:
(1)双引号,会识别转义字符
(2)反引号,以字符串的原生形式输出,包括换行和特殊字符
package main
import (
"fmt"
)
func main () {
var a string = "玄武湖"
fmt.Println("a是", a)
b := "NJ\nBJ"
fmt.Println(b)
c := `
PS D:\goproject\src\go_code\chaptor1\demo10> go run .\main.go
a是 玄武湖
`
fmt.Println(c)
}
输出
PS D:\goproject\src\go_code\chaptor1\demo10> go run .\main.go
a是 玄武湖
NJ
BJ
PS D:\goproject\src\go_code\chaptor1\demo10> go run .\main.go
a是 玄武湖
七、基本数据类型默认值
整型:0
浮点型:0
字符串:“”
bool:false
package main
import "fmt"
func main () {
var a int
var b float32
var c float64
var d bool
var e string
fmt.Printf("a=%d,b=%v,c=%v,d=%v,e=%v",a,b,c,d,e)
//%v表示按照变量的值输出
}
输出
PS D:\goproject\src\go_code\chaptor1\demo11> go run .\main.go
a=0,b=0,c=0,d=false,e=
八、基本数据类型的相互转换
(1)go在不同数据类型的变量之间赋值时需要显示转换,不能自动转换;
(2)被转换的是变量存储的数据,变量本身的数据类型不会变化;
(3)转换过程中,int64转成int8(-128~127),会做溢出处理;
(4)
package main
import "fmt"
func main () {
var i int32 = 100
var n1 float32 = float32(i)
var n2 int64 = int64(i)
fmt.Printf("i=%v, n1=%v, n2=%v", i, n1,n2)
}
输出
PS D:\goproject\src\go_code\chaptor2\demo1> go run .\main.go
i=100, n1=100, n2=100