В Go нет классов. Тем не менее, вы можете объявлять методы для типов.
Метод - это функция со специальным аргументом, известным как получатель.
Получатель указывается в отдельном списке аргументов между ключевым словом func и именем метода.
В следующем примере метод Abs имеет получателя с типом Vertex и именем v.
package main
import (
"fmt"
"math"
)
type Vertex struct {
X, Y float64
}
func (v Vertex) Abs() float64 {
return math.Sqrt(v.X*v.X + v.Y*v.Y)
}
func main() {
v := Vertex{3, 4}
fmt.Println(v.Abs())
}
Вывод:
5
Метод - это всего лишь функция, для которой указан получатель.
В следующем примере Abs является обычной функцией с тем же функционалом, что и в предыдущем примере.
package main
import (
"fmt"
"math"
)
type Vertex struct {
X, Y float64
}
func Abs(v Vertex) float64 {
return math.Sqrt(v.X*v.X + v.Y*v.Y)
}
func main() {
v := Vertex{3, 4}
fmt.Println(Abs(v))
}
Вывод:
5
Объявлять методы можно не только для структур.
В следующем примере мы видим числовой тип MyFloat и его метод Abs.
Вы можете объявить метод только с получателем, чей тип объявлен в том же пакете, что и сам метод. Вы не можете объявить метод с получателем, чей тип объявлен в другом пакете (что также верно для встроенных типов, таких как int).
package main
import (
"fmt"
"math"
)
type MyFloat float64
func (f MyFloat) Abs() float64 {
if f < 0 {
return float64(-f)
}
return float64(f)
}
func main() {
f := MyFloat(-math.Sqrt2)
fmt.Println(f.Abs())
}
Вывод:
1.4142135623730951
Читайте также:
Комментариев нет:
Отправить комментарий