Go 将动态参数传递给函数

Go 将动态参数传递给函数,go,Go,我有一个函数,应该这样做 func getA(m *m.TSR, bl string) string { runParams, exist := m.BuildParams.Before[bl] if exist { runParamsMap, ok := runParams.(map[interface{}]interface{}) if ok { run, ok := runParamsMap["builder"]

我有一个函数,应该这样做


func getA(m *m.TSR, bl string) string {
    runParams, exist := m.BuildParams.Before[bl]
    if exist {
        runParamsMap, ok := runParams.(map[interface{}]interface{})
        if ok {
            run, ok := runParamsMap["builder"]
            if ok {
                return run.(string)
            }
        }
    }
    return ""
}


func getB(m *m.TSR, bl string) string {
    runParams, exist := m.BuildParams.After[bl]
    if exist {
        runParamsMap, ok := runParams.(map[interface{}]interface{})
        if ok {
            run, ok := runParamsMap["builder"]
            if ok {
                return run.(string)
            }
        }
    }
    return ""
}

这两个函数都像预期的那样工作,但是我想知道是否有一种方法可以只使用一个处理相同的函数? 唯一的区别是前后

m.BuildParams.Before[bl]

m.BuildParams.After[bl]
所有重置都是完全相同的,您知道如何在不删除功能外的行的情况下将它们组合起来吗


可能有其他参数……

一个选项是将公共部分移动到另一个函数,例如
get()
,并更改
getA()
getB()
以调用此
get()

如果
m.BuildParams.Before
m.BuildParams.Before
属于同一类型(无论是
commonType
),您可以做得更好:

func getA(m *m.TSR, bl string) string {
    return get(m.BuildParams.Before, bl)
}

func getB(m *m.TSR, bl string) string {
    return get(m.BuildParams.After, bl)
}
并且只有第一行在
get()
中更改:

func getA(m *m.TSR, bl string) string {
    return get(m.BuildParams.Before, bl)
}

func getB(m *m.TSR, bl string) string {
    return get(m.BuildParams.After, bl)
}
func get(common commonType, bl string) string {
    runParams, exist := common[bl]
    // rest is same
}