Go 언어의 함수와 메소드의 차이점: 일반 함수의 경우 수신자가 값 유형인 경우 포인터 유형 데이터를 메소드에 직접 전달할 수 없으며, 수신자가 값 유형인 경우 메소드를 직접 호출할 수 있습니다. 포인터 유형 변수로.
이 기사의 운영 환경: windows10 시스템, Go 1.11.2, thinkpad t480 컴퓨터.
함수와 메소드의 차이점에 대한 공식 설명: 메소드는 수신자를 포함하는 함수입니다. 수신자는 명명된 값이나 구조 유형 또는 포인터일 수 있습니다. 특정 유형의 모든 메소드는 해당 유형의 메소드 세트에 속합니다.
차이점:
1. 일반 함수의 경우: 수신자(함수 매개변수)가 값 유형인 경우 포인터 유형 데이터를 직접 전달할 수 없으며 그 반대도 마찬가지입니다.
func function_name([parameter list]) [return_types] { 函数体 }
2. 메서드(예: 구조체 메서드): 수신자가 값 형식인 경우 포인터 형식 변수를 사용하여 메서드를 직접 호출할 수 있으며 그 반대도 가능합니다.
func (variable_name variable_data_type) function_name() [return_type]{ /* 函数体*/ }
메서드와 함수의 차이점을 확인할 수 있습니다. 메소드는 func 키워드에 있습니다. 마지막은 함수 이름 대신 수신자입니다. 수신자는 스스로 정의한 유형일 수 있으며, 이 유형은 구조체, 인터페이스일 수도 있고 기본 데이터 유형을 재정의할 수도 있습니다.
Go 함수
함수는 작업을 수행하는 기본 코드 블록입니다.
Go 언어에는 최소한 main() 기능이 있습니다.
기능을 통해 다양한 기능을 나눌 수 있습니다. 논리적으로 각 기능은 지정된 작업을 수행합니다.
함수 선언은 컴파일러에게 함수의 이름, 반환 유형 및 매개 변수를 알려줍니다.
Go 함수는 여러 값을 반환할 수 있습니다.
Go 언어 표준 라이브러리는 사용할 수 있는 다양한 내장 기능을 제공합니다. 예를 들어, len() 함수는 다양한 유형의 인수를 허용하고 해당 유형의 길이를 반환할 수 있습니다. 문자열을 전달하면 문자열의 길이가 반환되고, 배열을 전달하면 배열에 포함된 요소의 개수가 반환됩니다.
1. 값 전송: 값 전송은 함수 호출 시 실제 매개변수의 복사본을 함수에 복사하는 것을 의미하므로, 함수에서 매개변수가 수정되더라도 실제 매개변수는 영향을 받지 않습니다.
2. 참조로 전달한다는 것은 함수를 호출할 때 실제 매개변수의 주소를 함수에 전달하는 것을 의미합니다. 그런 다음 함수의 매개변수를 수정하면 실제 매개변수에 영향을 미칩니다.
Go 메소드
Go 언어에는 함수와 메소드가 모두 있습니다. 메소드는 명명된 값이나 구조 유형 또는 포인터일 수 있는 수신자를 포함하는 함수입니다. 특정 유형의 모든 메소드는 해당 유형의 메소드 세트에 속합니다.
다음은 이 유형의 구조 유형과 메소드를 정의합니다.
package mainimport ( "fmt" )/* 定义结构体 */type Circle struct { radius float64 }func main() { var c1 Circle c1.radius = 10.00 fmt.Println("Area of Circle(c1) = ", c1.getArea()) }//该 method 属于 Circle 类型对象中的方法func (c Circle) getArea() float64 { //c.radius 即为 Circle 类型对象中的属性 return 3.14 * c.radius * c.radius }
(동영상 공유 학습: 프로그래밍 입문)
위 코드의 실행 결과는 다음과 같습니다.
Area of Circle(c1) = 314
Example
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() //与普通函数不同,接收者为指针类型和值类型的方法,指针类型和值类型的变量均可相互调用 }
관련 권장 사항 : golang 튜토리얼
위 내용은 Go 언어의 함수와 메소드의 차이점은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!