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数字字面量

  1. //十进制
  2. var a int = 10
  3. fmt.Printf("%d\n",a) //十进制 10
  4. fmt.Printf("%b\n",a) //二进制 1010
  1. //八进制
  2. var a int = 077
  3. fmt.Printf("%d\n",a) //十进制 63
  4. fmt.Printf("%o\n",a) //八进制 77
  1. //十六进制
  2. var a int = 0xff
  3. fmt.Printf("%x\n",a) //16进制
  4. fmt.Printf("%X\n",a) //16进制
  5. fmt.Printf("%d\n",a) //十进制

2.浮点型

Go语言支持两种浮点型数:float32和float64

  1. fmt.Printf("%f\n",math.Pi)
  2. fmt.Printf("%.2f",math.E)

3.复数

复数有实部和虚部,complex64的实部和虚部为32位,complex128的实部和虚部为64位

  1. var c1 complex64
  2. c1 = 1 + 2i
  3. var c2 complex128
  4. c2 = 2 + 3i
  5. fmt.Println(c1)
  6. fmt.Println(c2)

4.布尔值

Go语言中以bool类型进行声明布尔型数据,布尔型数据只有true(真)和false(假)两个值

  1. var isOk bool
  2. fmt.Println(isOk)
  1. 布尔类型变量的默认值为false。
  2. Go 语言中不允许将整型强制转换为布尔型.
  3. 布尔型无法参与数值运算,也无法与其他类型进行转换。

5.字符串

  1. s1 := "hello"
  2. s2 := "world"
  3. fmt.Print(s1+s2)

5.1字符串转义符

转义符 含义
\r 回车符(返回行首)
\n 换行符(直接跳到下一行的同列位置)
\t 制表符
\‘ 单引号
\“ 双引号
\\ 反斜杠

5.2多行字符串

  1. import "fmt"
  2. func main() {
  3. //原样输出
  4. str := `
  5. hello world
  6. 你好世界
  7. `
  8. fmt.Println(str)
  9. }

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操作
  1. str :="hello world"
  2. fmt.Println(len(str)) //字符串的长度
  3. fmt.Println(str+"你好世界") //拼接字符串
  4. fmt.Println(strings.Contains(str,"e")) //字符串是否包含
  5. fmt.Println(strings.Split(str," ")) //字符串分割
  6. fmt.Println(strings.HasPrefix(str,"hello")) //前缀判断
  7. fmt.Println(strings.HasSuffix(str,"world")) //后缀判断
  8. fmt.Println(strings.LastIndex(str,"world")) //子串出现的位置

5.4修改字符串

要修改字符串,需要先将其转换成[]rune或[]byte,完成后再转换为string。
无论哪种转换,都会重新分配内存,并复制字节数组。

  1. str := "白色"
  2. rune := []rune(str)
  3. rune[0]='黄'
  4. fmt.Println(string(rune)) //黄色
  1. str := "hello world"
  2. s1 := []byte(str)
  3. s1[0]= 'H'
  4. fmt.Println(string(s1)) //Hello world

字符串底层是一个byte数组,所以可以和[]byte类型相互转换
rune类型用来表示utf8字符,一个rune字符由一个或多个byte组成

6.字符

组成每个字符串的元素叫做字符,可以通过遍历或者单个获取字符串元素获得字符。 字符用单引号包裹起来

  1. var a = '中'
  2. var b = 'x'

Go 语言的字符有以下两种:

  1. uint8类型,或者叫 byte 型,代表了ASCII码的一个字符。
  2. rune类型,代表一个 UTF-8字符。

当需要处理中文、日文或者其他复合字符时,则需要用到rune类型。rune类型实际是一个int32

  1. str := "hello world"
  2. for i := range str {
  3. fmt.Printf("%v(%c)\n",str[i],str[i])
  4. fmt.Printf("%T\n",str[i]) //uint8(byte)
  5. }
  1. str := "hello world 我的世界"
  2. for _,s:= range str {
  3. fmt.Printf("%v(%c)\n",s,s)
  4. fmt.Printf("%T\n",s) //int32(rune)
  5. }

7.类型转换

Go语言中只有强制类型转换,没有隐式类型转换。

  1. var a,b = 100,200
  2. var c int
  3. //math.Sqrt()接收的参数是float64类型,需要强制转换
  4. c = int(math.Sqrt(float64(a*a+b*b)))
  5. fmt.Println(c)