4.GO数据类型

目录

数据类型

整形

特殊整型

浮点型

别名

字符串类型

字符串的常用操作

修改字符串

布尔类型

枚举类型

自定义类型

类型转换


数据类型

在go中我们经常看到这样的变量声明:

var (
    a int 
    b string
    c float32
)

在Go中所有变量都是有类型的, 比如前面的int, string, float32 这些, 因此在接下来我们将先讲解下Go的基础类型

go在语言成面定义了如下几种基础类型:

  • 整形 12345

  • 浮点型 123.45

  • 复数 123.45i

  • 字符 'a'

  • 字符串 "abc"

  • 布尔类型 true, false

  • 枚举类型 iota

  • 自定义类型

整形

类型名字节宽度取值范围
int与平台有关32 位系统 4 字节,64 位系统 8 字节 有符号整型
uint与平台有关32 位 系统 4 字节,64 位 系统 8 字节 无符号整形
int81 字节用 8 位表示的有符号整型 取值范围为:[-128, 127]
int162 字节用 16 位表示的有符号整型 取值范围为:[-32768,32767]
int324 字节用 32 位表示的有符号整型,取值范围为:[-2147483648,2147483647]
int648 字节用 64 位表示的有符号整型,取值范围为:[-9223372036854775808,9223372036854775807]
uint81 字节用 8 位表示的无符号整型,取值范围为:[0,255]
uint162 字节用 16 位表示的无符号整型,取值范围为:[0,65535]
uint324 字节用 32 位表示的无符号整型,取值范围为:[0,4294967295]
uint648 字节用 64 位表示的无符号整型,取值范围为:[0,18446744073709551615]
uintptr与平台有关32 位系统 4 字节,64 位系统 8 字节指针值的无符号整型

特殊整型

类型描述
uint32位操作系统上就是uint32,64位操作系统上就是uint64
int32位操作系统上就是int32,64位操作系统上就是int64
uintptr无符号整型,用于存放一个指针

注意: 在使用intuint类型时,不能假定它是32位或64位的整型,而是考虑intuint可能在不同平台上的差异。

注意事项 获取对象的长度的内建len()函数返回的长度可以根据不同平台的字节长度进行变化。实际使用中,切片或 map 的元素数量等都可以用int来表示。在涉及到二进制传输、读写文件的结构描述时,为了保持文件的结构不会受到不同编译目标平台字节长度的影响,不要使用intuint

浮点型

类型名字节宽度取值范围
float324字节IEEE-754 32位浮点型数
float648字节IEEE-754 64位浮点型数
complex644字节32 位实数和虚数
complex1288字节64 位实数和虚数

别名

类型名字节宽度取值范围
byte1 字节字节类型,取值范围同 uint8
rune4 字节Unicode 码点 取值范围同 uint32

字符串类型

Go 语言内置了字符串类型,使用 string 表示

字面量:

  • 可解析字符串:通过双引号(")来创建,不能包含多行,支持特殊字符转义序列

  • 原生字符串:通过反引号(`)来创建,可包含多行,不支持特殊字符转义序列

特殊字符:

  • \:反斜线

  • ':单引号

  • ":双引号

  • \a:响铃

  • \b:退格

  • \f:换页

  • \n:换行

  • \r:回车

  • \t:制表符

  • \v:垂直制表符

  • \ooo:3 个 8 位数字给定的八进制码点的 Unicode 字符(不能超过\377

  • \uhhhh:4 个 16 位数字给定的十六进制码点的 Unicode 字符

  • \Uhhhhhhhh:8 个 32 位数字给定的十六进制码点的 Unicode 字符

  • \xhh:2 个 8 位数字给定的十六进制码点的 Unicode 字符

字符串的常用操作

方法介绍
len(str)求长度
+或fmt.Sprintf拼接字符串
strings.Split分割
strings.contains判断是否包含
strings.HasPrefix,strings.HasSuffix前缀/后缀判断
strings.Index(),strings.LastIndex()子串出现的位置
strings.Join(a[]string, sep string)join操作

修改字符串

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

func changeString() {
    s1 := "big"
    // 强制类型转换
    byteS1 := []byte(s1)
    byteS1[0] = 'p'
    fmt.Println(string(byteS1))
​
    s2 := "白萝卜"
    runeS2 := []rune(s2)
    runeS2[0] = '红'
    fmt.Println(string(runeS2))
}

布尔类型

布尔类型用于表示真假,类型名为 bool,只有两个值 true 和 false,占用一个字节宽度,零值为 false

var (
    IsBoy  bool = true
    IsGirl bool = true
)

枚举类型

常使用 iota 生成器用于初始化一系列相同规则的常量,批量声明常量的第一个常量使用 iota 进行赋值,此时 iota 被重置为 0,其他常量省略类型和赋值,在每初始化一个常量则加 1

import (
    "fmt"
)
​
const (
    a = iota
    b
    c
    d
)
​
func main() {
    var
    fmt.Println(a, b, c, d)
}
 

自定义类型

在 go 语言中使用 type 声明一种新的类型,语法格式为: type TypeName Formatter

比如我们可以定义自己

type Gender string

类型转换

Go语言中只有强制类型转换,没有隐式类型转换。该语法只能在两个类型之间支持相互转换的时候使用。

强制类型转换的基本语法如下:

T(表达式)

其中,T表示要转换的类型。表达式包括变量、复杂算子和函数返回值等.

比如计算直角三角形的斜边长时使用math包的Sqrt()函数,该函数接收的是float64类型的参数,而变量a和b都是int类型的,这个时候就需要将a和b强制类型转换为float64类型。

func sqrtDemo() {
    var a, b = 3, 4
    var c int
    // math.Sqrt()接收的参数是float64类型,需要强制转换
    c = int(math.Sqrt(float64(a*a + b*b)))
    fmt.Println(c)
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值