s := "hello"; fmt.Println(s[0])?В Go строка - это последовательность байт. Индексация s[0] возвращает первый байт, а не символ. Для строки "hello" это байт с кодом 104 (ASCII 'h').
fmt.Println(s[0]) выводит тип byte (он же uint8), поэтому на экран попадает число 104.
s := "hello"
fmt.Println(s[0]) // 104
fmt.Printf("%c", s[0]) // h
fmt.Println(string(s[0])) // h
Для UTF-8 (кириллица, эмодзи) один символ может занимать несколько байт. s[i] вернёт один байт, возможна середина символа. Для перебора символов используйте for _, r := range s.
len(s) - количество байтs[i] - байт по индексу[]rune(s) - слайс символов (рун)