变量类型
Go语言(又称Golang)提供了一系列丰富的基本数据类型来满足不同的编程需求。以下是一些主要的基本数据类型及其示例:
1. 整型 (Integer Types)
`int`, `int8`, `int16`, `int32`, `int64`: 用于存储整数。`int`的具体大小依赖于目标架构(通常是32位或64位),而其他类型明确指定存储大小。
Go
var age int = 30
var byteValue int8 = 127
2. 无符号整型 (Unsigned Integer Types)
`uint`, `uint8`, `uint16`, `uint32`, `uint64`: 类似于有符号整型,但只存储非负数。
Go
var maxValue uint8 = 255
3. 浮点型 (Floating-point Types)
`float32`, `float64`: 用于存储小数。`float64`提供了更高的精度,是默认的浮点类型。
Go
var pi float64 = 3.14159
4. 复数类型 (Complex Types)
`complex64`, `complex128`: 分别由两个float32和两个float64组成,用于存储复数。
Go
var c complex128 = 3 + 4i
5. 布尔型 (Boolean Type)
`bool`: 只有两种可能的值:`true` 或 `false`,常用于条件判断。
Go
var isTrue bool = true
6. 字符串类型 (String Type)
- 字符串是由Unicode字符序列组成的,用双引号(`"`)包围。
Go
var greeting string = "Hello, World!"
7. 字节与字符类型
字符串中的每一个元素叫做"字符",在遍历或者单个获取字符串元素时可以获得字符。
Go语言的字符有以下两种:
- 一种是 uint8 类型,或者叫 byte 型,代表了 ASCII 码的一个字符。
- 另一种是 rune 类型,代表一个 UTF-8 字符,当需要处理中文、日文或者其他复合字符时,则需要用到 rune 类型。rune 类型等价于 int32 类型。
byte 类型是 uint8 的别名,对于只占用 1 个字节的传统 ASCII 编码的字符来说,完全没有问题,例如 var ch byte = 'A',字符使用单引号括起来。
Go
var asciiChar byte = 'A'
var unicodeChar rune = '世'
类型转换
在Go语言中,由于它是一种静态类型语言,数据类型转换不是隐式的,而是需要程序员显式地进行。数据类型转换允许你改变一个变量或表达式的类型,以便能够在不同类型的上下文中正确使用它们。以下是关于Go语言中数据类型转换的一些关键点和示例:
基本转换语法
数据类型转换的基本语法是在目标类型前加上一个类型转换操作符,后跟待转换的表达式。例如,要将一个整型变量转换为浮点型,你可以这样做:
Go
var intValue int = 10
var floatValue float64 = float64(intValue)
安全性和精度问题
**安全转换** :低精度类型转换到高精度类型通常是安全的,不会导致信息丢失。例如,将`int8`转换为`int64`。
**精度损失** :当从浮点型转换到整型时,小数部分会被截断,这可能会导致数据丢失。
**类型不兼容**:并非所有类型之间都可以直接转换,比如字符串和整数之间直接转换是不允许的,需要使用特定的包如`strconv`来进行转换。
特殊情况
**整型和浮点型转换** :可以直接通过类型转换操作符完成,但要注意精度损失。
**字符串和其他类型转换**:要将整型、浮点型转换为字符串,或者从字符串转换为整型、浮点型,可以使用`strconv`包中的函数,如`strconv.Itoa`、`strconv.ParseInt`、`strconv.FormatFloat`等。
示例:
Go
**整型转换**
var a int = 100
var b int64 = int64(a)
**浮点型转换**
var x float32 = 3.14
var y float64 = float64(x)
**字符串与整型转换**
s := "123"
i, err := strconv.ParseInt(s) // 转换字符串到整型
if err != nil {
fmt.Println("转换错误:", err)
} else {
fmt.Println("转换后的整型:", i)
}
j := 456
str := strconv.Itoa(j) // 转换整型到字符串
fmt.Println("转换后的字符串:", str)