Go语言基础--数据类型(整型、字符型)
转义字符
常用的转义字符有如下:
1)\t : 表示一个制表符,通常使用它可以排版。
2)\n:换行符
3)\\:一个\
4) \":一个"
5)\r:一个回车
数据类型概述
在 Go 编程语言中,数据类型用于声明函数和变量。
数据类型的出现是为了把数据分成所需内存大小不同的数据,编程的时候需要用大数据的时候才需要申请大内存,就可以充分利用内存。
整型
有符号整型
int8
:8位整型,表示范围是-128到127。int16
:16位整型,表示范围是-32,768到32,767。int32
:32位整型,表示范围是-2,147,483,648到2,147,483,647。int64
:64位整型,表示范围是-9,223,372,036,854,775,808到9,223,372,036,854,775,807。int
:这是一个特殊的整型,其大小在不同的平台(32位或64位)上可能不同。在32位系统上,它的大小与int32
相同;在64位系统上,它的大小与int64
相同。它是Go的默认整型。
无符号整型
uint8
:8位无符号整型,表示范围是0到255。通常用于表示字节(byte)或字符(rune的别名)。uint16
:16位无符号整型,表示范围是0到65,535。uint32
:32位无符号整型,表示范围是0到4,294,967,295。uint64
:64位无符号整型,表示范围是0到18,446,744,073,709,551,615。uintptr
:一个无符号整型,其大小足以存储指针。在32位系统上,它的大小与uint32
相同;在64位系统上,它的大小与uint64
相同。uintptr
通常用于低级编程,如系统调用或与C语言库交互。
//fmt.Printf() 可以用于做格式化输出。
fmt.Printf("a 的 类型 %T \n", a)
//如何在程序查看某个变量的占用字节大小和数据类型
var b int64 = 101
//unsafe.Sizeof(n2) 是unsafe包的一个函数,可以返回n1变量占用的字节数
fmt.Printf("b 的 类型 %T b占用的字节数是 %d ", b, unsafe.Sizeof(b))
字符型
字符概念
在Go语言中,字符类型具有独特的特点和表示方式。字符是构建字符串的基本单位,用于表示文本和字符数据。Go语言中的字符类型使用Unicode编码,这意味着它可以表示世界上各种语言的字符,包括英文字母、数字、标点符号以及各种特殊字符和符号。
字符种类
虽然Go语言在类型系统中没有直接称为“字符”的基本类型(如C语言中的char
),但它提供了几种方式来处理字符数据:
- rune类型:
- Go语言使用
rune
类型来表示Unicode码点。rune
实际上是int32
类型的别名,用于处理Unicode字符。每个Unicode字符都对应一个唯一的码点,而rune
类型能够存储这些码点。 - 使用
rune
类型可以方便地处理多字节字符(如汉字),因为Unicode字符可能由多个字节组成,而rune
类型能够确保每个字符都被正确地表示和处理。
- Go语言使用
- byte类型:
- 在Go语言中,
byte
类型也是处理字符的一种方式,但它主要用于表示ASCII字符集中的字符。byte
实际上是uint8
类型的别名,用于存储单个字节的数据。 - 对于只包含ASCII字符的文本,可以使用
byte
类型来处理。然而,对于包含Unicode字符(如汉字、特殊符号等)的文本,使用byte
类型可能不够方便,因为Unicode字符可能由多个字节组成。
- 在Go语言中,
- 字符串类型(string):
- 字符串类型(
string
)在Go语言中用于表示一串字符的序列。字符串是由字节组成的,但这些字节使用UTF-8编码来表示Unicode文本。 - 字符串在Go语言中是不可变的,一旦创建就不能直接修改其内容。如果需要修改字符串,通常的做法是将字符串转换为
rune
切片或byte
切片,进行修改后再转换回字符串。
- 字符串类型(
字符操作
在Go语言中,可以使用多种方式对字符进行操作,包括:
- 字符的赋值和读取:可以使用
rune
类型或byte
类型来存储和读取字符。 - 字符的拼接:可以使用
+
操作符将字符或字符串进行拼接。 - 字符的遍历:可以使用
for
循环和range
关键字遍历字符串中的字符,此时遍历的变量类型会根据上下文自动推断为rune
或byte
。 - 字符的格式化输出:可以使用
fmt.Printf
等函数和格式化占位符(如%c
)来输出字符。
Golang 中没有专门的字符类型,如果要存储单个字符(字母),一般使用 byte 来保存。
package main
import "fmt"
func main() {
// 示例1:字符与码值的直接输出与格式化输出
var c1 byte = 'a'
var c2 byte = '0' // 字符的'0'
// 直接输出byte值,显示的是字符的UTF-8编码的码值(对于ASCII字符,UTF-8编码与ASCII码相同)
fmt.Println(c1, c2) // 输出:97 48
// 使用格式化输出%c显示字符
fmt.Printf("c1=%c, c2=%c\n", c1, c2) // 输出:c1=a, c2=0
// 示例2:Unicode字符与码值的处理
var c3 int = '王' // 注意:这里虽然可以编译,但最好使用rune来存储Unicode字符
fmt.Printf("c3=%c, c3对应的码值%d\n", rune(c3), c3) // 显式转换为rune以正确显示字符
// 示例3:数字与字符的转换
var c4 int64 = 19996 // '王'的Unicode码值
fmt.Printf("c4=%c\n", rune(c4)) // 显式转换为rune以显示字符
// 示例4:字符的运算
// 字符运算实际上是码值之间的运算
var n1 = 10 + 'a' // 'a'的ASCII码是97,所以结果是107,对应ASCII码表中的字符'k'
fmt.Println("n1=", n1, "对应的字符是", string(n1)) // 使用string()将整数转换为字符串表示,但注意这里实际上显示的是'k'
// 备注:
// 1. 字符在计算机中是以其对应的码值(整数)形式存储的。
// 2. 字符和码值的对应关系由字符编码表决定,Go语言使用UTF-8编码。
// 3. Go中没有专门的char类型,通常使用byte(针对ASCII字符)或rune(针对Unicode字符)来表示字符。
// 4. 字符常量用单引号括起来,如'a'、'中'等。
// 5. Go支持转义字符,如'\n'表示换行符。
// 6. 字符类型在Go中可以进行运算,因为它们在内部是以整数(码值)形式存在的。
}