You say of Go "If a newline appears following one of a handful of token types that are known to potentially end a statement, the newline is treated like a semicolon. Otherwise it is ignored." This may be true, but it is incomplete. For example, Go requires braces in many cases (e.g., for ... {, if ... {) even if the following statement is a single line.
Go eg