Some thoughts after spending ~100 hours with Go. - Function overloading is a major convenience that you will miss. There are differently named versions of every function and you will call the wrong version with the wrong arguments all the time . The number of functions in the standard library could be reduced by at least 1/4 if they'd got this right. The official FAQ ( http://golang.org/doc/faq#overloading ) explains…
> between chars (or "runes" WTF?) and integers. "Runes" were the original name, as implemented in Plan 9 by the same folks, for what the standards committee later decided to call the relatively blaze term "Unicode codepoints"--and which are not quite the same thing as characters. (In fact, I would say that the notion of a Unicode "character" is ambiguous to the point of uselessness--there are glyphs composed from sev…
The solution is to use Normalization Form C (NFC) (which combines accents with characters).
> there are ligatures that hold single codepoints, but which semantically are multiple "characters"
OK, so use Normalization Form KC (NFKC) (which splits ligatures, and combines accents with characters).
You're right that "length" of a unicode string is very ambiguous. Arguably, you shouldn't be able to call "length" without supplying an argument about what you are actually asking.