首頁  >  文章  >  後端開發  >  如何在不使用 for 迴圈的情況下初始化 Go 中的陣列?

如何在不使用 for 迴圈的情況下初始化 Go 中的陣列?

Linda Hamilton
Linda Hamilton原創
2024-10-31 20:12:02403瀏覽

How can I initialize an array in Go without using a for loop?

在沒有 For 迴圈的情況下初始化 Go 中的陣列

在 Go 中使用陣列時,通常需要初始化它們的值。最直接的方法是使用 for 循環,如下例所示:

<code class="go">for i := 0; i < n; i++ {
    A[i] = true
}</code>

但是,對於大型數組,這種方法可能會變得乏味。幸運的是,有多種替代方案可用。

複合文字

複合文字允許您以更簡潔的方式創建和初始化數組和切片:

<code class="go">b1 := []bool{true, true, true}
b2 := [3]bool{true, true, true}</code>

請注意,複合文字始終會將陣列初始化為給定類型的零值。在 bool 的情況下,這表示所有值都將為 false。

使用常數

如果要將所有元素初始化為特定值(例如true ),您可以引入一個常數並在複合文字中使用它:

<code class="go">const T = true
b3 := []bool{T, T, T}</code>

替代邏輯

在某些情況下,儲存常數可能會更有效數組中所需值的倒數。這允許您利用預設的歸零數組行為:

<code class="go">presents := []bool{true, true, true, true, true, true}

// Equivalent to:
missings := make([]bool, 6) // All false (not missing)</code>

高效的「memset」操作

如果效能至關重要,您可以考慮使用以下內容memset 操作的實作:

<code class="go">import (
    "bytes"
    "unsafe"
)

func memset(p []interface{}, v interface{}) {
    b := bytes.NewBuffer(make([]byte, unsafe.Sizeof(v)))
    b.Reset()
    for i := range p {
        b.Write(b.Bytes())
        copy(p[i:i+1], *(*[]byte)(unsafe.Pointer(&v)))
    }
}</code>

這種方法對於大型陣列特別有效。

以上是如何在不使用 for 迴圈的情況下初始化 Go 中的陣列?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn