golang基础知识(4)

2024-02-01 11:02:24 浏览数 (1)

Golang没有直接支持泛型,但可以使用空接口 interface{} 来实现类似的效果。

代码语言:javascript复制
goCopy codefunc printType(value interface{}) {
    fmt.Printf("Type: %T, Value: %vn", value, value)
}

func main() {
    printType(42)
    printType("Hello, Golang!")
}

22. Golang中的defer

defer 用于延迟执行一个函数调用,通常用于资源释放或清理操作。

代码语言:javascript复制
goCopy codefunc example() {
    defer fmt.Println("Deferred statement")
    fmt.Println("Normal statement")
}

23. 使用 range 迭代

range 关键字用于迭代切片、数组、映射等数据结构。

代码语言:javascript复制
goCopy codenumbers := []int{1, 2, 3, 4, 5}
for index, value := range numbers {
    fmt.Printf("Index: %d, Value: %dn", index, value)
}

24. Golang中的闭包

闭包是一个包含了函数体和其所引用的变量的函数值。

代码语言:javascript复制
goCopy codefunc adder() func(int) int {
    sum := 0
    return func(x int) int {
        sum  = x
        return sum
    }
}

func main() {
    add := adder()
    fmt.Println(add(1))  // 输出: 1
    fmt.Println(add(2))  // 输出: 3
}

25. Golang中的并发安全Map

通过sync.Map可以实现并发安全的映射,避免在多个goroutine中出现竞态条件。

代码语言:javascript复制
goCopy codevar m sync.Map

func main() {
    m.Store("key", "value")
    value, ok := m.Load("key")
    fmt.Println(value, ok)  // 输出: value true
}

26. 使用 context 进行超时和取消

context包提供了在goroutine之间传递取消信号和截止时间的机制。

代码语言:javascript复制
goCopy codefunc process(ctx context.Context) {
    select {
    case <-time.After(2 * time.Second):
        fmt.Println("Process completed")
    case <-ctx.Done():
        fmt.Println("Process canceled")
    }
}

func main() {
    ctx, cancel := context.WithTimeout(context.Background(), 1*time.Second)
    defer cancel()

    go process(ctx)

    time.Sleep(3 * time.Second)
}

27. Golang中的反射(Reflection)

反射允许在运行时检查变量的类型和值,可以用于实现通用程序。

代码语言:javascript复制
goCopy codefunc inspectValue(value interface{}) {
    v := reflect.ValueOf(value)
    t := reflect.TypeOf(value)

    fmt.Printf("Type: %v, Value: %vn", t, v)
}

func main() {
    inspectValue(42)
    inspectValue("Hello, Golang!")
}

28. 使用Golang的http包创建简单的Web服务器

代码语言:javascript复制
goCopy codepackage main

import (
	"fmt"
	"net/http"
)

func handler(w http.ResponseWriter, r *http.Request) {
	fmt.Fprintf(w, "Hello, Golang Web Server!")
}

func main() {
	http.HandleFunc("/", handler)
	http.ListenAndServe(":8080", nil)
}

这些基础知识点涵盖了Golang中一些更深入的概念,包括泛型编程、defer、range迭代、闭包、并发安全Map、context、反射以及简单的Web服务器。深入理解这些概念可以帮助你更好地应用Golang进行更复杂和高级的编程任务。

go

0 人点赞