>백엔드 개발 >Golang >Go 언어에는 생성자가 있나요?

Go 언어에는 생성자가 있나요?

青灯夜游
青灯夜游원래의
2023-01-10 14:15:421398검색

Go 언어에는 생성자가 없습니다. 구조화된 언어인 Go 언어에는 객체지향 언어의 생성자가 없습니다. 그러나 객체지향 언어의 생성자와 유사한 효과를 얻을 수 있습니다. 즉, 구조 초기화 프로세스를 사용하여 시뮬레이션할 수 있습니다. 생성자의 구현.

Go 언어에는 생성자가 있나요?

이 튜토리얼의 운영 환경: Windows 7 시스템, GO 버전 1.18, Dell G3 컴퓨터.

생성자는 객체를 생성할 때 객체를 초기화하는 데, 즉 객체 멤버 변수에 초기값을 할당하는 데 주로 사용되는 특수 메서드입니다. 특수 클래스는 여러 개의 생성자를 가질 수 있으며, 이는 매개변수의 수나 매개변수의 유형, 즉 생성자의 오버로딩에 따라 구별될 수 있습니다.

구조화된 언어인 Golang에는 객체지향 언어의 구성 방법이 없지만 Golang은 C++와 같은 생성자 및 상속과 같은 객체지향 프로그래밍 아이디어와 방법을 구현할 수 있습니다.

struct 是值类型,如果结构体比较复杂的话,值拷贝 性能开销会比较大,所以该构造函数返回的是结构体指针유형 때문입니다.

Specification

  • 새 키워드로 시작

  • 구조 포인터 반환

구조체 생성 및 초기화를 위한 다양한 방법 - 생성자 오버로딩 시뮬레이션

구조체를 사용하는 경우 고양이의 특징을 설명하고, 그러면 고양이의 색상과 이름에 따라 다양한 유형의 고양이가 있을 수 있으며, 동시에 색상과 이름을 사용하여 다양한 유형의 고양이의 인스턴스를 구성할 수 있습니다. 프로세스는 다음을 참조할 수 있습니다. 코드:

type Cat struct {
    Color string
    Name  string
}
func NewCatByName(name string) *Cat {
    return &Cat{
        Name: name,
    }
}
func NewCatByColor(color string) *Cat {
    return &Cat{
        Color: color,
    }
}

코드 설명은 다음과 같습니다.

  • 라인 1은 색상 및 이름 필드를 포함한 Cat 구조를 정의합니다.

  • 6번째 줄은 이름으로 cat 구조를 구성하고 Cat 포인터를 반환하는 함수를 정의합니다.

  • 7번째 줄은 고양이 구조를 인스턴스화하기 위해 주소를 사용합니다.

  • 8번째 줄은 색상 필드를 무시하고 고양이 이름 필드를 초기화합니다.

  • 라인 12는 색상으로 cat 구조를 구성하고 Cat 포인터를 반환하는 함수를 정의합니다.

이 예에서 두 가지 속성인 color와 name의 유형은 모두 문자열입니다. Go 언어에는 함수 오버로딩이 없으므로 함수 이름 충돌을 피하기 위해 두 가지 다른 함수인 NewCatByName()과 NewCatByColor()가 사용됩니다. 이름은 다양한 Cat 구성 프로세스를 나타냅니다.

부모-자식 관계를 이용한 구조체 생성 및 초기화 - 부모 생성 호출 시뮬레이션

검은 고양이는 고양이의 일종이며, 이 두 개념을 동시에 설명할 때 고양이는 검은 고양이를 가리키는 일반적인 용어입니다. , 검은 고양이는 고양이의 유형에서 파생됩니다. 고양이와 검은 고양이의 관계를 설명하기 위해 구조를 사용할 때 검은 고양이(BlackCat)에 고양이(Cat)의 구조를 삽입하여 검은 고양이가 있음을 나타냅니다. cat의 특성을 파악하고 두 개의 서로 다른 생성자를 사용하여 각각 black cat 및 cat 구조 인스턴스를 구성합니다. 다음 코드를 참조하세요.

type Cat struct {
    Color string
    Name  string
}
type BlackCat struct {
    Cat  // 嵌入Cat, 类似于派生
}
// “构造基类”
func NewCat(name string) *Cat {
    return &Cat{
        Name: name,
    }
}
// “构造子类”
func NewBlackCat(color string) *BlackCat {
    cat := &BlackCat{}
    cat.Color = color
    return cat
}

코드 설명은 다음과 같습니다.

  • Line 6은 BlackCat 구조를 정의하고 Cat을 포함합니다. 구조를 사용하면 BlackCat은 Cat의 모든 멤버를 소유하고 인스턴스화 후 Cat의 모든 멤버에 자유롭게 액세스할 수 있습니다.

  • 라인 11에서 NewCat() 함수는 이름을 매개변수로 사용하여 Cat 구조를 채우는 Cat의 구성 프로세스를 정의합니다.

  • 라인 18, NewBlackCat()은 색상을 매개변수로 사용하고 BlackCat 포인터를 구성합니다.

  • Line 19에서 BlackCat 구조를 인스턴스화하고 Cat도 동시에 인스턴스화합니다.

  • 20행에 BlackCat에 포함된 Cat 색상 속성을 입력합니다. BlackCat에는 멤버가 없으며 모든 멤버는 Cat에서 왔습니다.

이 예에서 Cat 구조는 객체 지향의 "기본 클래스"와 유사하며 BlackCat은 객체 지향의 "파생"과 유사한 Cat 구조에 포함되어 있습니다. BlackCat에도 포함되어 인스턴스화됩니다.

간단히 말하면 Go 언어는 생성자와 관련된 특별한 메커니즘을 제공하지 않습니다. 사용자는 자신의 필요에 따라 매개변수를 구조 생성 매개변수에 전달하여 생성자의 작업을 완료할 수 있습니다.

【관련 추천: Go 비디오 튜토리얼, 프로그래밍 교육

위 내용은 Go 언어에는 생성자가 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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