📅  最后修改于: 2023-12-03 15:01:02.352000             🧑  作者: Mango
Go 是一种开源的编程语言,由 Google 开发,其类型系统为静态类型。Golang 的类型系统是强类型和静态类型的,这使得程序可以在编译时检测到类型不匹配的错误。Golang 的类型系统还提供了类型推断,可以大大减少代码中的类型声明,这使得代码更加简洁。
Go 的基本类型包括布尔型、数值型和字符串型。其中布尔型只有 true
和 false
两种取值,而数值型包括整型和浮点型。
Go 的布尔型使用 bool
关键字表示,布尔型只有两种取值 true
和 false
。示例代码如下:
var x bool = true
var y bool = false
Go 的整型分为有符号整型和无符号整型两种,有符号整型包括 int8
、int16
、int32
、int64
,无符号整型包括 uint8
、uint16
、uint32
、uint64
。其中,int
表示有符号整型,根据平台的不同大小不同。示例代码如下:
var x int8 = -128
var y uint16 = 65535
Go 的浮点型有两种,分别是 float32
和 float64
。其中,float32
的有效数字为 7 位,float64
的有效数字为 15 位。示例代码如下:
var x float32 = 3.14
var y float64 = 3.141592653589793
Go 的字符串类型为 string
,它使用双引号或反引号括起来,支持使用加号连接两个字符串。示例代码如下:
var x string = "Hello, "
var y string = "World!"
var z string = x + y
Go 的复合类型包括数组、切片、映射、结构体和接口。其中,数组和切片是最常用的复合类型。
Go 的数组类型使用 [n]T
表示,其中 n
表示数组长度,T
表示数组元素类型。数组的元素类型可以是基本类型或复合类型,数组是值类型。示例代码如下:
var x [5]int // 定义一个长度为 5 的 int 类型数组
for i := 0; i < len(x); i++ {
x[i] = i + 1
}
for i, v := range x {
fmt.Printf("x[%d] = %d\n", i, v)
}
输出:
x[0] = 1
x[1] = 2
x[2] = 3
x[3] = 4
x[4] = 5
Go 的切片是一种动态数组,它是基于数组实现的。切片通过定义一个开始位置和结束位置来定义,其定义方式为 a[开始位置:结束位置]
,其中 开始位置
和 结束位置
都是可选的。切片的长度可以动态扩展,是引用类型。示例代码如下:
x := []int{1, 2, 3, 4, 5} // 定义一个 int 类型的切片
y := x[1:3] // 定义一个从下标 1 开始,到下标 3 结束(不包括下标 3)的 int 类型切片
fmt.Println(y) // 输出 [2 3]
y = append(y, 6, 7) // 在切片中添加两个新的元素
fmt.Println(y) // 输出 [2 3 6 7]
Go 的映射类型使用 map[T1]T2
表示,其中 T1
表示映射的键类型,T2
表示映射的值类型。映射中的键和值可以是任何类型,映射是引用类型。示例代码如下:
x := map[string]int{
"one": 1,
"two": 2,
"three": 3,
}
fmt.Println(x["two"]) // 输出 2
x["four"] = 4 // 在映射中添加一个新的元素
fmt.Println(x["four"]) // 输出 4
Go 的结构体是一种自定义数据类型,它由多个字段组成。结构体中的字段可以是基本类型或复合类型。示例代码如下:
type Person struct {
Name string
Age int
}
x := Person{
Name: "Tom",
Age: 18,
}
fmt.Println(x.Name) // 输出 Tom
Go 的接口是一种抽象的类型,它定义了一组方法的签名。接口可以实现多态,确保同一接口的不同实体具有相同的行为。示例代码如下:
type Shape interface {
Area() float64
}
type Rectangle struct {
Width float64
Height float64
}
func (r Rectangle) Area() float64 {
return r.Width * r.Height
}
x := Rectangle{
Width: 2,
Height: 3,
}
var s Shape = x
fmt.Println(s.Area()) // 输出 6
本文介绍了 Golang 的基本类型和复合类型。通过本文的学习,相信大家已经对 Golang 的类型系统有了初步的了解。在实际开发中,需要根据实际需求选择合适的数据类型,提高程序的执行效率和代码的可维护性。