01—封装err函数

  1. package main
  2. import (
  3. "net"
  4. "fmt"
  5. "os"
  6. )
  7. func errFunc(err error, info string) {
  8. if err != nil {
  9. fmt.Println(info, err)
  10. //return // 返回当前函数调用
  11. //runtime.Goexit() // 结束当前go程
  12. os.Exit(1) // 将当前进程结束。
  13. }
  14. }
  15. func main() {
  16. listener, err := net.Listen("tcp", "127.0.0.1:8000")
  17. errFunc(err, "net.Listen err:")
  18. defer listener.Close()
  19. conn, err := listener.Accept()
  20. errFunc(err, "Accpet err:")
  21. defer conn.Close()
  22. buf := make([]byte, 4096)
  23. n, err := conn.Read(buf)
  24. if n == 0 {
  25. return
  26. }
  27. errFunc(err, "conn.Read")
  28. fmt.Printf("|%s|\n", string(buf[:n]))
  29. }

02-模拟浏览器访问

  1. # 将下面代码替换成以下代码
  2. resp,err := http.Get(url)
  3. defer resp.Body.Close()
  4. # 替换为
  5. client := &http.Client{}
  6. req, err1 := http.NewRequest("GET", url, nil)
  7. if err1 != nil {
  8. err = err1
  9. return
  10. }
  11. req.Header.Set("User-Agent", "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36")
  12. resp, err2 := client.Do(req)
  13. if err2 != nil {
  14. err = err2
  15. return
  16. }
  17. defer resp.Body.Close()

03-匹配换行

  1. ret1 := regexp.MustCompile(`<li class=" col-4">\r\n.*<a href="(?s:(.*?))"`)

04-读取html文件

  1. func main() {
  2. addr := ":8888"
  3. http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
  4. f, _ := os.Open("./template/index.html")
  5. io.Copy(w, f)
  6. })
  7. http.ListenAndServe(addr, nil)
  8. }