📜  Go 中的数据类型(1)

📅  最后修改于: 2023-12-03 14:41:32.453000             🧑  作者: Mango

Go 中的数据类型

Go 语言是一种静态类型的编程语言,意味着在编写代码时,必须指明每个变量的数据类型。在 Go 中,有以下数据类型:

基本数据类型

Go 语言中有四种基本数据类型:布尔型、数值型、字符串型和字符型。

布尔型

布尔型只有两个值:truefalse。在 Go 中,布尔型用 bool 关键字来表示。

var b bool = true
数值型

Go 语言中有几种数值型数据类型,包括整型、浮点型和复数型。

整型

整型分为有符号整型和无符号整型。在 Go 中,有符号整型有四种类型:int8int16int32int64。无符号整型也有四种类型:uint8uint16uint32uint64。在 Go 中,intuint 类型的长度根据当前系统的位数而定,可以是 32 位或 64 位。

var i int = 10
var ui uint = 20

浮点型

浮点型有两种类型:float32float64,分别表示单精度浮点数和双精度浮点数。在默认情况下,Go 会将浮点型数值解释为 float64 类型。

var f float32 = 3.14
var d float64 = 6.28

复数型

复数型有两种类型:complex64complex128,分别表示 float32 和 float64 的复数。 complex64float32 的实部和虚部组成,complex128float64 的实部和虚部组成。

var c complex64 = 3 + 4i
var d complex128 = 6 + 8i
字符串型

字符串是用一对双引号 "" 或反引号 ` 包含起来的一组字符。在 Go 中,字符串是不可变的,也就是说,一旦被创建,字符串中的字符就不可改变。

var s string = "Hello, world!"
字符型

在 Go 中,字符型数据类型是 byte 类型,它实际上就是 uint8 的别名。它用来表示 ASCII 码字符集中的单个字符。

var c byte = 'a'
复合数据类型

在 Go 中,有两种复合数据类型:数组和结构体。

数组

数组是一组具有相同类型的数据的集合。在 Go 中,数组的长度是固定的,不能动态增加或减少。

var a [3]int = [3]int{1, 2, 3}
结构体

结构体是一种用户自定义的数据类型,它可以包含不同类型的数据。结构体中的每个数据项都称为结构体的字段。

type person struct {
    name string
    age  int
}
var p person
p.name = "John"
p.age = 30
引用数据类型

在 Go 中,引用数据类型有指针、切片、映射、通道和接口。

指针

指针是一个变量,它存储了一个值的内存地址。在 Go 中,可以使用 & 操作符获取变量的内存地址,使用 * 操作符获取指针所指向的值。

var a int = 10
var ptr *int
ptr = &a
fmt.Printf("a 的值为 %d\n", *ptr )
切片

切片是指向连续空间的一个引用,和数组相比,切片可以动态增加或减少长度。

var s []int = make([]int, 5)
s[0] = 1
s[1] = 2
映射

映射是一组键值对的无序集合。

var m map[string]int
m = make(map[string]int)
m["apple"] = 1
m["banana"] = 2
通道

通道是 Go 语言中用于在 goroutine 之间传递数据的数据结构。通道的类型可以是任意类型。

var ch chan int
ch = make(chan int)
ch <- 1
fmt.Printf("从通道中读取的数据为:%d\n", <-ch)
接口

接口是 Go 语言中实现多态的机制,它定义了一组方法签名,任何实现了这些方法的类型都被认为是该接口的实现。

type Animal interface {
    Speak() string
}
type Cat struct{}
func (c Cat) Speak() string {
    return "Meow"
}