>백엔드 개발 >Golang >기존 생성자 없이 Go에서 구조체를 어떻게 초기화할 수 있나요?

기존 생성자 없이 Go에서 구조체를 어떻게 초기화할 수 있나요?

Linda Hamilton
Linda Hamilton원래의
2024-12-17 18:37:14519검색

How Can I Initialize Structs in Go Without Traditional Constructors?

Go의 생성자: 합리적인 기본값을 보장하기 위한 대안

전통적으로 생성자는 객체 지향 프로그래밍 언어에서 객체를 초기화하는 데 사용됩니다. 그러나 객체 지향 설계에 대해 다른 접근 방식을 취하는 Go에는 기존 의미의 생성자가 없습니다.

구조체에 합리적인 기본값을 설정해야 하는 필요성을 해결하기 위해 Go는 몇 가지 대안을 제공합니다. 한 가지 옵션은 패키지 수준에서 실행되는 init 메서드입니다. 그러나 이 접근 방식은 개별 구조체를 초기화하는 데 적합하지 않습니다.

보다 일반적인 방법은 필요한 매개변수를 사용하고 초기화된 구조체에 대한 포인터를 반환하는 NewThing 함수를 만드는 것입니다. 이 기능을 사용하면 다른 필드에 기본값을 할당하면서 특정 값을 설정할 수 있습니다. 예:

type Thing struct {
    Name  string
    Num   int
}

func NewThing(name string) *Thing {
    p := new(Thing)
    p.Name = name
    p.Num = 33 // Default value
    return p
}

이 함수의 요약 버전은 다음과 같습니다.

func NewThing(name string) *Thing {
    return &Thing{name, 33}
}

포인터 반환이 바람직하지 않은 경우, 또 다른 옵션은 값을 직접 반환하는 makeThing 함수를 만드는 것입니다. :

func makeThing(name string) Thing {
    return Thing{name, 33}
}

이 접근 방식은 비교적 간단하고 포인터가 필요하지 않은 구조체에 적합합니다. Go에서 new 키워드가 메모리를 할당한다는 점은 주목할 가치가 있으므로 포인터 작업 시 메모리 관리 방식을 고려하는 것이 중요합니다.

위 내용은 기존 생성자 없이 Go에서 구조체를 어떻게 초기화할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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