Skip to content

Latest commit

 

History

History
28 lines (22 loc) · 1.24 KB

File metadata and controls

28 lines (22 loc) · 1.24 KB

Выражения-методы: гибкость вызова

Механизм работы с методами как с первоклассными объектами, позволяющий создавать выражения-методы, которые могут быть вызваны как от указателя, так и от значения типа. Это открывает возможность более динамичной работы с методами, где метод может быть сохранен в переменную и вызван с явной передачей получателя.

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")  // Работает с указателем на значение (и параметром)
}