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

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

迭代結(jié)構(gòu)列表并更改成員變量

迭代結(jié)構(gòu)列表并更改成員變量

Go
蝴蝶刀刀 2023-08-14 14:29:58
請(qǐng)考慮代碼https://play.golang.org/p/aO07_PoQLuh我有一個(gè)結(jié)構(gòu)列表,我從中讀取以了解我在途中生成的成員。對(duì)于每個(gè)結(jié)構(gòu),我都有一個(gè)提高計(jì)數(shù)器的方法,但是我缺少這里的醬汁。正如您從 o/p 中看到的那樣,我已經(jīng)增加了SBytesSent,但是當(dāng)我讀取結(jié)構(gòu)列表并檢查它時(shí),它的值是 0。處理這個(gè)問(wèn)題的最佳方法是什么?謝謝!package mainimport (    "fmt"    "sync")type destination struct {    Name          string    SBytesSent    int64    ABytesSent    int64    LastSeenAlive int64    Mutex         *sync.Mutex}type destinations []destinationvar (    destination_list destinations    myHosts          = []string{"host1", "host2", "host3"})func main() {    fmt.Println("Hello, playground")    for i, _ := range myHosts {        newDest := myHosts[i]        newd := destination{Name: newDest}        newd.Mutex = &sync.Mutex{}        destination_list = append(destination_list, newd)    }    i := 0    for {        increment()        status()        i += 1        if i == 3 {            break        }    }}func (self *destination) incrementSBytes(a int) {    self.Mutex.Lock()    defer self.Mutex.Unlock()    self.SBytesSent += int64(a)    fmt.Printf("new val %d\n", self.SBytesSent)}func (self *destination) Status() {    fmt.Printf("my val %d\n", self.SBytesSent)}func increment() {    for i, _ := range destination_list {        dest := destination_list[i]        dest.incrementSBytes(33)    }}func status() {    for i, _ := range destination_list {        dest := destination_list[i]        dest.Status()    }}編輯1請(qǐng)參閱https://play.golang.org/p/5uqqc3OKYDs - 我已經(jīng)增加到host3-6但到最后他們都顯示了99。如何讓host3保留之前的增量并顯示99 + 6 = 105?
查看完整描述

2 回答

?
江戶(hù)川亂折騰

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

它不起作用,因?yàn)槟趶?fù)制并修改副本:

dest := destination_list[i]
dest.incrementSBytes(33)

上面,您首先將數(shù)組元素復(fù)制到dest,然后修改dest。數(shù)組元素永遠(yuǎn)不會(huì)改變。而是嘗試這個(gè):

destination_list[i].incrementsSBytes(33)


查看完整回答
反對(duì) 回復(fù) 2023-08-14
?
慕標(biāo)琳琳

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

所有的魔力都在于range,它創(chuàng)建該元素的副本,因此修改是不可見(jiàn)的。


package main


import (

? ? "fmt"

? ? "sync"

)


type destination struct {

? ? Name? ? ? ? ? string

? ? SBytesSent? ? int64

? ? ABytesSent? ? int64

? ? LastSeenAlive int64

? ? Mutex? ? ? ? ?*sync.Mutex

}


type destinations []destination


var (

? ? destination_list destinations

? ? myHosts? ? ? ? ? = []string{"host1", "host2", "host3"}

)


func main() {

? ? fmt.Println("Hello, playground")

? ? for i := range myHosts {

? ? ? ? newDest := myHosts[i]

? ? ? ? newd := destination{Name: newDest}

? ? ? ? newd.Mutex = &sync.Mutex{}

? ? ? ? destination_list = append(destination_list, newd)

? ? }

? ? i := 0

? ? for {

? ? ? ? increment()

? ? ? ? status()

? ? ? ? i++

? ? ? ? if i == 3 {

? ? ? ? ? ? break

? ? ? ? }

? ? }


}


func (self *destination) incrementSBytes(a int) {

? ? self.Mutex.Lock()

? ? defer self.Mutex.Unlock()

? ? self.SBytesSent += int64(a)

? ? fmt.Printf("new val %d\n", self.SBytesSent)

}


func (self *destination) Status() {

? ? fmt.Printf("my val %d\n", self.SBytesSent)

}


func increment() {

? ? for i:=0; i<len(destination_list); i++ {

? ? ? ? destination_list[i].incrementSBytes(33)

? ? }

}


func status() {

? ? for i:=0; i<len(destination_list); i++ {

? ? ? ? destination_list[i].Status()

? ? }

}

輸出:


Hello, playground

new val 33

new val 33

new val 33

my val 33

my val 33

my val 33

new val 66

new val 66

new val 66

my val 66

my val 66

my val 66

new val 99

new val 99

new val 99

my val 99

my val 99

my val 99


查看完整回答
反對(duì) 回復(fù) 2023-08-14
  • 2 回答
  • 0 關(guān)注
  • 207 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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