Czy wydawanie wielu oświadczeń defer
jest bezpieczniejsze czy bardziej idiotyczne, czy też odłożenie anonimowej funkcji, która pakuje logikę?Wielokrotne odrzucenia kontra odroczona funkcja anonimowa
Przykłady:
defer os.Remove(tempFile.Name())
defer tempFile.Close()
W przypadku powyżej składni jest minimalna, ale kolejność odsuwa się do tyłu z logiką do wykonania.
W przypadku poniżej linii jest więcej, więcej „składni”, ale logika jest w bardziej naturalnej kolejności:
defer func() {
tempFile.Close()
os.Remove(tempFile.Name())
}()
który z nich korzystać?
Tylko mała uwaga (nie warta pełnej odpowiedzi), że "odroczyć" ma koszt wydajności. Jest bardzo mały (~ 75 ns zgodnie z moimi testami na go1.5.1 linux/amd64) i prawdopodobnie nie warto się nad tym zastanawiać, ale nadal należy to zauważyć. – HectorJ