概述
语言传统同步方式
- atomic
- waitGroup
- mutex
- cond
- http client
同步
package mainimport ("fmt""sync""time")type atomicInt struct {value intlock sync.Mutex}func (a *atomicInt) increment() {fmt.Println("safe increment")func() {a.lock.Lock()defer a.lock.Unlock()a.value++}()}func (a *atomicInt) get() int {a.lock.Lock()defer a.lock.Unlock()return a.value}func main() {var a atomicInta.increment()go func() {a.increment()}()time.Sleep(time.Millisecond)fmt.Println(a.get())}
http client
package mainimport ("fmt""net/http""net/http/httputil")func main() {request, err := http.NewRequest(http.MethodGet,"http://www.ctoedu.com", nil)request.Header.Add("User-Agent","Mozilla/5.0 (iPhone; CPU iPhone OS 10_3 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) CriOS/56.0.2924.75 Mobile/14E5239e Safari/602.1")client := http.Client{CheckRedirect: func(req *http.Request,via []*http.Request) error {fmt.Println("Redirect:", req)return nil},}resp, err := client.Do(request)if err != nil {panic(err)}defer resp.Body.Close()s, err := httputil.DumpResponse(resp, true)if err != nil {panic(err)}fmt.Printf("%s\n", s)}

