第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

Go 切片突變最佳實(shí)踐

Go 切片突變最佳實(shí)踐

Go
慕田峪7331174 2023-08-07 16:45:32
當(dāng)切片傳遞時(shí),很難預(yù)測(cè)底層原始數(shù)組是否正在發(fā)生變異,或者原始數(shù)組的副本是否正在發(fā)生變異a = [3]int {0, 1, 2}s = a[:]s[0] = 10a[0] == s[0] // trues = append(s, 3)s[0] = 20a[0] == s[0] // false假設(shè)今天我有這樣的處理a = [3]int {0, 1, 2}s = some_func(a[:]) // returns sliceprocess(s) // a is getting mutated because so far some_func hasn't caused the underlying array to be copied現(xiàn)在明天a = [3]int {0, 1, 2}s = some_func(a[:]) // returns slice, does append operationsprocess(s) // a is not getting mutated because some_func caused the underlying array to be copied那么切片的最佳實(shí)踐是什么?
查看完整描述

1 回答

?
蝴蝶刀刀

TA貢獻(xiàn)1801條經(jīng)驗(yàn) 獲得超8個(gè)贊

如果一個(gè)函數(shù)確實(shí)就地修改了切片的底層數(shù)組,并且承諾它總是就地修改底層數(shù)組,那么該函數(shù)通常應(yīng)該按值獲取切片參數(shù)并且不返回更新的切片:1


// Mutate() modifies (the backing array of) s in place to achieve $result.

// See below for why it returns an int.

func Mutate(s []T) int {

    // code

}

如果函數(shù)可以就地修改底層數(shù)組,但可能返回使用新數(shù)組的切片,則該函數(shù)應(yīng)返回新的切片值,或采用指向切片的指針:


// Replace() operates on a slice of T, but may return a totally new

// slice of T.

func Replace(s []T) []T {

    // code

}

當(dāng)此函數(shù)返回時(shí),您應(yīng)該假設(shè)底層數(shù)組(如果您擁有它)可能正在使用,也可能沒有使用:


func callsReplace() {

    var arr [10]T

    s := Replace(arr[:])

    // From here on, do not use variable arr directly as

    // we don't know if it is s's backing array, or not.


    // more code

}

但Mutate()承諾會(huì)就地修改數(shù)組。請(qǐng)注意,Mutate通常需要返回實(shí)際更新的數(shù)組元素的數(shù)量:


func callsMutate() {

    var arr [10]T

    n := Mutate(arr[:])

    // now work with arr[0] through arr[n]


    // more code

}

1當(dāng)然,它可以采用指向數(shù)組對(duì)象的指針,并就地修改數(shù)組,但這不太靈活,因?yàn)閿?shù)組大小隨后會(huì)被烘焙到類型中。


查看完整回答
反對(duì) 回復(fù) 2023-08-07
  • 1 回答
  • 0 關(guān)注
  • 179 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)