1. 基本数据类型

整型

数据类型说明取值范围
有符号整数
int有符号-9223372036854775808到9223372036854775807
int8有符号 8位整数-128到127
int16有符号 16位整数-32768到32767
int32有符号 32位整数-2147483648到2147483647
int64有符号 64位整数-9223372036854775808到9223372036854775807
无符号整数
uint8无符号 8位整数0到256
uint16无符号 16位整数0到65535
uint32无符号 32位整数0到4294967295
uint64无符号 64位整数0到18446744073709551615

关于int类型的取值范围,如果要把一个大的数字,放进小的数据类型则会放不进去。

var i1 int8 = 100
fmt.Println(i1)     // 100 没有问题
// 如果赋值为200 则不行 因为int8取值范围最大是127

var i2 uint8 = 200
fmt.Println(i2) // 200  uint8 取值范围最大是0到255

在Go语言中 byte与uint8 是一样的,rune与int32是一样的,代表同一种数据类型。但是int和int64 不是同一种类型。

// byte  uint8 的别称
// rune  int32 的别称
var i1 uint8 = 100
var i2 byte = i1
fmt.Println(i1,i2)  //100,100

浮点

Go语言有两种精度的浮点数 float32 和 float64。

单精度 取值范围
float32负数时-3.402823E38 到 -1.401298E-45
float32正数时1.401298E-45 到 3.402823E38
双精度取值范围
float64-1.79E+308 到 +1.79E+308

1.79E-308 是 1.79 乘以 10的负308次方。 1.79E+308 是 1.79 乘以 10的308次方。

单精度双精度区别

  • 在内存中占用的字节数不同

    • 单精度浮点数占4个字节。
    • 双精度浮点数占8个字节。
  • 有效数字位数不同

    • 单精度浮点数,有效数字7位。
    • 双精度浮点数,有效数字16位。
  • 使用情况区别

    • 单精度类型,一般用来表示美元的时候使用。
    • 超出人类经验的数字函数,例如sin()`cos()`tan()`sqrt()`都使用双精度值。

字符

错误

字符串

字符串就是多个byte的集合,一个字符串用双引号""或者单引号''表示

package main

import "fmt"

func main() {
    s1 := "Test"
    fmt.Printf("s1的类型是%T,值为%s\n", s1, s1) // s1的类型是string,值为Test

    v1 := 'A'
    v2 := "A"
    fmt.Printf("v1的类型是%T,值为%d\n", v1, v1) // v1的类型是int32,值为65
    fmt.Printf("v2的类型是%T,值为%s\n", v2, v2) // v2的类型是string,值为A

    // 单引号存储的是 ASCII编码
    // A的ASCII值A=65
    // B的ASCII值B=66
    // a的ASCII值a=97

    v3 := '国'
    fmt.Printf("v3的类型是%T, %d, %c, 值为%q\n", v3, v3, v3, v3) // v3的类型是int32, 22269, 国, 值为'国'

    // 定义字符串
    s2 := "你好 开启Go学习之路"
    s3 := "hello go"
    fmt.Println(s2) // 你好 开启Go学习之路
    fmt.Println(s3) // hello go

    // 字符串的长度
    // 中文占3个字节
    fmt.Println(len(s2)) // 21
    fmt.Println(len(s3)) // 8

    // 获取某个字节
    fmt.Println(s2[0]) // 228
}

字符转义

package main

import "fmt"

func main() {
    // 字符转义空格
    fmt.Println("hello \t golang") // hello      golang

    // 输出换行
    fmt.Println("hello \n golang")
    // hello
    // golang

    // 回车符号
    fmt.Println("hello \r golang")
    // hello
    // golang

    // 输出路径
    fmt.Println("E:\\golang\\go.jpg") // E:\golang\go.jpg

    // 双引号
    fmt.Println("hello  \"golang\"") // hello  "golang"
}

布尔

一个布尔类型的值只有两种结果,true或者false非真即假。往往使用在条件判断的时候。

package main

import "fmt"

func main() {
    v := 100

    fmt.Println(v == 200) // false

    fmt.Println(v != 200) // true
}

2. 复合数据类型

数组

切片

字典

函数

指针

结构体

接口

通道

3. 数据类型的转换

go语言是静态语言,要求、定义、赋值、运算、类型一致才能进行操作。所以要进行操作的时候必须保证数据类型一致。需要注意的是,只有兼容的数据类型才能够转换。强制类型转换的语法Type(value)

package main

import "fmt"

func main() {
    var v1 int8 = 100
    var v2 int16
    v2 = int16(v1)
    // b=a  因为类型不同不能直接转换
    fmt.Println(v1, v2) // 100 100

    f1 := 3.14
    var i1 int
    i1 = int(f1)
    fmt.Println(f1, i1) // 3.14 3   浮点类型转为整形的时候 只是取了整数部分

    // 不是所有类型都能互相转换
    // 数值类型的可以转换 int 和 bool 不能转换
}

Last modification:November 10, 2022
If you think my article is useful to you, please feel free to appreciate