수색…


통사론

  • //이 함수는 struct의 복사본을받습니다.
  • func (t * T) exampleTwo (i int) (n int) {return i} //이 메소드는 구조체에 대한 포인터를 받고 그것을 수정할 수 있습니다

기본 방법

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

메소드의 인수로 증가 / 감소 연산자

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