Go 언어의 메소드에 대한 자세한 설명

藏色散人
풀어 주다: 2020-08-27 13:29:44
앞으로
2747명이 탐색했습니다.

Go 언어의 방법에 대한 이해를 소개하고 도움이 필요한 친구들에게 도움이 되기를 바랍니다!

Go 언어의 메소드에 대한 자세한 설명go 메소드

정의

메소드는 특수 수신자 매개변수, 즉 func와 메소드 이름 사이에 메소드 수신자가 있는 함수입니다.
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 언어의 메소드에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:learnku.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!