Golang基础知识(2)

2024-02-01 10:59:09 浏览数 (1)

接口定义了一组方法的集合,任何类型只要实现了接口中定义的所有方法,就被认为是该接口的实现。

代码语言: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语句结合使用。

代码语言:javascript复制
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语句可以引入其他包,使用其中的函数和变量。

代码语言:javascript复制
goCopy code// 导入包
import (
    "fmt"
    "math"
)

// 使用导入的包
fmt.Println(math.Sqrt(16))

11. defer和panic/recover

defer语句用于确保一个函数调用在程序执行完成后执行,常用于资源清理操作。panicrecover用于处理异常情况。

代码语言:javascript复制
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结尾的文件来编写测试用例。

代码语言:javascript复制
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开始自动递增的枚举值,常用于定义枚举。

代码语言:javascript复制
goCopy codeconst (
    Sunday = iota
    Monday
    Tuesday
    Wednesday
    Thursday
    Friday
    Saturday
)

这些基础知识概念使得Golang适用于各种应用场景,从系统编程到网络服务,都有着强大的表现。深入学习这些知识,可以更好地利用Golang的特性来构建可维护和高性能的应用程序。

go

0 人点赞