Der
php-Editor Strawberry führt Sie in die Typen und Punktsyntax in der Go-Sprache ein. In der Go-Sprache ist Typ ein Attribut einer Variablen und wird verwendet, um den Datentyp der Variablen zu definieren. Zu den Typen in der Go-Sprache gehören Basistypen (z. B. Ganzzahlen, Gleitkommatypen, boolesche Typen usw.) und zusammengesetzte Typen (z. B. Arrays, Slices, Karten usw.). Die Punktsyntax ist die Syntax, mit der auf die Eigenschaften und Methoden von Strukturen und Objekten zugegriffen wird. Durch die Verwendung der Punktsyntax können wir die Eigenschaften eines Objekts oder einer Struktur direkt verwenden oder seine Methoden aufrufen, um Daten zu bedienen und zu verarbeiten. Diese prägnante und intuitive Syntax macht die Go-Sprache komfortabler und effizienter beim Programmieren.
dmeo-Code
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)
Wie ist die Syntax und was bedeuten (*int) und (s)?
Sie haben den Typ hier definiert:
type SpinLock int32
Aber Sie rufen Methoden im Atompaket mit der folgenden Spezifikation auf:
func CompareAndSwapInt32(addr *int32, old, new int32) (swapped bool)
Um also eine Variable s vom Typ SpinLock an die Methode CompareAndSwapInt32 zu senden, müssen Sie dem Compiler mitteilen, dass s< /strong> als int32 verwendet werden kann. Dies wird Typkonvertierung genannt und in Golang machen wir das :
convertedValue := TargetType(variable)
Aber im Buch Learn Concurrent Programming in Go wird die Variable s vom Typ *SpinLock in *< 的老式方法strong>int32 konvertiert. Ein modernerer Ansatz könnte sein:
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) }
Das obige ist der detaillierte Inhalt vonWas sind Go-Typen und Punktsyntax?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!