golang 메소드 시작하기

WBOY
풀어 주다: 2023-05-22 17:03:39
원래의
444명이 탐색했습니다.

Golang은 뛰어난 성능, 동시성, 단순성 및 보안을 갖춘 강력한 형식의 정적 형식 프로그래밍 언어입니다. 그 중 메소드(Method)는 프로그래머가 구조를 보다 편리하게 운영할 수 있도록 해주는 Golang의 매우 중요한 개념입니다. 이 기사에서는 독자들이 메소드 정의, 호출 및 상속을 포함하여 Golang의 메소드를 소개하여 초보자가 메소드 사용에 빠르게 익숙해질 수 있도록 돕습니다.

1. 메소드 정의

메소드는 호출되기 전에 수신자가 있어야 하는 특수 함수입니다. 수신자는 구조 유형이거나 비구조 유형(예: int, float 등)일 수 있습니다. 메서드는 구조체가 있는 패키지뿐만 아니라 모든 패키지에서 정의할 수 있습니다.

메서드의 정의 형식은 다음과 같습니다.

func (接收器变量 接收器类型) 方法名(参数列表)(返回值列表){
    // 函数体
}
로그인 후 복사

그 중 수신자 변수는 합법적인 변수 이름이라면 모두 가능하며, 수신자 유형은 모든 유형이 가능하지만 현재 패키지에 있는 유형이어야 합니다. 메서드 내에서 수신기 변수를 사용하여 수신기에 포함된 필드와 메서드에 액세스할 수 있습니다.

수신자에는 두 가지 유형이 있습니다.

  • 값 유형 수신기(값 수신기): 값 유형 수신기를 사용하는 메서드는 호출 시 수신기의 복사본을 만들고 메서드 내 수신기에 대한 수정 사항은 반영되지 않습니다. 원래 변수.
  • 포인터 수신기: 포인터형 수신기를 사용하는 메서드는 수신기를 복사하지 않으며 메서드 내에서 수신기를 수정하면 원본 변수에 직접 반영됩니다.

샘플 코드는 다음과 같습니다.

type Rect struct{
    width, height float64
}

// 定义求面积的方法(值类型接收器)
func (r Rect) area() float64{
    return r.width * r.height
}

// 定义求面积的方法(指针类型接收器)
func (r *Rect) areaPtr() float64{
    return r.width * r.height
}
로그인 후 복사

위 코드에서는 직사각형의 면적을 구하는 두 가지 방법을 정의했는데, 하나는 값 유형 수신기를 사용하고 다른 하나는 포인터 유형 수신기를 사용합니다.

2. 메소드 호출

은 함수 호출과 유사합니다. 메소드 호출에는 점 연산자를 사용해야 합니다. 메소드를 호출할 때 Golang은 자동으로 메소드의 수신자 유형을 확인하고 해당 메소드가 속한 수신자를 첫 번째 매개변수로 전달합니다.

샘플 코드는 다음과 같습니다.

package main

import "fmt"

type Rect struct{
    width, height float64
}

// 定义求面积的方法(值类型接收器)
func (r Rect) area() float64{
    return r.width * r.height
}

// 定义求面积的方法(指针类型接收器)
func (r *Rect) areaPtr() float64{
    return r.width * r.height
}

func main(){
    rect := Rect{10, 20}

    // 调用值类型接收器的方法
    fmt.Println(rect.area())     // 输出:200

    // 调用指针类型接收器的方法
    fmt.Println(rect.areaPtr())  // 输出:200

    // 使用&符号获取指针,再调用指针类型接收器的方法
    fmt.Println((&rect).areaPtr()) // 输出:200
}
로그인 후 복사

위 코드에서는 직사각형 REC를 생성하고 두 가지 메서드를 호출합니다.

값 유형 수신기의 방법을 사용할 때 수신기가 구조체의 값 유형인 경우 해당 필드 값이 수정되지 않는다는 점에 유의해야 합니다. 포인터형 리시버 방식을 사용하는 경우, 리시버가 구조체의 포인터형인 경우 해당 필드 값이 수정됩니다.

3. 메소드 상속

Golang에서는 유형이 다른 유형을 결합하여 상속을 얻을 수 있습니다. 상속 프로세스 중에 하위 유형의 메서드는 상위 유형의 메서드를 재정의하여 자체 논리를 구현할 수 있습니다.

샘플 코드는 다음과 같습니다.

package main

import "fmt"

type Shape interface{
    area() float64
}

type Rect struct{
    width, height float64
}

// 定义矩形类的方法
func (r Rect) area() float64{
    return r.width * r.height
}

type Circle struct{
    radius float64
}

// 定义圆形类的方法
func (c Circle) area() float64{
    return 3.14 * c.radius * c.radius
}

func main(){
    rect := Rect{10, 20}
    circle := Circle{10}

    // 创建形状对象,使用接口类型接收
    var shape Shape

    // 将矩形类型赋值给接口类型
    shape = rect
    fmt.Println(shape.area())   // 输出:200

    // 将圆形类型赋值给接口类型
    shape = circle
    fmt.Println(shape.area())   // 输出:314
}
로그인 후 복사

위 코드에서는 면적을 계산하는 방법을 포함하는 Shape 인터페이스를 정의합니다. 다음으로 Shape 인터페이스에서 각각 면적 방법을 다루는 두 가지 모양 유형인 Rect와 Circle을 정의했습니다. 마지막으로 Shape 인터페이스 유형에 Rect 및 Circle 유형을 각각 할당하여 면적을 계산합니다.

요약:

이 글은 Golang의 메소드 정의, 호출, 상속에 대한 지식을 소개합니다. 이 글을 공부함으로써 독자들은 Golang에서 중요한 메소드 개념의 역할을 이해하고 기본적인 사용 기술을 익힐 수 있습니다. 이를 바탕으로 독자는 Golang의 구문과 응용 프로그램을 더 자세히 배우고, 고급 메소드 사용 기술을 익히며 프로그래밍 능력을 향상시킬 수 있습니다.

위 내용은 golang 메소드 시작하기의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿