Effective Go(官方文檔)筆記

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

Effective Go(官方文檔)筆記

  1. 自動局部變數提升(編譯期完成?):return &...;
  2. 內建函數:
    1. new/make
    2. copy, append
    3. delete
    4. range(這是關鍵字吧?因為後面沒有())
  3. array是值對象
  4. slice:引用array
    1. 2維切片(略)
  5. map
    1. if seconds, ok := timezone[tz]; ok { ...
  6. func (f *File) Read(buf []byte) (n int, err error) { ...
    1. 注意這裡給*File類型增加了一個Read方法,buf是傳出參數(slice是引用!)
  7. fmt.Printf("...%d...", 1); //C風格的;
    1. fmt.Printf(os.stdout, args, ...); //C++風格的?這裡args需要實現io.Writer介面(序列化?)
    2.  %v, %#v
    3.  %T
  8. type MyString string
  9. switch t := t.(type){ ... //Go的運行時內省是怎麼實現的?這意味著每一個value/ref都包含了一個type域欄位嗎?
  10. 變參:v ...interface{} ==> v... (不加...的單獨v可看作slice,可應用range操作)
  11. func append(slice []T, elements ...T) []T
    1. append:實際上不能在運行時決定T的類型,需編譯器在編譯時間的支援(所謂的builtin函數)
  12. defer:延遲到func結束前執行,即使是panic(函數範圍,非block)
    1. C/C++/Java程式員可以理解為func內部整體包以try{...}finally{...}?
  13. 枚舉:const { _= iota \n A B C ... }
  14. 變數組聲明:var { ... }
  15. 每個檔案中的init():用於驗證初始狀態?
  16. sort回調:Len() int, Less(i, j int) bool, Swap(i, j int) //這相當於把排序對象當作一個C++裡的RandomAccessIterator介面?
  17. 類型轉換
    1. str := value.(string) //如類型不符則runtime error;
  18. net/http
    1. type Handler interface {
      ServHTTP(w ResponseWriter, req *Request)
    2. => 一旦有了Handler執行個體,向http註冊:http.Handle("/path", handler)
  19. tie a channel to web page ?
  20. 為func擴充方法:
    1. type HandlerFunc func(ResponseWriter, *Request)
    2. func (f HandlerFunc) ServHTTP(w ..., req ...) { f(w, req) }
  21. _ = fd //unused, WebKit/Chromium裡經常可以見到這種寫法,未使用的變數顯式標記,未用到的代碼要刪除
  22. Embedding(type的組合)
    1. type struct裡可以直接加入其他type的名字,無需變數名字,此時相當於type traits的mixin了?
  23. Share by communicating
    1. Goroutines:the stack starts small(可動態調整的棧)——這可能就是Go支援大規模並發程式的原因了
    2. <-chan:等待完成訊息(自動阻塞)
  24. * for迴圈變數(設為i)是重用的?=>
    1. go func(i ...){ ... )(i) //傳遞進閉包,產生新的副本
    2. i := i //名字的shadowing(這個特性C語言是沒有的,C++的namespace可以認為類似?)
  25. Channels of channels
  26. 並行:runtime.GOMAXPROCS(ncpu)
  27. panic/recover
    1. recover在unwinding時執行,即defer func() {...}中。

著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.