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
}