Можно ли дописать собственные методы к пакету

«Можно ли дописать собственные методы к пакету» — вопрос из категории Golang, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, можно, но не напрямую. В 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"
}