这是我参与「第五届青训营 」伴学笔记创作活动的第 8 天

Channel

  • channel
  • buffered channel
  • range
  • 理论基础:Communication Sequential Process(CSP)

不用通过共享内存来通信;通过通信来共享内存

Channel close : 发送方去close

接收方判断方法 1. ok 2.range语法

实例1:系统自带WaitGroup等待多人

 package main
 ​
 import (
     "fmt"
     "sync"
 )
 ​
 func doWork(id int, c chan int, w worker) {
     for n := range w.in {
 ​
         fmt.Printf("Worker %d received %c\n", id, n)
         w.done()
     }
 }
 ​
 type worker struct {
     in   chan int
     done func()
 }
 ​
 func createWorker(id int, wg *sync.WaitGroup) worker {
     w := worker{
         in: make(chan int),
         done: func() {
             wg.Done()
         },
     }
     go doWork(id, w.in, w)
     return w
 }
 ​
 func chanDemo() {
     var workers [10]worker
     var wg sync.WaitGroup
     for i := 0; i < 10; i++ {
         workers[i] = createWorker(i, &wg)
     }
 ​
     wg.Add(20)
 ​
     for i, worker := range workers {
         worker.in <- 'a' + i
     }
     for i, worker := range workers {
         worker.in <- 'A' + i
 ​
     }
 ​
     wg.Wait()
 ​
 }
 ​
 func main() {
 ​
     chanDemo()
 ​
 }
复制代码

Json

 package main
 ​
 import (
     "encoding/json"
     "fmt"
 )
 ​
 type Order struct { //tag
     ID         string  `json:"id"` //不能小写,小写不是public的
     Name       string  `json:"name,omitempty"`
     Quantity   int     `json:"quantity"`
     TotalPrice float64 `json:"total_price"`
 }
 ​
 func main() {
     o := Order{
         ID:         "1234",
         Name:       "learn go",
         Quantity:   3,
         TotalPrice: 30,
     }
 ​
     b, err := json.Marshal(o)
     if err != nil {
         panic(err)
     }
     fmt.Printf("%s\n", b)
 ​
 }
复制代码
复制代码

Json 约定俗成小写还有__

定义结构体是加tag 处理字段名

json.Marshal json.Unmarshal

Golang 常用工具链/Test

 go build
 go install
 go get -u 
 go test
 go env
 go fmt
 go mod
复制代码
复制代码

注意: test文件下的每一个test case均必须以TestXxx形式,否则go test 会直接跳过测试不执行

t *testing.T / b *testing.B
t.SkipNow()
m.Run()

Benchmark中的 需要处于稳态的数据(n < b.N)

架构及API实现

Why choose Video Website?

  • Go是一门网络编程语言
  • 优良的native http库以及模板引擎