Golang基本数据类型
Go语言中每一种数据都定义了明确的数据类型,在内存中分配了不同大小的内存空间。Go语言中有丰富的数据类型,除了基本的整型、浮点型、布尔型、字符串外,还有数组、切片、结构体、函数、map、通道(channel)等。
整型
整型可以分为以下几种:
类型 | 描述 |
---|---|
uint8 | 无符号8位整型 |
uint16 | 无符号16位整型 |
uint32 | 无符号32位整型 |
uint64 | 无符号64位整型 |
int8 | 有符号8位整型 |
int16 | 有符号16位整型 |
int32 | 有符号32位整型 |
int64 | 有符号64位整型 |
其中,uint8
就是我们熟知的byte
型,int16
对应C语言中的short
型,int64
对应C语言中的long
型。
特殊整型:
类型 | 描述 |
---|---|
uint | 32位操作系统上就是uint32,64位操作系统上就是uint64 |
int | 32位操作系统上就是int32,64位操作系统上就是int64 |
uintptr | 无符号整型,用于存放一个指针 |
浮点型
Go语言中支持两种精度的浮点数:float32
和 float64
。
类型 | 描述 |
---|---|
float32 | 32位浮点数 |
float64 | 64位浮点数 |
- float32的浮点数的最大范围约为
3.4e38
,可以使用常量定义:math.MaxFloat32
- float64的浮点数的最大范围约为
1.8e308
,可以使用常量定义:math.MaxFloat64
package main
import "fmt"
func main() {
f1 := 1.23
// go语言中的小数默认都是float64类型
fmt.Printf("%T\n", f1) // float64
f2 := float32(1.23)
fmt.Printf("%T\n", f2) //float32
}
复数
go语言有两种复数类型:complex64
和complex128
package main
import "fmt"
func main() {
var c1 complex64
c1 = 1 + 2i
var c2 complex128
c2 = 2 + 3i
fmt.Println(c1)
fmt.Printf("%T\n", c1)
fmt.Println(c2)
fmt.Printf("%T\n", c2)
}
布尔型
go语言中的布尔类型有两个值true
和false
- 布尔类型变量的默认值为false
- go语言不允许将整型强制转为布尔型
- 布尔型无法参与数值运算,也无法与其他类型进行转换
package main
import "fmt"
func main() {
b1 := true
fmt.Printf("%T\n", b1)
//默认false
var b2 bool
fmt.Printf("%v\n", b2) //false
}
字符串型
go语言中的字符串使用UTF-8
编码,英文占用1个字符,汉字占3个字符,采用双引号或者反引号包裹。字符串是不可变的数据类型。
定义字符串:
var str1 string = "hello"
定义多行字符串:
使用反引号可以实现原样输出
package main
import "fmt"
func main() {
str2 := `
hello
world
golang
`
fmt.Println(str2)
}
使用 +
完成字符串拼接:
package main
import (
"fmt"
)
func main(){
str := "hello" + "world"
str += "tom"
fmt.Println(str) // helloworldtom
}
使用 fmt.Sprintf
完成字符串拼接:
package main
import (
"fmt"
)
func main(){
name1 := "tom"
name2 := "jerry"
str1 := fmt.Sprintf("%s%s",name1, name2)
fmt.Println(str1) //tomjerry
}
获取字符串长度:
使用内置函数len()
可以获取字符串的长度
package main
import (
"fmt"
)
func main(){
str1 := "hello"
fmt.Println(len(str1)) // 5
}
字符串转义符:
转义 | 含义 |
---|---|
\r |
回车符 |
\n |
换行符 |
\t |
制表符 |
\' |
单引号 |
\" |
双引号 |
\ |
反斜杠 |
示例:
package main
import (
"fmt"
)
func main(){
fmt.Println("str:=\"c:\\aa\\bb.test\"") // str:="c:\aa\bb.test"
}
byte和rune类型
字符串中的每个元素被称为字符。
go中的字符有以下两种:
byte
类型:占用一个字节,表示ACSII表中的一个字符,本质上就是uint8
类型。rune
类型:占用四个字节,表示的是一个UTF-8
字符,用来处理中文等复合字符,本质上就是uint32
类型。
由于字符串是不可变类型,我们可以将其转换成[]rune
或者[]byte
,再转换成string,完成修改功能。
package main
import (
"fmt"
)
func main(){
name1 := "tom"
// 把字符串强制转换成一个rune切片
name2 := []rune(name1)
name2[0] = 'j'
// 把rune切片强制转换成字符串
fmt.Println(string(name2)) // jom
}
数据类型转换
go语言中只有强制类型转换,没有隐式类型转换。
语法:
v1 := T(v)
- T:需要转换的数据类型
- v:需要转换的变量
- v1:转换成 T 类型后的变量
package main
import (
"fmt"
)
func main(){
var num1 int32 = 100
var num2 float32 = float32(num1)
fmt.Printf("%T\n", num2) // float32
fmt.Printf("%v\n", num2) //100
}