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 = 10fmt.Printf("%d\n",a) //十进制 10fmt.Printf("%b\n",a) //二进制 1010
//八进制var a int = 077fmt.Printf("%d\n",a) //十进制 63fmt.Printf("%o\n",a) //八进制 77
//十六进制var a int = 0xfffmt.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 complex64c1 = 1 + 2ivar c2 complex128c2 = 2 + 3ifmt.Println(c1)fmt.Println(c2)
4.布尔值
Go语言中以bool类型进行声明布尔型数据,布尔型数据只有true(真)和false(假)两个值
var isOk boolfmt.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,200var c int//math.Sqrt()接收的参数是float64类型,需要强制转换c = int(math.Sqrt(float64(a*a+b*b)))fmt.Println(c)
