Go 语言基础数据类型及复合类型学习
Go 语言是一种强类型语言,提供了多种基本数据类型和复合数据类型。这些数据类型构成了 Go 编程的基础,理解它们对于编写高效、可读的代码至关重要。本文将介绍 Go 语言的基本数据类型及复合类型,并提供示例代码。
1. 基础数据类型
1.1 布尔类型
布尔类型用于表示真(true
)或假(false
)的值。
示例
package main
import "fmt"
func main() {
var isActive bool = true
fmt.Println("Is Active:", isActive) // 输出: Is Active: true
}
1.2 整型
Go 语言提供了多种整型,包括:
int8
:8 位带符号整型byte
:8 位无符号整型(uint8
的别名)int16
:16 位带符号整型int
:平台相关的整型,通常为 32 位或 64 位uint
:无符号整型,通常为 32 位或 64 位uintptr
:无符号整型,用于存储指针
示例
package main
import "fmt"
func main() {
var a int8 = 127
var b byte = 255
var c int16 = -32768
var d int = 42
var e uint = 50
var f uintptr = 0x1234
fmt.Println("a:", a) // 输出: a: 127
fmt.Println("b:", b) // 输出: b: 255
fmt.Println("c:", c) // 输出: c: -32768
fmt.Println("d:", d) // 输出: d: 42
fmt.Println("e:", e) // 输出: e: 50
fmt.Println("f:", f) // 输出: f: 4660
}
1.3 浮点类型
浮点类型用于表示带小数的数值,Go 提供了两种浮点型:
float32
:单精度浮点数float64
:双精度浮点数,默认使用此类型
示例
package main
import "fmt"
func main() {
var pi float64 = 3.14159
var e float32 = 2.71828
fmt.Println("Pi:", pi) // 输出: Pi: 3.14159
fmt.Println("E:", e) // 输出: E: 2.71828
}
1.4 复数类型
复数类型由实部和虚部组成,Go 支持两种复数类型:
complex64
(对应于float32
)complex128
(对应于float64
)
示例
package main
import "fmt"
func main() {
var c1 complex64 = 1 + 2i
var c2 complex128 = 3 + 4i
fmt.Println("c1:", c1) // 输出: c1: (1+2i)
fmt.Println("c2:", c2) // 输出: c2: (3+4i)
}
1.5 字符串类型
字符串是字符的序列,Go 的字符串是不可变的。可以使用双引号或反引号(用于多行字符串)来定义字符串。
示例
package main
import "fmt"
func main() {
var greeting string = "Hello, Go!"
var multiline string = `This is a
multiline string.`
fmt.Println(greeting) // 输出: Hello, Go!
fmt.Println(multiline) // 输出: This is a\nmultiline string.
}
1.6 字符类型
字符类型在 Go 中使用 rune
表示,rune
是 int32
的别名,通常用于表示 Unicode 字符。
示例
package main
import "fmt"
func main() {
var r rune = 'A'
fmt.Println("Rune value:", r) // 输出: Rune value: 65 (Unicode for 'A')
}
1.7 错误类型
Go 的错误处理采用了内置的 error
类型,通常用于表示函数执行中的错误。
示例
package main
import (
"errors"
"fmt"
)
func doSomething() error {
return errors.New("an error occurred")
}
func main() {
if err := doSomething(); err != nil {
fmt.Println("Error:", err) // 输出: Error: an error occurred
}
}
2. 复合数据类型
Go 语言还支持多种复合类型,包括指针、数组、切片、字典、通道、结构体和接口。
2.1 指针
指针用于存储变量的地址,可以通过 &
获取变量的地址,通过 *
访问指针指向的值。
示例
package main
import "fmt"
func main() {
x := 42
ptr := &x // 获取 x 的地址
fmt.Println("Value of x:", *ptr) // 输出: Value of x: 42
*ptr = 100 // 修改 x 的值
fmt.Println("Updated value of x:", x) // 输出: Updated value of x: 100
}
2.2 数组
数组是固定大小的元素集合,声明时需要指定长度。
示例
package main
import "fmt"
func main() {
var arr [3]int // 声明一个长度为 3 的整型数组
arr[0] = 1
arr[1] = 2
arr[2] = 3
fmt.Println("Array:", arr) // 输出: Array: [1 2 3]
}
2.3 切片
切片是对数组的一个抽象,提供了动态大小的数组功能。
示例
package main
import "fmt"
func main() {
numbers := []int{1, 2, 3}
fmt.Println("Slice:", numbers) // 输出: Slice: [1 2 3]
// 添加元素
numbers = append(numbers, 4)
fmt.Println("Updated Slice:", numbers) // 输出: Updated Slice: [1 2 3 4]
}
2.4 字典
字典(map)是一种键值对集合,支持快速查找。
示例
package main
import "fmt"
func main() {
dict := map[string]int{"one": 1, "two": 2, "three": 3}
fmt.Println("Dictionary:", dict) // 输出: Dictionary: map[one:1 three:3 two:2]
// 添加元素
dict["four"] = 4
fmt.Println("Updated Dictionary:", dict) // 输出: Updated Dictionary: map[four:4 one:1 three:3 two:2]
}
2.5 通道(Channel)
通道用于在 goroutine 之间进行通信。
示例
package main
import (
"fmt"
"time"
)
func main() {
ch := make(chan string)
go func() {
time.Sleep(1 * time.Second)
ch <- "Hello from goroutine!"
}()
fmt.Println(<-ch) // 输出: Hello from goroutine!
}
2.6 结构体
结构体用于将不同类型的数据组合在一起。
示例
package main
import "fmt"
type Person struct {
Name string
Age int
}
func main() {
p := Person{Name: "Alice", Age: 30}
fmt.Println("Person:", p) // 输出: Person: {Alice 30}
}
2.7 接口
接口定义了一组方法的集合,可以通过接口实现多态。
示例
package main
import "fmt"
type Greeter interface {
Greet() string
}
type English struct{}
func (e English) Greet() string {
return "Hello!"
}
type Spanish struct{}
func (s Spanish) Greet() string {
return "¡Hola!"
}
func main() {
var g Greeter
g = English{}
fmt.Println(g.Greet()) // 输出: Hello!
g = Spanish{}
fmt.Println(g.Greet()) // 输出: ¡Hola!
}
3. 总结
在 Go 语言中,理解基础数据类型和复合类型是编写高效代码的基础。本文介绍了布尔类型、整型、浮点型、复数类型、字符串类型、字符类型、错误类型,以及指针、数组、切片、字典、通道、结构体和接口等复合类型。