Go语言是一种静态类型的编程语言,这意味着每个变量和表达式在编译时都有确定的类型。Go提供了丰富的内置类型,包括基本数据类型、复合数据类型和引用类型等。本文将详细介绍Go中的各种类型,并提供实例说明。
基本数据类型
布尔型(bool)
布尔型有两个可能的值:true
和false
。它们是未类型的布尔值。
go
var isTrue bool = true
var isFalse bool = false
整数型
Go提供了不同大小的整数类型,包括有符号和无符号整数。
- 无符号整数类型:
uint8
,uint16
,uint32
,uint64
- 有符号整数类型:
int8
,int16
,int32
,int64
go
var u8 uint8 = 255
var i8 int8 = -128
浮点型
浮点型包括单精度和双精度浮点数。
float32
:IEEE 754 32位浮点数float64
:IEEE 754 64位浮点数
go
var f32 float32 = 3.14
var f64 float64 = 3.1415926
复数型
Go还支持复数类型,包括单精度和双精度。
complex64
:实部和虚部都是float32
complex128
:实部和虚部都是float64
go
var c64 complex64 = complex(3, 4)
var c128 complex128 = complex(3.1415926, 2.71828)
字符串型(string)
字符串是由8位字节组成的不可变序列,通常用于表示UTF-8编码的文本。
go
var str string = "Hello, Go!"
复合数据类型
数组(array)
数组是固定长度的相同类型元素的序列。
go
var arr [5]int = [5]int{1, 2, 3, 4, 5}
切片(slice)
切片是对数组的抽象,提供了可变长度的序列。
go
var slice []int = make([]int, 5)
copy(slice, arr[:])
映射(map)
映射是键值对的集合,键必须是可比较的类型。
go
var m map[string]int = map[string]int{"one": 1, "two": 2}
通道(channel)
通道用于在不同的goroutine之间安全地传递数据。
go
var ch chan int = make(chan int)
go func() {
ch <- 42
}()
v := <-ch
引用类型
指针(pointer)
指针存储了某个变量的内存地址。
go
var i int = 42
var p *int = &i
接口(interface)
接口是一组方法的集合,任何实现了这些方法的类型都实现了该接口。
go
type Reader interface {
Read(p []byte) (n int, err error)
}
结构体(struct)
结构体是字段的集合,字段可以是不同的类型。
go
type Point struct {
X, Y float64
}
var p Point
p.X = 1.0
p.Y = 2.0
特殊类型
空类型(nil)
nil
是指针、通道、函数、接口、映射、切片的零值。
go
var p *int = nil
错误类型(error)
error
是一个内建的接口类型,用于表示错误。
go
var err error = nil
任意类型(any)
any
是interface{}
的别名,可以存储任何类型的值。
go
var v any = "Hello"
fmt.Println(v)
可比较类型(comparable)
comparable
是一个内建的接口,所有可比较的类型都实现了这个接口。
实例演示
下面是一个简单的实例,演示了如何在Go中使用这些类型。
go
package main
import (
"fmt"
"math"
)
func main() {
// 基本数据类型
var isTrue bool = true
var i8 int8 = -128
var u16 uint16 = 65535
var f64 float64 = 3.1415926
var c128 complex128 = complex(3.1415926, 2.71828)
var str string = "Hello, Go!"
// 复合数据类型
var arr [3]int = [3]int{1, 2, 3}
var slice []int = arr[1:]
var m map[string]int = map[string]int{"one": 1, "two": 2}
var ch chan int = make(chan int)
go func() {
ch <- 42
}()
v := <-ch
// 引用类型
var p *int = new(int)
*p = 42
// 特殊类型
var err error = nil
var vAny any = "Hello, any type!"
// 打印结果
fmt.Printf("isTrue: %v, i8: %v, u16: %v, f64: %v, c128: %v, str: %v\n", isTrue, i8, u16, f64, c128, str)
fmt.Printf("slice: %v, m: %v, v: %v, p: %v, err: %v, vAny: %v\n", slice, m, v, *p, err, vAny)
}
这个实例展示了Go中各种类型的声明和使用方式。通过这个实例,你可以更好地理解Go的类型系统。