文字列 s に対して、s[0] は最初のバイトを返すので、一旦 rune スライスを作成しないと n 番目の文字は取得できない。

package main

import (
    "fmt"
)

func main() {
    s := "日本語"
    fmt.Println(string(s[0])) // => æ
    fmt.Println(string(getRuneAt(s, 0))) // => 日
}

func getRuneAt(s string, i int) rune {
    rs := []rune(s)
    return rs[i]
}