这是我参与「第五届青训营 」伴学笔记创作活动的第 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库以及模板引擎