Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Apakah jenis pergi dan sintaks titik?

Apakah jenis pergi dan sintaks titik?

PHPz
PHPzke hadapan
2024-02-08 22:45:21445semak imbas

go 类型和点语法是什么

editor php Strawberry akan memperkenalkan anda kepada jenis dan sintaks titik dalam bahasa Go. Dalam bahasa Go, jenis ialah atribut pembolehubah dan digunakan untuk menentukan jenis data pembolehubah. Jenis dalam bahasa Go termasuk jenis asas (seperti integer, jenis titik terapung, jenis Boolean, dll.) dan jenis komposit (seperti tatasusunan, kepingan, peta, dll.). Sintaks titik ialah sintaks yang digunakan untuk mengakses sifat dan kaedah struktur dan objek. Dengan menggunakan sintaks titik, kita boleh terus menggunakan sifat objek atau struktur atau memanggil kaedahnya untuk mengendalikan dan memproses data. Sintaks yang ringkas dan intuitif ini menjadikan bahasa Go lebih mudah dan cekap dalam pengaturcaraan.

Kandungan soalan

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) Apakah sintaks dan apakah maksud (*int) dan (s)?

Penyelesaian

Anda telah menentukan jenis di sini:

type SpinLock int32

Tetapi anda akan memanggil kaedah dalam pakej atom menggunakan spesifikasi berikut:

func CompareAndSwapInt32(addr *int32, old, new int32) (swapped bool)

Jadi untuk menghantar pembolehubah s jenis SpinLock ke CompareAndSwapInt32 kaedah anda perlu memberitahu pengkompil bahawa s boleh digunakan sebagai int32, ini dipanggil dolang dan penukaran :

convertedValue := TargetType(variable)

Tetapi dalam buku

Belajar Pengaturcaraan Serentak dalam Go, ia menggunakan penukaran pembolehubah s daripada jenis *SpinLock kepada *int32, pendekatan yang lebih moden mungkin:

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)
}

Atas ialah kandungan terperinci Apakah jenis pergi dan sintaks titik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam