m := make(map[string]int) // 创建一个键为string、值为int的map
m["key"] = 10 // 添加键值对
复制代码
4.8 布局体界说
布局体是一种用户自界说的数据范例,可以包罗多个字段。
前置条件
使用type关键字界说布局体。
type Person struct {
Name string
Age int
}
复制代码
4.9 方法界说
方法是一种特殊的函数,与布局体关联。
前置条件
方法必须绑定到布局体。
func (p Person) SayHello() {
fmt.Println("Hello, my name is", p.Name)
}
复制代码
4.10 接口界说
接口界说了一组方法的集合,任何实现了这些方法的范例都实现了该接口。
前置条件
接口方法必须被实现。
type Speaker interface {
Speak() string
}
复制代码
4.11 并发界说
Go语言通过goroutine和channel支持并发。
前置条件
使用go关键字启动goroutine。
使用channel举行goroutine之间的通信。
go func() {
fmt.Println("Running in a goroutine")
}()
复制代码
5. 完整代码示例
以下是一个完整的Go程序,涵盖了上述所有内容,并附带逐行注释。
package main // 声明当前文件属于main包import ( "fmt" // 导入fmt包,用于格式化输入输出 "time" // 导入time包,用于时间操纵)// 界说一个布局体type Person struct { Name string // 姓名字段 Age int // 年事字段}// 为布局体界说一个方法func (p Person) SayHello() { fmt.Println("Hello, my name is", p.Name) // 打印问候语}// 界说一个接口type Speaker interface { Speak() string // 界说Speak方法}// 实现Speaker接口func (p Person) Speak() string { return "Hi, I'm " + p.Name // 返回问候语}// 界说一个函数,返回两个整数的和func add(x int, y int) int { return x + y // 返回x和y的和}// 界说一个函数,交换两个字符串func swap(x, y string) (string, string) { return y, x // 返回交换后的值}func main() { // 主函数,程序从这里开始执行 // 变量声明 var a int = 10 // 声明一个整数变量a,并赋值为10 b := 20 // 简短声明,自动推断b的范例为int // 常量声明 const Pi = 3.14 // 声明一个常量Pi,值为3.14 // 打印变量和常量 fmt.Println("a =", a) // 打印变量a的值 fmt.Println("b =", b) // 打印变量b的值 fmt.Println("Pi =", Pi) // 打印常量Pi的值 // 控制布局 if a > b { fmt.Println("a is greater than b") // 如果a大于b,打印此消息 } else { fmt.Println("a is not greater than b") // 否则,打印此消息 } for i := 0; i < 5; i++ { fmt.Println("i =", i) // 打印0到4 } switch a { case 10: fmt.Println("a is 10") // 如果a等于10,打印此消息 case 20: fmt.Println("a is 20") // 如果a等于20,打印此消息 default: fmt.Println("a is neither 10 nor 20") // 如果a不等于10或20,打印此消息 } // 函数调用 sum := add(a, b) // 调用add函数,盘算a和b的和 fmt.Println("Sum of a and b is", sum) // 打印a和b的和 x, y := swap("Hello", "World") // 调用swap函数,交换两个字符串 fmt.Println("Swapped values:", x, y) // 打印交换后的值 // 数组和切片 var arr [3]int = [3]int{1, 2, 3} // 声明一个长度为3的数组
slice := []int{1, 2, 3} // 声明一个切片 fmt.Println("Array:", arr) // 打印数组 fmt.Println("Slice:", slice) // 打印切片 // Map m := make(map[string]int) // 创建一个键为string、值为int的map m["key"] = 10 // 添加键值对 fmt.Println("Map:", m) // 打印map // 布局体 p := Person{Name: "Alice", Age: 25} // 创建一个Person布局体实例 fmt.Println("Person:", p) // 打印布局体 p.SayHello() // 调用布局体方法 // 接口 var s Speaker = p // 将Person实例赋值给Speaker接口 fmt.Println("Speaker says:", s.Speak()) // 调用接口方法 // 并发 go func() { fmt.Println("Running in a goroutine") // 在goroutine中运行 }() time.Sleep(time.Second) // 等待1秒,确保goroutine执行完毕}