That's not the point. In the given Pascal you can add N different cases and compiler will check whether all instances of `state` are one of those N cases but not anything else. In Go you can't do that since it's really just an int which has 2^32 or whatever cases. There is no way to communicate to Go compiler that a `state` can be either `on` or `off` but not anything else. You can only communicate a `state` is an integer (2^32 different `state`s) and in particular state=0 is called off, state=1 called on. That's useless.
Bool can be either true or false. So your statement that there is no way to communicate to Go compiler that a `state` can be either `on` or `off` but not anything else is "bool false".
I'm not sure what you're trying to say? Bool can have 2 states, but in software we need things that have 3, 4 or N states too. So we need an abstraction that is like Bool but can have any number of cases. Moreover, bool is clearly not sufficient as it not only has 2 states, it can only represent exactly 1 bit of information. Whereas, e.g. in Haskell "Maybe X" has 2 states either "just X" or "nothing" but can represent arbitrary amount of information. (imagine having Go compiler forcing (bool, X) pair to have only two states either "(true, X)" or "(false, null)" such that compiler doesn't allow you to construct e.g. "(false, X)"). So bool is like very very specific example of what is being discussed here.