Поиск…


Синтаксис

  • func (t T) exampleOne (i int) (n int) {return i} // эта функция получит копию структуры
  • func (t * T) exampleTwo (i int) (n int) {return i} // этот метод получит указатель на struct и сможет его модифицировать

Основные методы

Методы в Go аналогичны функциям, за исключением того, что они имеют приемник .

Обычно приемник - это своего рода структура или тип.

package main

import (
    "fmt"
)

type Employee struct {
    Name string
    Age  int
    Rank int
}

func (empl *Employee) Promote() {
    empl.Rank++
}

func main() {

    Bob := new(Employee)

    Bob.Rank = 1
    fmt.Println("Bobs rank now is: ", Bob.Rank)
    fmt.Println("Lets promote Bob!")

    Bob.Promote()

    fmt.Println("Now Bobs rank is: ", Bob.Rank)

}

Выход:

Bobs rank now is:  1
Lets promote Bob!
Now Bobs rank is:  2

Цепочные методы

С помощью методов в golang вы можете использовать метод «chaining», передающий указатель на метод и возвращающий указатель на одну и ту же структуру:

package main

import (
    "fmt"
)

type Employee struct {
    Name string
    Age  int
    Rank int
}

func (empl *Employee) Promote() *Employee {
    fmt.Printf("Promoting %s\n", empl.Name)
    empl.Rank++
    return empl
}

func (empl *Employee) SetName(name string) *Employee {
    fmt.Printf("Set name of new Employee to %s\n", name)
    empl.Name = name
    return empl
}

func main() {

    worker := new(Employee)

    worker.Rank = 1

    worker.SetName("Bob").Promote()

    fmt.Printf("Here we have %s with rank %d\n", worker.Name, worker.Rank)

}

Выход:

Set name of new Employee to Bob
Promoting Bob
Here we have Bob with rank 2

Операторы Increment-Decrement как аргументы в методах

Хотя Go поддерживает операторы ++ и - и поведение оказывается почти похожим на c / c ++, переменные с такими операторами не могут передаваться как аргумент функции.

    package main

    import (
        "fmt"
    )
    
    func abcd(a int, b int) {
     fmt.Println(a," ",b)
    }
    func main() {
        a:=5
        abcd(a++,++a)
    }

Результат: синтаксическая ошибка: неожиданный ++, ожидающая запятая или)



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow