В чем причина c дифференцировать функции и методы в Go? - PullRequest
0 голосов
/ 05 апреля 2020

Я читал о том, в чем разница между функциями и методами. Я прошел через несколько предыдущих ответов о переполнении стека. Однако я не мог понять, почему именно они остаются разными. Насколько я понимаю: все, что можно сделать с помощью методов, можно также сделать с помощью функций из Go. Я знаю, что методы также являются функциями. Чтобы уточнить мои вопросы, я добавил пример:

package main

import (
    "fmt"
)

type Point struct {
    a, b int
}

func (p *Point) sumM() int {
    return p.a + p.b
}
func sumF(p *Point) int {
    return p.a + p.b
}

func (p *Point) mulM(n int) int {
    return (p.a + p.b) * n
}
func mulF(p *Point, n int) int {
    return (p.a + p.b) * n
}

func main() {
    p := Point{2, 3}
    fmt.Println("sumM is: ", p.sumM())
    fmt.Println("sumF is: ", sumF(&p))
    fmt.Println("mulM is: ", p.mulM(2))
    fmt.Println("mulF is: ", mulF(&p, 2))
}

, где M и F представляют метод и функцию соответственно.

I хочу знать, что я что-то упустил; если есть некоторые аутентичные c аргументы в пользу этих различных реализаций. например плюсы и минусы для каждого.

1 Ответ

0 голосов
/ 06 апреля 2020

Несколько советов из Golang Методы :

  • Метод - это просто функция с аргументом получателя.
  • Методы помогают писать объектно-ориентированные код стиля в Go.
  • Вызовы методов гораздо легче читать и понимать, чем вызовы функций.
  • Методы помогают избежать конфликтов имен. Поскольку метод привязан к определенному получателю, вы можете иметь одинаковые имена методов для разных типов получателей.

Подсказка правила - , которая не определяет методы, если:

  • Зависимость от состояния не требуется
  • Вы можете выполнить эту функцию для любого типа, который реализует определенный c интерфейс, что означает, что вам не нужно ограничивать эту функцию принадлежат к определенному типу c.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...