Maison >développement back-end >Golang >Que sont les types go et la syntaxe point ?
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.
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 }
atomic.CompareAndSwapInt32((*int32)(s), 0, 1)
Quelle est la syntaxe et que signifient (*int) et (s) ?
Vous avez défini le type ici :
type SpinLock int32
Mais vous appellerez les méthodes du package atomique en utilisant la spécification suivante :
func CompareAndSwapInt32(addr *int32, old, new int32) (swapped bool)
Donc, pour envoyer une variable s de type SpinLock à la méthode CompareAndSwapInt32, vous devez dire au compilateur que s peut être utilisé comme int32, cela s'appelle conversion de type et en Golang, nous faisons ceci :
convertedValue := TargetType(variable)
Mais dans le livre Learn Concurrent Programming in Go, il utilise la conversion de la variable s du type *SpinLock en *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) }
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!