В следующем примере показано, как использовать оператор range
в цикле for
для реализации цикла foreach
.
func PrintXml (out io.Writer, value interface{}) error {
var data []byte
var err error
for _, action := range []func() {
func () { data, err = xml.MarshalIndent(value, "", " ") },
func () { _, err = out.Write([]byte(xml.Header)) },
func () { _, err = out.Write(data) },
func () { _, err = out.Write([]byte("\n")) }} {
action();
if err != nil {
return err
}
}
return nil;
}
В этом примере выполняется перебор массива функций для унификации обработки ошибок для функций. Полный пример - на игровой площадке Google .
PS: это также показывает, что подвесные скобки - плохая идея для читабельности кода. Подсказка: условие for
заканчивается незадолго до вызова action()
. Очевидно, не так ли?