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

Was sind Go-Typen und Punktsyntax?

PHPz
PHPznach vorne
2024-02-08 22:45:21469Durchsuche

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
}

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

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 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 *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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen