Maison > développement back-end > Golang > le corps du texte

Que sont les types go et la syntaxe point ?

PHPz
Libérer: 2024-02-08 22:45:21
avant
440 Les gens l'ont consulté

go 类型和点语法是什么

l'éditeur php Strawberry vous présentera les types et la syntaxe des points en langage Go. En langage Go, le type est un attribut d'une variable et est utilisé pour définir le type de données de la variable. Les types du langage Go incluent les types de base (tels que les entiers, les types à virgule flottante, les types booléens, etc.) et les types composites (tels que les tableaux, les tranches, les cartes, etc.). La syntaxe par points est la syntaxe utilisée pour accéder aux propriétés et méthodes des structures et des objets. En utilisant la syntaxe par points, nous pouvons utiliser directement les propriétés d'un objet ou d'une structure ou appeler ses méthodes pour exploiter et traiter les données. Cette syntaxe concise et intuitive rend le langage Go plus pratique et efficace en programmation.

Contenu des questions

code 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
}
Copier après la connexion

atomic.CompareAndSwapInt32((*int32)(s), 0, 1) Quelle est la syntaxe et que signifient (*int) et (s) ?

Solution

Vous avez défini le type ici :

type SpinLock int32
Copier après la connexion

Mais vous appellerez les méthodes du package atomique en utilisant la spécification suivante :

func CompareAndSwapInt32(addr *int32, old, new int32) (swapped bool)
Copier après la connexion

Donc, pour envoyer une variable s de type SpinLock à la méthode CompareAndSwapInt32, vous devez dire au compilateur que s< /strong> peut être utilisé comme int32, cela s'appelle conversion de type et en Golang, nous faisons ceci :

convertedValue := TargetType(variable)
Copier après la connexion

Mais dans le livre Learn Concurrent Programming in Go, il utilise la conversion de la variable s du type *SpinLock en *< 的老式方法strong>int32, une approche plus moderne pourrait être :

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)
}
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!