The declaration syntax contradicts the commentary.<p>Functions do not read from left to right. The example of<p><pre><code> func main(argc int, argv *[]byte) int
</code></pre>
is explained as "function main takes an int and a pointer to a slice of bytes and returns an int" but it should read "main is a function which takes an int and a pointer to a slice of bytes and returns an int" just like<p><pre><code> x int
</code></pre>
means "x is an integer". Reading left to right the variable name should come first for functions as for other variables so the function syntax should be<p><pre><code> main func(argc int, argv *[]byte) int
</code></pre>
But this can't be so because this appears to be the syntax that function variables use<p><pre><code> f func(func(int,int) int, int) int
</code></pre>
which is explained as "Here's a declaration of a function variable (analogous to a function pointer in C)".<p>Also the article says "Pointers are the exception that proves the rule" because "For familiarity, Go's pointers use the * notation from C, but we could not bring ourselves to make a similar reversal for pointer types.".<p>Putting these two observations together I would say that Go's declaration syntax fails in its stated mission of simplicity and regularity.<p>EDIT: can't seem to work out how to code markup on HN, anyway I hope I've made what I'm trying to say clear enough.<p>UPDATE: two spaces at the start of a line seems to work