에서 Go 언어로 메소드를 소개하는 내용인데, 도움이 필요한 친구들에게 도움이 되었으면 좋겠습니다!
go 메소드
func (s Student) GetName() string { return s.name}func (s *Student) SetName(name string) { s.name = name}
객체를 수정해야 하는 경우 포인터(참조로 전달)를 사용해야 합니다. 그렇지 않으면 유형을 리터럴(값으로 전달)로 선언하면 됩니다. 또한 모든 메서드 호출 시 값을 복사하지 마세요. type Integer intfunc (a *Integer) Increase(i Integer) {
*a = *a + i}func main() {
var a Integer = 2
var b Integer = 2
//a.Increase(b)
//(&a).Increase(b)
(*Integer).Increase(&a, b)
fmt.Println(a)}
이 메소드는 Integer 클래스에 속하지 않고 Integer를 가리키는 포인터 유형에 속합니다. 메소드를 호출할 때 인스턴스에서 직접 증가 메소드를 호출할 수 있는 이유는 Go 언어 컴파일 단계가 a를 자동으로 변환합니다. 해당 포인터 유형은 &a
이므로 실제 호출 코드는 (&a).Increase(b)
입니다.
은 실제로 구문 설탕입니다&a
,所以真正调用的代码是 (&a).Increase(b)
。
type A struct { name string}func (a A) Name() string { a.name = "Hi! " + a.name return a.name}func main() { a := A{name: "test"} fmt.Println(a.Name()) fmt.Println(A.Name(a))}
a.Name()
其实就是 A.Name(a)
func NameOfA(a A) string { a.name = "Hi! " + a.name return a.name}func main() { t1 := reflect.TypeOf(A.Name) t2 := reflect.TypeOf(NameOfA) fmt.Println(t1 == t2)// true}
a.Name()
은 실제로 A.Name(a)
에 대한 구문 설탕이며, 변수 a는 소위 메소드 수신자 . rrreeeGo 언어의 함수 유형은 매개변수 및 반환 값에만 관련되어 있으므로 이 두 유형의 동일성은 메서드가 본질적으로 일반 함수이고 수신자가 암시적 첫 번째 매개변수
임을 증명할 수 있습니다.더 많은 Go 기술 기사를 보려면 go 언어 튜토리얼
칼럼을 방문하세요! 🎜위 내용은 Go 언어의 메소드에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!