php小編草莓為您介紹Go語言中的型別和點文法。在Go語言中,類型是變數的屬性,用來定義變數的資料類型。 Go語言中的類型包括基本型別(如整數、浮點型、布林型等)和複合型別(如陣列、切片、映射等)。而點語法則是用來存取結構體和物件的屬性和方法的語法。透過使用點語法,我們可以直接使用物件或結構體的屬性或呼叫其方法,實現對資料的操作和處理。這種簡潔而直覺的語法使得Go語言在程式設計上更加便捷和有效率。
dmeo 程式碼
package listing12_9 import ( "runtime" "sync" "sync/atomic" ) type SpinLock int32 func (s *SpinLock) Lock() { for !atomic.CompareAndSwapInt32((*int32)(s), 0, 1) { runtime.Gosched() } } func (s *SpinLock) Unlock() { atomic.StoreInt32((*int32)(s), 0) } func NewSpinLock() sync.Locker { var lock SpinLock return &lock }
atomic.CompareAndSwapInt32((*int32)(s), 0, 1)
語法是什麼,(*int) 和 (s) 是什麼意思?
您已在此處定義了類型:
type SpinLock int32
但是您將使用以下規範來呼叫原子包中的方法:
func CompareAndSwapInt32(addr *int32, old, new int32) (swapped bool)
因此,要將類型為SpinLock 的變數s 傳送到CompareAndSwapInt32 方法,您必須向編譯器說明s 可以用作int32,這稱為類型轉換,在golang 中我們這樣做:
convertedValue := TargetType(variable)
但是在學習Go 並發程式設計一書中,它使用了將變數s 從類型*SpinLock 轉換為*int32,更現代的方法可能是:
type SpinLock int32 func (s SpinLock) Lock() { castedS := int32(s) for !atomic.CompareAndSwapInt32(&castedS, 0, 1) { runtime.Gosched() } } func (s SpinLock) Unlock() { castedS := int32(s) atomic.StoreInt32(&castedS, 0) atomic.StoreInt32(&castedS, 0) }
以上是go 類型和點語法是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!