A code point is any numerical value that defines the character and this is represented by one or more code units depending on the encoding. As UTF-8 is compatible with ASCII, all ASCII characters are represented in a single byte (8 bits), hence UTF-8 needs only 1 code unit to represent them.
But the biggest question is, if all characters in UTF-8 are represented in int32, then why we are getting uint8 type in the above example. As said earlier, in Go, a string is a read-only slice of bytes. When we use lenfunction on a string, it calculates the length of that slice. When we use forloop, it loops around the slice returning one byte at a time or one code unitat a time. As so far, all our characters were in ASCII character set, the byte provided by for loop was a valid character or a code unit was, in fact, a code point. Hence %c in Printf statement could print valid a character from that byte value. But as we know, UTF-8 code point or character value can be represented by series of one or more bytes (max 4 bytes), what will happen in for loop we saw earlier if we introduce non-ASCII characters?