Apakah jenis pergi dan sintaks titik?

PHPz
Lepaskan: 2024-02-08 22:45:21
ke hadapan
440 orang telah melayarinya

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
}
Salin selepas log masuk

atomic.CompareAndSwapInt32((*int32)(s), 0, 1) Apakah sintaks dan apakah maksud (*int) dan (s)?

Penyelesaian

Anda telah menentukan jenis di sini:

type SpinLock int32
Salin selepas log masuk

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

func CompareAndSwapInt32(addr *int32, old, new int32) (swapped bool)
Salin selepas log masuk

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

convertedValue := TargetType(variable)
Salin selepas log masuk

Tetapi dalam buku

Belajar Pengaturcaraan Serentak dalam Go, ia menggunakan penukaran pembolehubah s daripada jenis *SpinLock kepada *int32< 的老式方法strong>, 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)
}
Salin selepas log masuk

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

Label berkaitan:
sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!