

Go 语言基础数据类型及复合类型学习
Go 语言是一种强类型语言,提供了多种基本数据类型和复合数据类型。这些数据类型构成了 Go 编程的基础,理解它们对于编写高效、可读的代码至关重要。本文将介绍 Go 语言的基本数据类型及复合类型,并提供示例代码。
1. 基础数据类型
1.1 布尔类型
布尔类型用于表示真(true)或假(false)的值。
示例
package main
import "fmt"
func main() { var isActive bool = true fmt.Println("Is Active:", isActive) }
|
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) fmt.Println("b:", b) fmt.Println("c:", c) fmt.Println("d:", d) fmt.Println("e:", e) fmt.Println("f:", f) }
|
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) fmt.Println("E:", e) }
|
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) fmt.Println("c2:", c2) }
|
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) fmt.Println(multiline) }
|
1.6 字符类型
字符类型在 Go 中使用 rune 表示,rune 是 int32 的别名,通常用于表示 Unicode 字符。
示例
package main
import "fmt"
func main() { var r rune = 'A' fmt.Println("Rune value:", r) }
|
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) } }
|
2. 复合数据类型
Go 语言还支持多种复合类型,包括指针、数组、切片、字典、通道、结构体和接口。
2.1 指针
指针用于存储变量的地址,可以通过 & 获取变量的地址,通过 * 访问指针指向的值。
示例
package main
import "fmt"
func main() { x := 42 ptr := &x
fmt.Println("Value of x:", *ptr) *ptr = 100 fmt.Println("Updated value of x:", x) }
|
2.2 数组
数组是固定大小的元素集合,声明时需要指定长度。
示例
package main
import "fmt"
func main() { var arr [3]int arr[0] = 1 arr[1] = 2 arr[2] = 3
fmt.Println("Array:", arr) }
|
2.3 切片
切片是对数组的一个抽象,提供了动态大小的数组功能。
示例
package main
import "fmt"
func main() { numbers := []int{1, 2, 3} fmt.Println("Slice:", numbers)
numbers = append(numbers, 4) fmt.Println("Updated Slice:", numbers) }
|
2.4 字典
字典(map)是一种键值对集合,支持快速查找。
示例
package main
import "fmt"
func main() { dict := map[string]int{"one": 1, "two": 2, "three": 3} fmt.Println("Dictionary:", dict)
dict["four"] = 4 fmt.Println("Updated Dictionary:", dict) }
|
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) }
|
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) }
|
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())
g = Spanish{} fmt.Println(g.Greet()) }
|
3. 总结
在 Go 语言中,理解基础数据类型和复合类型是编写高效代码的基础。本文介绍了布尔类型、整型、浮点型、复数类型、字符串类型、字符类型、错误类型,以及指针、数组、切片、字典、通道、结构体和接口等复合类型。