• golang 笔记


    golang 的坑

    package main
    
    import (
        "fmt"
        "net/http"
        "time"
    )
    
    func Hello(w http.ResponseWriter, r *http.Request) {
        w.Write([]byte("Hello!!
    "))
        time.Sleep(10 * time.Second)
    }
    
    func main() {
        http.HandleFunc("/hello", Hello)
        addr := "0.0.0.0:8083"
        if err := http.ListenAndServe(addr, nil); err != nil {
            fmt.Println(err)
            return
        }
    }
    

    ResponseWriter.Write只是将数据写进了一个缓冲区,如过缓冲区未被写满是不会往tcp连接里写的,表现为包没发出去。http server会在Handler函数结束后调用Flush,所以在Handler函数里的任何阻塞行为都会影响到回包数据的发送。
    有两种方法来规避:
    主动调用Flush
    w.(http.Flusher).Flush()
    将长操作用go包起来
    go func() { time.Sleep(10*time.Second) }()

    go并行计算

    func main() {
        arr := [4]int{1, 2, 3, 4}
        var wg sync.WaitGroup
        for _, v := range arr {
            wg.Add(1)
            fmt.Println(v)
            go func(i int) {
                defer wg.Done()
                fmt.Println(i)
            }(v)
        }
        wg.Wait()
    }
    

    wg.Add()会+1,wg.Done()会-1, wg.Wait()一直阻塞到0;

    go线程间通信

    func main() {
        ch := make(chan int, 2)
        go func() {
            for i := 0; i < 2; i++ {
                ch <- i
            }
        }()
        fmt.Println("print")
        for j := 0; j < 2; j++ {
            res, ok := <-ch
            if ok {
                fmt.Println(res)
            }
        }
    
    }
    

    通过go关键字可以开启一个协程执行此函数。通过channel通信。
    ch是一个可读可写channel,有2个缓存,可连续写入2次。如果再写入就会堵塞,一直等到数据被消费。

    go map 初始化

    m := make(map[string]int)
    m["a"] = 1
    m["b"] = 2
    
     m := map[string]interface{}{
            "Name": "Wednesday",
            "Age":  6,
            "Parents": []interface{}{
                "Gomez",
                "Morticia",
            },
        }
    

    go包依赖

    https://infoq.cn/article/history-go-package-management

  • 相关阅读:
    周总结(第十一周)
    周总结(第十周)
    周总结(第九周)
    周总结(第八周)
    周总结(第七周)
    周总结(第六周)
    周总结(第5周)
    周总结(第四周)
    周记
    补周记
  • 原文地址:https://www.cnblogs.com/dh-dh/p/9121699.html
Copyright © 2020-2023  润新知