Heim > Backend-Entwicklung > Golang > Was sind Go-Typen und Punktsyntax?

Was sind Go-Typen und Punktsyntax?

PHPz
Freigeben: 2024-02-08 22:45:21
nach vorne
468 Leute haben es durchsucht

Der

go 类型和点语法是什么

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.

Frageninhalt

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
}
Nach dem Login kopieren

atomic.CompareAndSwapInt32((*int32)(s), 0, 1) Wie ist die Syntax und was bedeuten (*int) und (s)?

Workaround

Sie haben den Typ hier definiert:

type SpinLock int32
Nach dem Login kopieren

Aber Sie rufen Methoden im Atompaket mit der folgenden Spezifikation auf:

func CompareAndSwapInt32(addr *int32, old, new int32) (swapped bool)
Nach dem Login kopieren

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)
Nach dem Login kopieren

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)
}
Nach dem Login kopieren

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!

Verwandte Etiketten:
Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage