Механизм работы с методами как с первоклассными объектами, позволяющий создавать выражения-методы, которые могут быть вызваны как от указателя, так и от значения типа. Это открывает возможность более динамичной работы с методами, где метод может быть сохранен в переменную и вызван с явной передачей получателя.
type MyType struct{}
func (a *MyType) Try(val any) {
if a == nil {
println("nil receiver")
return
}
println("method called with:", val)
}
func main() {
var a *MyType
// Выражение-метод от типа с параметром
try := (*MyType).Try
try(a, 42) // Работает с nil-получателем (и параметром)
// Альтернативный вариант
tryVal := (MyType).Try
b := MyType{}
tryVal(&b, "val") // Работает с указателем на значение (и параметром)
}