Go語言編程(舊讀書筆記)

來源:互聯網
上載者:User

標籤:go語言編程

Go語言編程
目錄 [隱藏] 
  • 1 前言
  • 2 初識Go語言
  • 3 順序編程
  • 4 OOP
  • 5 並發編程
  • 6 網路編程
  • 7 安全編程
  • 8 工程管理
  • 9 開發工具
  • 10 進階話題
  • 11 附錄A
[編輯]前言
  1. 協程? go run(‘test‘)
  2. Go強制了{ }的編寫風格: if expression {
  3. 錯誤處理:
    1. defer?相當於finally?注意這裡的範圍,defer之前似乎沒有用{ }把整個(try)塊括起來?
      1. defer相當於說延遲語句的執行,其內部實現會自動管理嵌套範圍的問題?
    2. Go允許返回多個值(像Python裡的tuple返回)
  4. Go用組合,不用繼承、虛函數、虛函數重載
  5. Go裡的變數聲明是先變數名字,後類型名字(Pascal風格,但沒有:)?
  6. Go的介面是duck typing嗎?
    1. Go裡,2個介面只要擁有相同的方法列表(名字、簽名、順序??),那麼就是等同的
  7. ?Go裡避免太多的{ }嵌套可能是一種策略——這使它顯得更像一門指令碼語言,給程式員寫代碼帶來某種“輕快”的感覺。。。
[編輯]初識Go語言
  1. Plan 9上的Limbo語言被認為是Go的前身?
  2. 支援自動GC?——那不就和Java/C#的效能差不多了麼
  3. 更豐富的內建類型:
    1. Slice
    2. map
  4. 多返回值
    1. func getName() (firstName, lastName, nickName string){
      //由於這裡返回值也給了名字,因此可以賦值然後空return!(Python裡似乎還不能夠這麼靈活,靠)
    2. fn, ln, nn := getName()
      模式比對(destructuring):_,ln,_ := getName()
  5. 錯誤處理:defer、panic、recover
  6. 匿名函數和閉包
    1. f := func(x,y int) int { return x+y }
  7. 類型:類似於C裡的struct(估計這裡借用了Objective-C的一些做法。。。)
    1. type Bird struct { ... }
    2. func (b *Bird) Fly() { ... } //這一句的寫法我怎麼有點看不明白呢?見鬼
  8. 並發編程
    1. resultChan := make(chan, int, 2)
    2. go sum(.../*參數略*/, resultChan)
    3. func sum(..., resultChan chan int) {
      ... resultChan <- sum
    4. sum1, sum2 := <-resultChan, <-resultChan //Channel對象只有一個符號操作:<- ,放左邊代表取出,右邊表示放進?
  9. 反射:靠,這邊的文法太醜陋了,媽的
  10. Cgo
  11. 第1個Go程式:
    1. package main
    2. import "fmt"
    3. func main() {
      fmt.Println("Hello, world!")
  12. go run hello.go //直接運行;
    1. go build hello.go && ./hello //編譯運行;即可以解釋執行,也可以編譯運行(這個跟Rust倒是一樣的)
[編輯]順序編程
  1. var v3 [10]int //變態的數組聲明文法~
  2. var v7 map[string] int //string->int的映射
  3. i := 10 //自動類型推導?
  4. i,j = j,i
  5. 數值類型:int uint int32 int64 float32 float64 complex64 complex128
  6. const
  7. true false iota(每個const的開頭從0開始,每次出現自動增1?用於定義枚舉,但Go並不支援enum關鍵字)
  8. string byte/rune error
  9. uintptr
  10. 不同類型的數不能直接比較,也就是說,Go不做自動型別提升
  11. 字串遍曆:for i := 0; i < len(str); i++ { ... str[i] }
  12. Unicode字元遍曆:
    1. for i, ch := range str { ... }
  13. 數組是一個值類型!
    1. 切片:var mySlice []int = myArray[:5]
      mySlice2 := make([]int, 5)
      可動態增減元素:len(mySlice) cap(mySlice) append copy ...
  14. map
    1. delete(myMap, "key") //靠,這裡的操作都是C語言風格的,不支援C++/Java/C#裡的.成員函數訪問操作?
  15. 流程式控制制:
    1. if else
    2. switch case
    3. for
    4. goto
  16. 函數
    1. 成員函數的寫法太怪異了:func (file *File) Read(b []byte) (n int, err Error) //注意,沒有其他語言裡的this、self等關鍵字!
  17. 閉包
  18. 錯誤處理
    1. p48 return nil, &PathError("stat", name, err) //這裡&的寫法是怎麼回事?以引用方式傳遞對象嗎
    2. defer func() { ... } ()
    3. func panic(interface())
    4. func recover() interface()
[編輯]OOP
  1. 值語義(預設?)和引用語義(&)
    1. ?Go使用*符號,那麼它到底是不是C/C++裡的指標?(估計不是,但看著有點詭異)
  2. 初始化
    1. r1 := new(Rect)
    2. r2 := &Rect()
  3. 組合就是繼承:type Derived struct{
    Base //還可以寫成*Base,這樣的話,。。。——相當於C++裡的虛基類?
    ... //*log.Logger:可直接注入其他類的方法?但logger類顯然無法訪問當前類的資料成員(!!)
  4. 可見度:大寫為public,小寫是private
  5. (非侵入式的)介面
    1. 這裡的文法似乎有點類似於Objective-C。。。注意聲明type IFile interface { ... }時,裡面的Read、Write不需要帶(f *File)(this引用)
    2. 介面查詢:略
    3. 類型查詢:vt := v.(type)
    4. 介面組合
    5. Any類型:interface()
[編輯]並發編程
  1. 主main不等待goroutine直接退出會導致線程強制結束?
  2. channel
    1. select(這是學習了Erlang吧?)
    2. 逾時機制:建立一個額外的channel
      1. timeout := make(chan bool, 1)
      2. go func() { time.Sleep(1e9) timeout <- true }()
      3. select {
        ... case <-timeout: //已經逾時
    3. 利用channel傳遞實行管道?
    4. 單向chan:聲明的時候加上<-
    5. 關閉:close(ch)
  3. 同步
    1. sync.Mutex sync.RWMutex
    2. sync.Once
[編輯]網路編程
  1. net.Dial?這個方法名太。。。了
  2. net/http
  3. net/rpc
    1. Gob
  4. JSON
[編輯]安全編程
[編輯]工程管理
  1. 遠程import:神經病!
  2. GOPATH
  3. Android支援???——必須在adb shell下運行吧
[編輯]開發工具[編輯]進階話題
  1. 反射
    1. Type, Value
  2. 語言互動
    1. Cgo:import "C"
  3. 連結符號:由下列資訊構成(注意Go裡無重載)
    1. Pakcage
    2. ClassType
    3. Method(恩?連結符號允許/、*、. ?)
  4. goroutine機制
    1. libtask?
  5. 介面機制
[編輯]附錄A
  1. 常用包:fmt io bufio strconv os sync flag encoding/json http

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

Go語言編程(舊讀書筆記)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.