日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

Effection Go

發布時間:2023/12/13 综合教程 44 生活家
生活随笔 收集整理的這篇文章主要介紹了 Effection Go 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Introduction:

新語言, 新思維

Formatting

Indentation: 默認tab

Line Length: 無限制, 會自動換行

Parentheses: 圓括號, 無限制, 但會自動去掉if, switch, for控制結構中的圓括號.

使用gofmt命令自動格式源碼.

Commentary

多行: /**/

單行: //

使用godoc命令自動導出注釋. 文檔注釋指緊鄰API的注釋, 如果遇到空行則會中止.

Names:

package names

interface names: 一般以-er或-able結尾

MixedCaps:

即Java中的駝峰式

GO中的identifier由字線,數字,下劃線_組成, 并且開頭不能是數字. 可分3種:

* exported identifier: 大寫開頭

* package identifier: 小寫或下劃線_開頭

* blank identifier: 下劃線_

Semicolons:

GO自動在行尾插入semicolon, 如果最后token是:

* identifier

* literal

* one of break continue, fallthrough return ++ -- ) ] }

根據解析規則, 控制結構的塊開始標記{ 另起一行.

Control structures

if-else: 與傳統C語言相同

redeclaration and reassignment: 使用short declaration必須保證at least one other variable is anew. 至少一個新變量

for: 有4種形式,

* for{...}, 死循環

* for condition {...}, 條件循環

* for init; condition; post {...}, 帶初始條件后置循環, 其中init部分只能使用短聲明定義新變量.

* for x := range xxx{...}, range循環

switch: 有2種形式,

* switch {...}, 非匹配選擇

* switch expression {...}, 是匹配選擇

select: 有1種形式,

* select {}, 非匹配選擇

Type switch:

Go的類型檢測與轉換有type-assertion與type-switch. type-switch指x.(type)必須結合switch expression{}使用. 否則報錯! 另一種替換用法是relect.TypeOf()

Funtions:

Multiple return values: 多值返回

Named result parameters: 命令返回參數

注意: Go中的method都是function(receiver, params...)形式. 但反之則不是. 另外, 只有本地類型才能定義method. cannot define new methods on non-local type. 所謂local type指在相同package path.

Defer:

defer, panic(), recover()配合使用.

理解Go的function機制, 需要明白defer stack, panic error, return value.

function無論正常結束或panic結束,都保證執行defer stack中的函數.

function如果正常結束或recover恢復panic error, 則會return value. 否則拋出panic error.

function執行defer stack時, 新的panic error會覆蓋舊的panic error.

總結而言, function是Go基本的執行處理單元.

Data:

Allocation with new or make: 理解Go的new()與make()用法, 需要明白GO的數據類型知識.

* 根據功能劃分:

基本類型: bool, int/uint/unitptr, float, complex, byte/rune/string, struct, array

指針類型: slice, map, chan, func, pointer,

接口類型: interface, error

當然nil類型也可以有pointer形式, 但不是GO的idiomatic. 接口類型是一種特殊的類型, 由<type,value>復合而成. 因為當且僅當<nil, nil>才是nil, 所以nil interface不一定等于nil.

* 根據零值(zero-value)劃分:

基本類型的零值都是non-nil

指針類型與接口類型的零值都是nil. 其實說接口類型的零值是nil不大恰當,因為interface是由<type,value>組成, 如果type為基本類型,則value的零值就不會是nil了. 指針類型與接口類型也有指針形式, 這相當于C中指針的指針, 通過間接指針來訪問數據不會是個理想的做法.

所以, 你不會用new()來創建指針類型的指針, 因為其零值是nil, 創建一個指向nil的間接指針有什么意義哦? 也不能用make()來創建基本類型的值,因為其擁有零值了.再初始化就無價值了. 至于接口類型比較奇葩, 其底層是<type,value>,且僅當<nil,nil>時才等于nil. 否則要用 x == nil || reflect.ValueOf(x).IsNil()來判斷是否為nil.

Printing:

Go中print有2種選擇, 一是builtin的print(), println()函數. 一是fmt package. 據說后者帶有緩沖, 性能更優.

Builtin:

GO中builtin函數:

append(), copy(), delete()

len(), cap(), close()

new(), make()

complex(), real(), imag()

print(), println()

panic(), recover()

import, type, const, var block:

Go中可以將多條import, type, const, var組合為block.

在const block中使用iota表示line index(從0開始)

關于var, const的沒有聲明或定義:

變量的類型向后追溯, 直到第一個類型.

常量的定義向前追溯, 直到第一個定義.

init function:

每個go package(或者說go file)可以定義零個或多個init()函數. 在import package時會被執行, 但共執行順序無保證. 注意: 每次import package都會執行init函數, 而不僅僅初次導入執行. 這與Java中的<clinit>方法不同.

Pointers vs Values:

對于類型T, T的method是receiver為T的method. *T的method是receiver為T或*T的method. 簡單地說, T的method屬于*T, 但反之不成立.

順便記憶: cannot define new methods on non-local type.

Interface and methods:

interface是method的集合. struct是data的集合.

interface類型轉換使用type-assertion與type-switch.

Import語法:

import [name] "path"

* name可以是空(默認), 點(當前), 下劃線(無), 標識符(自定義)

* path可以是絕對路徑(相對$GOPATH), 相對路徑(相對當前go file). 注意: 結合vendor機制不能使用相對路徑, 否則解析會出錯.

Embedding:

interface, struct使用組合方式實現代碼復用, 此區別與C++, Java等的繼承.

Goroutine

go-chan

注意: channel 有三種: 讀寫chan, 只讀chan, 只寫chan. 后二者一般是作為形參. 因為一個channel只能讀或寫都是沒有意義的.

使用select結合time.After()等可以實現定時阻塞.

Web server:

http.Handle()

http.ListenAndServe()

總結

以上是生活随笔為你收集整理的Effection Go的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。