Agreed about initial capitals. Oberon did it by prepending a * to the name in the declaration instead.
Not sure what you mean by ML's excessive magic. Isn't := just like let in ML, except for meaning an assignment instead of a new binding if there happens to be one in scope already for the same variable -- which is more magic than 'let'? (I wonder if := might need the value restriction like 'let' does since Go has a few parameterized types built in. I haven't really looked into Go yet.)
I guess you just mean they don't also have type inference for func definitions -- fair enough.