차이점: 일반 함수의 경우 수신자가 값 유형인 경우 포인터 유형 데이터를 직접 전달할 수 없으며, 그 반대의 경우 수신자가 값 유형인 경우 포인터 유형 변수를 사용하여 메소드를 직접 호출할 수 있습니다. , 그 반대도 마찬가지입니다.
이 기사의 운영 환경: windows10 시스템, Go 1.11.2, thinkpad t480 컴퓨터.
관련 추천: "Go 비디오 튜토리얼"
Go 언어의 일반 함수와 메소드의 차이점
1 일반 함수의 경우 수신자가 값 유형인 경우 포인터 유형 데이터를 직접 전달할 수 없습니다. 그 반대도 마찬가지입니다.
2. 메소드(예: 구조체 메소드)의 경우 수신자가 값 유형인 경우 포인터 유형 변수를 사용하여 메소드를 직접 호출할 수 있으며 그 반대도 마찬가지입니다.
다음은 간단한 예입니다.
package structTest //普通函数与方法的区别(在接收者分别为值类型和指针类型的时候) //Date:2014-4-3 10:00:07 import ( "fmt" ) func StructTest06Base() { structTest0601() structTest0602() } //1.普通函数 //接收值类型参数的函数 func valueIntTest(a int) int { return a + 10 } //接收指针类型参数的函数 func pointerIntTest(a *int) int { return *a + 10 } func structTest0601() { a := 2 fmt.Println("valueIntTest:", valueIntTest(a)) //函数的参数为值类型,则不能直接将指针作为参数传递 //fmt.Println("valueIntTest:", valueIntTest(&a)) //compile error: cannot use &a (type *int) as type int in function argument b := 5 fmt.Println("pointerIntTest:", pointerIntTest(&b)) //同样,当函数的参数为指针类型时,也不能直接将值类型作为参数传递 //fmt.Println("pointerIntTest:", pointerIntTest(b)) //compile error:cannot use b (type int) as type *int in function argument } //2.方法 type PersonD struct { id int name string } //接收者为值类型 func (p PersonD) valueShowName() { fmt.Println(p.name) } //接收者为指针类型 func (p *PersonD) pointShowName() { fmt.Println(p.name) } func structTest0602() { //值类型调用方法 personValue := PersonD{101, "Will Smith"} personValue.valueShowName() personValue.pointShowName() //指针类型调用方法 personPointer := &PersonD{102, "Paul Tony"} personPointer.valueShowName() personPointer.pointShowName() //与普通函数不同,接收者为指针类型和值类型的方法,指针类型和值类型的变量均可相互调用 }
더 많은 프로그래밍 관련 지식을 보려면 프로그래밍 코스를 방문하세요! !
위 내용은 Go 언어에서 일반적인 함수와 메서드의 차이점은 무엇인가요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!