首頁 >後端開發 >Golang >go 類型和點語法是什麼

go 類型和點語法是什麼

PHPz
PHPz轉載
2024-02-08 22:45:21474瀏覽

go 类型和点语法是什么

php小編草莓為您介紹Go語言中的型別和點文法。在Go語言中,類型是變數的屬性,用來定義變數的資料類型。 Go語言中的類型包括基本型別(如整數、浮點型、布林型等)和複合型別(如陣列、切片、映射等)。而點語法則是用來存取結構體和物件的屬性和方法的語法。透過使用點語法,我們可以直接使用物件或結構體的屬性或呼叫其方法,實現對資料的操作和處理。這種簡潔而直覺的語法使得Go語言在程式設計上更加便捷和有效率。

問題內容

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) 語法是什麼,(*int) 和 (s) 是什麼意思?

解決方法

您已在此處定義了類型:

type SpinLock int32

但是您將使用以下規範來呼叫原子包中的方法:

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

因此,要將類型為SpinLock 的變數s 傳送到CompareAndSwapInt32 方法,您必須向編譯器說明s 可以用作int32,這稱為類型轉換,在golang 中我們這樣做:

convertedValue := TargetType(variable)

但是在學習Go 並發程式設計一書中,它使用了將變數s 從類型*SpinLock 轉換為*int32,更現代的方法可能是:

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

以上是go 類型和點語法是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除