이 글에서는 GO 언어에서 데이터 구조를 초기화하는 방법을 소개하겠습니다. GO에서는 데이터 구조를 초기화하는 2가지 키워드를 제공하여 어떻게 사용하는지 살펴보겠습니다~ 모두에게 도움이 되길 바랍니다.
GO는 데이터 구조를 초기화하기 위해 2개의 키워드를 제공합니다
하지만 때로는 중괄호를 사용하여 직접 초기화하기도 합니다. 예:
name := []string{"xiaomotong","bob","marry"}
위 상황에서 값은 초기화 중에 채워야 할 데이터가 명확하게 정의되어 있습니다. 그러나 대부분의 경우 직장에서는 초기화 중에 데이터를 알 수 없습니다. . 메소드
make는 내장 데이터 구조를 초기화하는 데 주로 사용됩니다. make로 초기화할 수 있는 데이터 유형은 다음과 같습니다.
슬라이스를 초기화하고 이 두 값 외에 len 값과 cap 값을 채웁니다. 슬라이스의 기본 데이터 구조에는 기본 배열에 대한 포인터도 있습니다.
strs := make([]string, 0, 10)myMap := make(map[string]string, 10)ch := make(chan struct{}, 10)
3가지 유형의 생성 및 초기화를 지원합니다.
설명에 따르면 make
의 반환 값 유형이 채워진 매개 변수의 유형과 일치한다는 것을 알 수 있습니다. 슬라이스 유형을 채우면 반환 값은 다른 유형의 해당 반환 값을 채우는 것도 우리가 기대하는 것입니다. 유형에는 아무런 문제가 없습니다new
Careful Fat Fish는 앞에서 언급한 것처럼 make가 golang에서 제공하는 내장 데이터 구조를 초기화하는 데만 적합하다는 것을 알 수 있습니다. 사용자 정의 데이터 구조의 경우 아직 new
을 사용하면 됩니다. care of thingsnew로 데이터 구조를 초기화하는 것은 다음과 같이 작성할 수 있습니다:
2명의 멤버, 나이, 이름으로 구조를 사용자 정의합니다.
type T struct{ age int name string}func main(){ t := new(T) fmt.Println("t.name == ",t.name) fmt.Println("t.age == ",t.age)}
# go run main.got.name ==t.age == 0물론 데이터 구조가 초기화되었지만 데이터는 모두 0 값입니다.
물론 다음과 같이 작성할 수도 있습니다.
func main(){ a := new(int) fmt.Println("a == ",a) fmt.Println("*a == ",*a)}
프로그램 실행 효과
# go run main.goa == 0xc420018078 *a == 0프로그램 실행 결과에 따르면 new는 포인터를 반환하고 이 포인터가 가리키는 메모리 주소의 해당 값은 이 유형의 0값
임을 알 수 있습니다. 새로운 소스코드 설명
golang 소스코드에 따르면 new 첫 번째 매개변수는 값이 아닌 데이터 타입이고, new
의 반환값은 매개변수에 따라 값이 0인 메모리를 할당하는 포인터이다. type따라서 위에서 본 new 의 데이터 구조, 인쇄된 데이터는 모두 해당 타입의 0 값입니다
make 와 new 의 차이점
마지막으로 make 와 make 의 차이점을 정리해 보겠습니다. new는 깊은 인상을 줍니다 make는 내장 데이터 유형을 초기화하는 데에만 사용할 수 있습니다map
*Type
유형인 포인터를 반환합니다. 【관련 추천:위 내용은 GO의 데이터 구조를 초기화하는 방법에 대해 이야기해 보겠습니다. (코드 예제 포함)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!