前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >golang基础知识(4)

golang基础知识(4)

原创
作者头像
dbdocker
发布2024-02-01 11:02:24
发布2024-02-01 11:02:24
10100
代码可运行
举报
运行总次数:0
代码可运行

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

代码语言:javascript
代码运行次数:0
复制
goCopy codefunc printType(value interface{}) {
    fmt.Printf("Type: %T, Value: %v\n", value, value)
}

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

22. Golang中的defer

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

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

23. 使用 range 迭代

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

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

24. Golang中的闭包

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

代码语言:javascript
代码运行次数:0
复制
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
代码运行次数:0
复制
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
代码运行次数:0
复制
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
代码运行次数:0
复制
goCopy codefunc inspectValue(value interface{}) {
    v := reflect.ValueOf(value)
    t := reflect.TypeOf(value)

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

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

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

代码语言:javascript
代码运行次数:0
复制
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进行更复杂和高级的编程任务。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 22. Golang中的defer
  • 23. 使用 range 迭代
  • 24. Golang中的闭包
  • 25. Golang中的并发安全Map
  • 26. 使用 context 进行超时和取消
  • 27. Golang中的反射(Reflection)
  • 28. 使用Golang的http包创建简单的Web服务器
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档