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

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 Golang 中改變字符串?

在 Golang 中改變字符串?

Go
桃花長相依 2023-07-26 19:59:41
出于測試目的,我嘗試模擬庫中的Rows.Scan方法database/sql。簽名看起來像這樣:func?(r?*Rows)?Scan(dest?...interface{})?error許多如何使用此方法的示例表明,您將一個指向字符串(例如)的指針傳遞給 Scan 方法,它將通過該指針分配值。var?name?stringrows.Scan(&name)我一直在嘗試重新創(chuàng)建類似的東西以實現(xiàn)我自己的理解并最終進行嘲笑,但它不起作用。func?MockScan(args?...interface{})?{ ????var?s2?string ????fmt.Println(args[0]) ????args[0]?=?&s2 ????fmt.Println(args[0]) } func?main()?{ ????var?s1?string ????fmt.Println(&s1) ????MockScan(&s1) ????fmt.Println(&s1) }結果是:0xc0000129500xc0000129500xc0000129600xc000012950我的初始字符串永遠不會呈現(xiàn)新值。我知道字符串是不可變的(盡管我對這個概念的真正理解有點動搖),但實際的Rows.Scan方法不知何故設法改變了字符串。
查看完整描述

1 回答

?
ITMISS

TA貢獻1871條經(jīng)驗 獲得超8個贊

args[0] = &s2


這在 之外沒有任何作用MockScan。您正在更改args[0]指向的內(nèi)容,而不是更改指向的內(nèi)容args[0]。


你想做類似的事情


func MockScan(args ...interface{}) {

    // In real life, there would be some logic here to figure out what

    // kind of pointer we're dealing with, or some error handling to

    // handle the case where the user didn't pass a *string

    dst := args[0].(*string)

    *dst = "A new value"

}


func main() {

    var s1 string = "An old value"

    fmt.Println(s1)

    MockScan(&s1)

    fmt.Println(s1)

}

請注意,如果我們在&s1調(diào)用之前和之后在 main 中打印,它仍然不會改變。它仍然是相同的變量,仍然位于相同的地址。我們已將一個指針傳遞&s1給MockScan,以便MockScan可以使用該指針將值寫入s1。


查看完整回答
反對 回復 2023-07-26
  • 1 回答
  • 0 關注
  • 105 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號