It came up recently on another thread; I wanted to expand here.
Let me say first off that the presence of strings.EqualFold as the key interface is a great win. Because proper case-insensitive equality testing can only be done for strings, and not rune-by-rune, the availability of this function with its semantics is the most important thing. So while the current implementation is not ideal, that's neither here nor there. It can be fixed whenever there's the desire, and as long as code uses this call--which please do!--it will get the fix when it happens.
The problem is that even language-neutral case-folding requires the ability to handle a non 1:1 mapping of runes in cases. For example, ß in German is a lower-case letter with no one-to-one uppercase equivalent. In uppercase it shows up as SS or SZ, depending on the word.
Note that case-mapping is much harder than mere case-insensitive equality testing. When you see a word in all upper case with SS you cannot necessarily replace SS with ß; for example if you see BUSSE you cannot know except from semantic context whether the word in lower case should be Busse or Buße, which are entirely separate words. (The first vowel in the two is different, but that is not visible in the spelling of all-caps word.) But you can reliably say that BUSSE and Busse test equal on a case-insensitive match, and that BUSSE and Buße also test equal.
This might raise the concern that case-insensitive matching could be non-transitive. But you also want Busse and Buße to match, because in Switzerland ß is being phased out, and both would be spelled Busse.
Another example is the obsolete letter kra in Kalaallisut, which similarly has a lower case form ĸ (which is not the same as k) and is upper-cased as the two-rune sequence K'.
There are other things which the current implementation gets wrong for case equality testing. The correct algorithm is described in the section "Default Caseless Matching" of the Unicode Standard 3.13. In various ways it gives different results from the current implementation in Go.
However, the most important thing is what has already been done: the relevant operation in Go works on strings, and not on runes. Given that, the implementation can be fixed whenever someone wants to invest the effort.