yeah, i do a lot of that sort of stuff too. another thing is strong typing lets you prevent incorrect things from even getting past the compiler, like fixed size arrrays and creating derivative types of base types so only correct ranges of values are available to the caller. saves a lot of mistakes.
dynamic typed languages are so easy to create bugs that hide forever. another one is variable shadowing, most go programmers are constantly using the allocate-and-assign := operator all the time for everything and explicitly specifying return values. those two also can create hard to find bugs. i avoid them altogether by named return values and short functions with "naked" returns. my IDE also always shows the function signature at the top when it's scrolled down part way in so the return values names are always in front of me.