亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

如何從同一地圖內的另一個函數調用存儲在地圖中的函數

如何從同一地圖內的另一個函數調用存儲在地圖中的函數

Go
慕田峪7331174 2022-06-13 15:49:18
我正在嘗試從同一張地圖中定義的另一個函數調用地圖中定義的函數。但是 Go 編譯器說:“初始化循環”。這是代碼:package mainimport ...var calls = map[string]func(arg string) (interface[], error) {    "function1": func(arg string) (interface{}, error) {         // do stuff         return res, nil     },    "function2": func(arg string) (interface{}, error) {         res, error := calls["function1"](arg) // HERE IS THE ERROR         return res, nil     },}如何從地圖內部調用其他函數?var 調用,不在函數內部
查看完整描述

2 回答

?
波斯汪

TA貢獻1811條經驗 獲得超4個贊

在更正您的代碼以便它甚至可以編譯之后(即替換interface[]為interface{},并刪除一些未定義的變量等),實際錯誤與初始化循環無關。確切的錯誤實際上是(參見操場示例):


./prog.go:10:25:未定義:調用


(如果您實際上收到有關初始化循環的錯誤而不是此錯誤,則可能意味著您粘貼的代碼實際上與您的實際代碼不夠接近,因此請使用最小的、可重現的示例更新問題。)


對此的解決方案是calls在定義引用它的函數之前進行定義。這很容易通過預定義calls為空地圖(游樂場鏈接)來完成:


    calls := make(map[string]func(string) (interface{}, error), 0 )

    calls = map[string]func(arg string) (interface{}, error) {

        "function1": func(arg string) (interface{}, error) {

            // do stuff

            return nil, nil

        },

        "function2": func(arg string) (interface{}, error) {

            res, err := calls["function1"](arg) // HERE IS THE ERROR

            return res, err

        },

    }


查看完整回答
反對 回復 2022-06-13
?
狐的傳說

TA貢獻1804條經驗 獲得超3個贊

發生這種情況是因為在地圖的初始化范圍內,尚未分配“調用”地圖。你可以有它如下:


f1 := func(arg string) (interface{}, error) {

    // do stuff

    return nil, nil

}

var calls = map[string]func(arg string) (interface{}, error) {

    "function1": f1,

    "function2": func(arg string) (interface{}, error) {

        res, error := f1(arg)

        return res, nil

    },

}

這樣你就不需要在你的范圍內有'calls'映射來獲得'f1'值


查看完整回答
反對 回復 2022-06-13
  • 2 回答
  • 0 關注
  • 117 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號