1.整型
整型分为以下两个大类: 按长度分为:int8、int16、int32、int64
对应的无符号整型:uint8、uint16、uint32、uint64
uint8就是我们熟知的byte型
int16对应C语言中的short型
int64对应C语言中的long型
1.1特殊整型
类型 | 描述 |
---|---|
uint | 32位操作系统上就是uint32,64位操作系统上就是uint64 |
int | 32位操作系统上就是int32,64位操作系统上就是int64 |
uintptr | 无符号整型,用于存放一个指针 |
1.2数字字面量
//十进制
var a int = 10
fmt.Printf("%d\n",a) //十进制 10
fmt.Printf("%b\n",a) //二进制 1010
//八进制
var a int = 077
fmt.Printf("%d\n",a) //十进制 63
fmt.Printf("%o\n",a) //八进制 77
//十六进制
var a int = 0xff
fmt.Printf("%x\n",a) //16进制
fmt.Printf("%X\n",a) //16进制
fmt.Printf("%d\n",a) //十进制
2.浮点型
Go语言支持两种浮点型数:float32和float64
fmt.Printf("%f\n",math.Pi)
fmt.Printf("%.2f",math.E)
3.复数
复数有实部和虚部,complex64的实部和虚部为32位,complex128的实部和虚部为64位
var c1 complex64
c1 = 1 + 2i
var c2 complex128
c2 = 2 + 3i
fmt.Println(c1)
fmt.Println(c2)
4.布尔值
Go语言中以bool类型进行声明布尔型数据,布尔型数据只有true(真)和false(假)两个值
var isOk bool
fmt.Println(isOk)
- 布尔类型变量的默认值为false。
- Go 语言中不允许将整型强制转换为布尔型.
- 布尔型无法参与数值运算,也无法与其他类型进行转换。
5.字符串
s1 := "hello"
s2 := "world"
fmt.Print(s1+s2)
5.1字符串转义符
转义符 | 含义 |
---|---|
\r | 回车符(返回行首) |
\n | 换行符(直接跳到下一行的同列位置) |
\t | 制表符 |
\‘ | 单引号 |
\“ | 双引号 |
\\ | 反斜杠 |
5.2多行字符串
import "fmt"
func main() {
//原样输出
str := `
hello world
你好世界
`
fmt.Println(str)
}
5.3字符串的常用操作
方法 | 介绍 |
---|---|
len(str) | 求长度 |
+或fmt.Sprintf | 拼接字符串 |
strings.Split | 分割 |
strings.contains | 判断是否包含 |
strings.HasPrefix,strings.HasSuffix | 前缀/后缀判断 |
strings.Index(),strings.LastIndex() | 子串出现的位置 |
strings.Join(a[]string, sep string) | join操作 |
str :="hello world"
fmt.Println(len(str)) //字符串的长度
fmt.Println(str+"你好世界") //拼接字符串
fmt.Println(strings.Contains(str,"e")) //字符串是否包含
fmt.Println(strings.Split(str," ")) //字符串分割
fmt.Println(strings.HasPrefix(str,"hello")) //前缀判断
fmt.Println(strings.HasSuffix(str,"world")) //后缀判断
fmt.Println(strings.LastIndex(str,"world")) //子串出现的位置
5.4修改字符串
要修改字符串,需要先将其转换成[]rune或[]byte,完成后再转换为string。
无论哪种转换,都会重新分配内存,并复制字节数组。
str := "白色"
rune := []rune(str)
rune[0]='黄'
fmt.Println(string(rune)) //黄色
str := "hello world"
s1 := []byte(str)
s1[0]= 'H'
fmt.Println(string(s1)) //Hello world
字符串底层是一个byte数组,所以可以和[]byte类型相互转换
rune类型用来表示utf8字符,一个rune字符由一个或多个byte组成
6.字符
组成每个字符串的元素叫做字符,可以通过遍历或者单个获取字符串元素获得字符。 字符用单引号包裹起来
var a = '中'
var b = 'x'
Go 语言的字符有以下两种:
- uint8类型,或者叫 byte 型,代表了ASCII码的一个字符。
- rune类型,代表一个 UTF-8字符。
当需要处理中文、日文或者其他复合字符时,则需要用到rune类型。rune类型实际是一个int32
str := "hello world"
for i := range str {
fmt.Printf("%v(%c)\n",str[i],str[i])
fmt.Printf("%T\n",str[i]) //uint8(byte)
}
str := "hello world 我的世界"
for _,s:= range str {
fmt.Printf("%v(%c)\n",s,s)
fmt.Printf("%T\n",s) //int32(rune)
}
7.类型转换
Go语言中只有强制类型转换,没有隐式类型转换。
var a,b = 100,200
var c int
//math.Sqrt()接收的参数是float64类型,需要强制转换
c = int(math.Sqrt(float64(a*a+b*b)))
fmt.Println(c)