Я нахожу это немного противоречивым, потому что следующее работает нормально, но когда добавлен дополнительный позиционный аргумент, компилятору это не нравится.
func checkError(f *os.File, e error) interface{} {
if e != nil {
/*Print m and panic*/
}
return f
}
func f1(path string) {
checkError(os.Open(path)) //ERROR
}
Очевидно, вы могли бы просто сделать pu sh return значение непосредственно, не уверен, что вы сильно потеряете, так как вы будете паниковать c, если ошибка не равна нулю
func checkError(f *os.File, e error, m string) interface{} {
if e != nil {
/*Print m and panic*/
}
return f
}
func f1(path string) {
file, e := os.Open(path)
checkError(file, e, "Can't Open File")
}
Еще одна мысль - вы можете передать функцию и выполнить работу в checkError
type OsFunction func(string)(* os.File, error)
func checkError(osFunction OsFunction, path string, m string) interface{} {
f, e := osFunction(path)
if e != nil {
/*Print m and panic*/
}
return f
}
func f2(path string) {
checkError2(os.Open, path, "Can't Open File")
}