>  기사  >  백엔드 개발  >  golang 구조체 메소드

golang 구조체 메소드

PHPz
PHPz원래의
2023-05-27 11:26:07769검색

Golang은 최신 고성능 프로그래밍 언어입니다. 고유한 데이터 유형 구조체(구조)는 이 언어에서 가장 중요한 구성 요소 중 하나입니다. 뿐만 아니라 Golang에서는 구조가 메서드 정의도 지원하므로 이 기사에서는 golang 구조체 메서드에 중점을 둘 것입니다.

I. 골랭 구조란 무엇인가요?

Golang에서 구조는 관련 데이터 필드 집합을 캡슐화할 수 있는 사용자 정의 데이터 유형입니다. 구조는 데이터를 더 잘 관리하고 사용하기 위해 복잡한 데이터 구조를 설명하는 데 자주 사용됩니다.

Golang 구조 정의에는 일반적으로 여러 필드가 포함됩니다. 필드는 기본 데이터 유형(예: int, float 등)이거나 기타 구조 유형 및 포인터 유형일 수 있습니다. 다음은 간단한 Golang 구조 정의 예입니다.

type Person struct {
    Name string
    Age int
    Address string
}

위 코드는 Name, Age 및 Address 세 가지 필드가 포함된 Person 구조 유형을 정의합니다. 여기서는 구조 필드의 첫 글자에 따라 다른 패키지(메인 패키지 포함)에서 해당 필드에 액세스할 수 있는지 여부가 결정된다는 점에 유의해야 합니다. 액세스 방법은 다음 예를 참조하세요.

package main

import (
    "fmt"
)

type Person struct {
    Name string
    age int //小写开头
    Address string
}

func main() {
    p1 := Person{"Bob", 30, "Beijing"}
    fmt.Println(p1.Name) // Bob
    fmt.Println(p1.Address) // Beijing
    fmt.Println(p1.age) // 编译错误,age未导出
}

II의 정의. golang 구조 메소드

Golang에서 구조 메소드는 구조의 필드 및 기타 관련 데이터에 접근할 수 있는 함수이며, 메소드에서 구조의 필드 값을 수정할 수 있습니다. 메서드 실행 중에 오류가 발생하는 경우 메서드는 값이나 오류를 반환할 수도 있습니다. 모든 구조 유형에는 메서드가 있을 수 있으며 메서드는 모든 패키지에서 정의될 수 있습니다.

Golang의 메서드는 함수와 유사하게 정의되지만 정의에서 수신자 유형을 지정해야 합니다. 수신자 유형은 메소드가 작동할 구조 객체를 나타내는 구조 유형 또는 해당 포인터 유형(여기서 포인터 유형은 C++의 참조 유형과 유사함)일 수 있습니다. 메소드의 정의 구문은 다음과 같습니다.

func (t Type) MethodName(parameterlist) (returntype) {
// function body
}

그 중 Type은 수신자의 유형을 나타내며, MethodName은 메소드 이름을 나타내며, 매개변수 목록은 메소드의 매개변수 목록을 정의하고, returntype은 메소드의 반환 유형을 나타냅니다. 반환값이 없으면 이 부분은 생략 가능합니다.

다음은 구조체에 대한 메서드의 예입니다.

type Rectangle struct {
     width float64
     height float64
}

func (r Rectangle) Area() float64 {
    return r.width * r.height
}

위 코드는 너비와 높이라는 두 개의 필드를 포함하는 Rectangle이라는 구조체 유형을 정의합니다. 또한 ​​의 면적을 반환하는 Area 메서드도 정의합니다. 여기서 수신자 r은 직사각형 자체입니다.

III. Golang 구조의 메소드 호출

Golang은 이를 위해 수신자 객체를 추가해야 한다는 점을 제외하면 일반 함수 호출과 유사합니다.

첫 번째는 값 메서드 호출입니다. 값 메서드를 통해 구조체의 메서드를 호출하면 먼저 구조체의 복사본이 생성된 후 복사본이 연산되어 결과가 반환됩니다. 다음은 값 메서드 호출의 예입니다.

func main() {
     r := Rectangle{5, 10}
     a := r.Area() //调用值方法
     fmt.Println("area: ", a) //输出结果
}

출력 결과는 다음과 같습니다.

area: 50

두 번째는 포인터 메서드 호출입니다. 포인터 수신기 포인터 형식을 통해 호출되는 메서드는 원래 구조에서 직접 작동하므로 다음과 같습니다. 종종 가치 방법과 비교됩니다. 다음은 포인터 메서드 호출의 예입니다.

func (r *Rectangle) Scale(w, h float64) {
     r.width *= w
     r.height *= h
}

func main() {
     r := Rectangle{5, 10}
     r.Scale(2, 5) // 调用指针方法
     fmt.Println(r.width, r.height) // 输出结果
}

출력 결과는 다음과 같습니다.

10 50

IV. Golang 구조 메서드 요약

이 기사에서는 Golang에서 구조의 정의와 메서드의 정의 및 호출을 배웠습니다. . 구조체 구조 유형은 관련 데이터 컬렉션을 캡슐화할 수 있는 Golang 언어의 중요한 구성 요소입니다. 동시에 메소드는 구조의 기능을 확장하여 프로그래머가 구조의 데이터를 더 잘 작동하고 관리할 수 있도록 합니다. 마지막으로 메소드는 수신자 유형의 값 메소드일 수도 있고 포인터 메소드일 수도 있으므로 실제 애플리케이션에서 적절한 호출 메소드를 선택해야 한다는 점에 유의해야 합니다.

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

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