Let's look at some of Java's keywords which have no analogue in the Go specification's list of keywords
1. boolean: go has the `bool` type, but it's a builtin, not a keyword, so it doesn't count against it.
2. byte: same thing
3. null: Go's `nil` is again not counted as a keyword in their list of 25
....
And hey, that accounts for almost the entire difference if you count all the primitive types.
Go, on the other hand, does not consider those "keywords", which leads to absolutely silly behaviour.
A programmer can accidentally redefine `len` to be a variable, and then `len(x)` will be an error later.
Because go has a ton of important builtins which aren't reserved keywords, you can write incredibly confusing code:
https://play.golang.org/p/-xChCblMEh
For a nice list, check out https://play.golang.org/p/yjkxqVY4eo
... yeah, Go's small number of keywords is often touted by Gophers, but really it's because the go team made this incredibly stupid decision.
If you counted the same sorts of things as keywords that java did, Go would have almost exactly the same number... and more problems would be caught at compile-time (like `len := 1`) .