接口定义了一组方法的集合,任何类型只要实现了接口中定义的所有方法,就被认为是该接口的实现。
代码语言:javascript复制goCopy code// 定义一个接口
type Shape interface {
Area() float64
}
// 实现接口的结构体
type Circle struct {
Radius float64
}
func (c Circle) Area() float64 {
return 3.14 * c.Radius * c.Radius
}
// 使用接口
func printArea(s Shape) {
fmt.Println("Area:", s.Area())
}
circle := Circle{Radius: 2}
printArea(circle)
9. 错误处理
Golang通过返回错误值来处理异常情况,通常与if
语句结合使用。
goCopy code// 函数返回错误
func divide(x, y float64) (float64, error) {
if y == 0 {
return 0, errors.New("division by zero")
}
return x / y, nil
}
// 调用函数并处理错误
result, err := divide(6, 3)
if err != nil {
fmt.Println("Error:", err)
} else {
fmt.Println("Result:", result)
}
10. 包(Packages)
Golang的代码组织为包,每个Go程序都包含一个main
包。通过import
语句可以引入其他包,使用其中的函数和变量。
goCopy code// 导入包
import (
"fmt"
"math"
)
// 使用导入的包
fmt.Println(math.Sqrt(16))
11. defer和panic/recover
defer
语句用于确保一个函数调用在程序执行完成后执行,常用于资源清理操作。panic
和recover
用于处理异常情况。
goCopy codefunc example() {
defer fmt.Println("Deferred statement")
fmt.Println("Normal statement")
panic("Panic!")
}
func main() {
defer func() {
if r := recover(); r != nil {
fmt.Println("Recovered:", r)
}
}()
example()
}
12. 测试(Testing)
Golang内置了一个测试框架,通过在源文件中创建以_test.go
结尾的文件来编写测试用例。
goCopy code// 测试函数
func TestAdd(t *testing.T) {
result := add(2, 3)
if result != 5 {
t.Errorf("Expected 5, got %d", result)
}
}
// 运行测试
go test
13. 特殊常量 iota
iota
是一个在常量组中从0开始自动递增的枚举值,常用于定义枚举。
goCopy codeconst (
Sunday = iota
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
)
这些基础知识概念使得Golang适用于各种应用场景,从系统编程到网络服务,都有着强大的表现。深入学习这些知识,可以更好地利用Golang的特性来构建可维护和高性能的应用程序。