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

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

你如何反思地調(diào)用 Go 結(jié)構(gòu)的方法?

你如何反思地調(diào)用 Go 結(jié)構(gòu)的方法?

Go
撒科打諢 2022-06-27 16:23:25
假設(shè)我有一個ProblemSolver包含 1,000 多種“問題解決”方法的結(jié)構(gòu):type ProblemSolver struct {}func (ps ProblemSolver) problem1() {    fmt.Println("Solving problem #1 ...")    return}func (ps ProblemSolver) problem2() {    fmt.Println("Solving problem #2 ...")    return}...    func (ps ProblemSolver) problem1001() {    fmt.Println("Solving problem #1001 ...")    return}并說我想解決特定的問題——比如問題#1、3、4、8、9、10、11、14、19、20 ...等。func main() {    ps := ProblemSolver{}    problems := [100]int{1, 3, 4, 8, 9, 10, 11, 14, 19, 20 ...}}我知道你可以直接調(diào)用這些“一流的函數(shù)”,但這有一種代碼味道:ps.problem1()ps.problem3()ps.problem4()...ps.problem1001()我正在考慮reflect改用 - 我嘗試閱讀https://blog.golang.org/laws-of-reflection,但我發(fā)現(xiàn)它很難閱讀。是否可以reflect只調(diào)用我想要的函數(shù)(如problems上面的變量)?編輯:我在下面使用 Burak 的解決方案提出了類似的方法,效果很好。謝謝!// Solve : Solves specified problems.func (ps ProblemSolver) Solve() {    val := reflect.ValueOf(ps)    specifiedProblems := []int{1, 3, 4}    for _, sp := range specifiedProblems{        methodName := fmt.Sprintf("Problem%d", sp)        val.MethodByName(methodName).Call(nil)    }}
查看完整描述

1 回答

?
慕勒3428872

TA貢獻(xiàn)1848條經(jīng)驗 獲得超6個贊

您可以直接調(diào)用這些函數(shù):


ps.problem1()

ps.problem3()

ps.problem4()

...

您可以將它們放在一個數(shù)組中并調(diào)用它們:


problems:[]func(){ps.problem1,ps.problem3,ps.problem4,...}

for _,x:=range problems {

   x()

}

或者你可以使用反射:


val:=reflect.ValueOf(ps)

val.MethodByName(fmt.Sprintf("Problem%d",num)).Call(nil)

這些方法未導(dǎo)出,為了使反射起作用,您必須導(dǎo)出它們。


查看完整回答
反對 回復(fù) 2022-06-27
  • 1 回答
  • 0 關(guān)注
  • 118 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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