>  기사  >  백엔드 개발  >  Go 언어에서 일반적인 함수와 메서드의 차이점은 무엇인가요?

Go 언어에서 일반적인 함수와 메서드의 차이점은 무엇인가요?

青灯夜游
青灯夜游원래의
2020-12-08 11:23:012286검색

차이점: 일반 함수의 경우 수신자가 값 유형인 경우 포인터 유형 데이터를 직접 전달할 수 없으며, 그 반대의 경우 수신자가 값 유형인 경우 포인터 유형 변수를 사용하여 메소드를 직접 호출할 수 있습니다. , 그 반대도 마찬가지입니다.

Go 언어에서 일반적인 함수와 메서드의 차이점은 무엇인가요?

이 기사의 운영 환경: 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.