Sobes.tech
Back to questions
Junior — Middle
85

Каким образом можно ограничить применение одних и тех же стандартных методов в Go при использовании ручных вызовов?

Companies where asked
GsmSoft

Answer from AI

sobes.tech AI

В Go стандартные методы, например, методы интерфейсов, вызываются автоматически при использовании соответствующих типов. Если нужно ограничить или контролировать применение этих методов при ручных вызовах, можно:

  • Использовать композицию вместо наследования, чтобы явно контролировать, какие методы доступны.
  • Создавать обёртки (wrappers) вокруг типов, которые переопределяют или скрывают стандартные методы.
  • Использовать интерфейсы для ограничения набора доступных методов.

Пример с обёрткой:

package main

import "fmt"

type MyType struct{}

func (m MyType) String() string {
    return "MyType String"
}

// Обёртка, которая скрывает метод String

type Wrapper struct {
    inner MyType
}

func (w Wrapper) Print() {
    fmt.Println("Custom print without String method")
}

func main() {
    m := MyType{}
    w := Wrapper{inner: m}

    fmt.Println(m.String()) // вызов стандартного метода
    w.Print()               // вызов кастомного метода без String
}

Таким образом, можно контролировать, какие методы доступны и как они вызываются.