Go语言中的类型

Go语言是一种静态类型的编程语言,这意味着每个变量和表达式在编译时都有确定的类型。Go提供了丰富的内置类型,包括基本数据类型、复合数据类型和引用类型等。本文将详细介绍Go中的各种类型,并提供实例说明。

基本数据类型

布尔型(bool)

布尔型有两个可能的值:truefalse。它们是未类型的布尔值。

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)

anyinterface{}的别名,可以存储任何类型的值。

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的类型系统。

相关推荐
zhoupenghui1683 分钟前
golang时间相关函数总结
服务器·前端·golang·time
孤雪心殇6 分钟前
简单易懂,解析Go语言中的Map
开发语言·数据结构·后端·golang·go
White graces17 分钟前
正则表达式效验邮箱格式, 手机号格式, 密码长度
前端·spring boot·spring·正则表达式·java-ee·maven·intellij-idea
庸俗今天不摸鱼18 分钟前
Canvas进阶-4、边界检测(流光,鼠标拖尾)
开发语言·前端·javascript·计算机外设
努力的小T25 分钟前
使用 Docker 部署 Apache Spark 集群教程
linux·运维·服务器·docker·容器·spark·云计算
bubusa~>_<41 分钟前
解决npm install 出现error,比如:ERR_SSL_CIPHER_OPERATION_FAILED
前端·npm·node.js
不修×蝙蝠1 小时前
HTTP 协议(Ⅲ)
服务器·http·javaee·http协议
流烟默1 小时前
vue和微信小程序处理markdown格式数据
前端·vue.js·微信小程序
梨落秋溪、2 小时前
输入框元素覆盖冲突
java·服务器·前端
猫猫的小茶馆2 小时前
【网络编程】UDP协议
linux·服务器·网络·网络协议·ubuntu·udp