Well, so, that's actually not doing the right thing. You just changed the names in the list of strings that holds admin names, but not the names on the user objects themselves.
Even if the first half were returning the users themselves to the admins list, you're still iterating over the list twice.
This is yet another reason why the for loop is good - it makes it more clear what is actually going on. This is your code in for loops:
var admins []string
for _, u := range users {
if u.IsAdmin() {
admins = append(admins, u.Name)
}
}
for i := range admins {
admins[i] = admins[i] + "*"
}
The problem with the fancy syntax is that it makes it too easy to write suboptimal code that you'd never write if you were writing plain old for loops, like the above.
Even if the first half were returning the users themselves to the admins list, you're still iterating over the list twice.
This is yet another reason why the for loop is good - it makes it more clear what is actually going on. This is your code in for loops:
The problem with the fancy syntax is that it makes it too easy to write suboptimal code that you'd never write if you were writing plain old for loops, like the above.