替换字符串中特定位置的字符

I know about the method string.Replace(). And it works if you know exactly what to replace and its occurrences. But what can I do if I want to replace a char at only a known position? I'm thinking of something like this:

randLetter := getRandomChar()

myText := "This is my text"

randPos :=  rand.Intn(len(myText) - 1)

newText := [:randPos] + randLetter + [randPos + 1:]

But this does not replace the char at randPos, just inserts the randLetter at that position. Right?

UTF-8 is a variable-length encoding. For example,

package main

import "fmt"

func insertChar(s string, c rune, i int) string {
    if i >= 0 {
        r := []rune(s)
        if i < len(r) {
            r[i] = c
            s = string(r)
        }
    }
    return s
}

func main() {
    s := "Hello, 世界"
    fmt.Println(s)
    s = insertChar(s, 'X', len([]rune(s))-1)
    fmt.Println(s)
}

Output:

Hello, 世界
Hello, 世X

A string is a read-only slice of bytes. You can't replace anything.

A single Rune can consist of multiple bytes. So you should convert the string to a (intermediate) mutable slice of Runes anyway:

myText := []rune("This is my text")
randPos := rand.Intn(len(myText) - 1)
myText[randPos] = randLetter
fmt.Println(string(myText))

I've written some code to replace the character found at indexofcharacter with the replacement. I may not be the best method, but it works fine.

https://play.golang.org/p/9CTgHRm6icK

func replaceAtPosition(originaltext string, indexofcharacter int, replacement string) string {
    runes := []rune(originaltext )
    partOne := string(runes[0:indexofcharacter-1])
    partTwo := string(runes[indexofcharacter:len(runes)])
    return partOne + replacement + partTwo
}