Ответ
Да, можно, но не напрямую. В Go нельзя расширять существующие типы из других пакетов напрямую, но можно создать новый тип на основе существующего и добавить методы к нему. Это называется "type embedding" или "композиция".
package main
import (
"fmt"
"strings"
)
// MyString - наш кастомный тип на основе strings.Builder
type MyString struct {
strings.Builder
}
// Reverse добавляем новый метод к нашему типу
func (ms *MyString) Reverse() string {
s := ms.String()
runes := []rune(s)
for i, j := 0, len(runes)-1; i < j; i, j = i+1, j-1 {
runes[i], runes[j] = runes[j], runes[i]
}
return string(runes)
}
func main() {
var ms MyString
ms.WriteString("hello")
fmt.Println(ms.Reverse()) // "olleh"
}