Вы можете создать часть функций и сделать весь этот процесс более красивым, например,
functions := []func() (string, error){
function1, function2, function3, function4, function5,
}
for _, function := range functions {
someValue, err := function()
if err != nil {
fmt.Println("Function " + someValue + " didn't feel so good.")
break
}
fmt.Println("Function " + someValue + " went all right!")
}
Короче говоря, перерыв не позволяет вещам продолжаться, если вы закроете вышеуказанный процесс как функцию, вы можететакже используйте что-то вроде
return false
в случае ошибки, и в конце общего количества итераций, скажем, i == len (functions) -1, вы можете вернуть true, если все прошло хорошо.
Следует отметить, что вы можете создавать только те функции, которые удовлетворяют следующим условиям:
Все они должны иметь одинаковое количество аргументов;
Все аргументы должны иметь одинаковый тип для каждой позиции;
Все они имеют одинаковое количество возвращаемых значений;
Аналогично, они (возвращаемые значения) должны иметь одинаковый тип для каждой позиции;
Тем не менее, вы можете легко преодолеть эти ограничения, имея два или три разных среза.Например, все функции с 1 по 3 могут быть классифицированы как
func () (bool, err)
Где функции 4 и 5
func () (int, err)
Чтобы эти функции работали, вы можете просто повторить первый фрагмент, затем, если всеидет по плану, переходите ко второму.
firstSetOfFuncs := []func() (bool, error){
function1, function2, function3,
}
secondSetOfFuncs := []func() (int, err){
function4, function5,
}
for i, function := range firstSetOfFuncs {
someValue, err := function()
if err != nil {
fmt.Println("Something went terribly wrong.")
break
}
if i == len(firstSetOfFuncs) - 1 {
for _, secondTypeOfFunc := range secondSetOfFuncs {
someNum, anotherErr := secondTypeOfFunc()
if anotherErr != nil {
fmt.Println("All seemed all right, until it didn't.")
break
}
}
}
}