>백엔드 개발 >Golang >golang make와 new의 차이점

golang make와 new의 차이점

(*-*)浩
(*-*)浩원래의
2019-12-03 11:19:533089검색

golang make와 new의 차이점

make 및 새 작업

make는 내장 유형(맵, 슬라이스 및 채널)의 메모리 할당에 사용됩니다. new는 다양한 유형의 메모리 할당에 사용됩니다. (추천 학습: go)

내장 함수 new는 본질적으로 다른 언어의 같은 이름의 함수와 동일한 기능을 갖습니다. new(T)는 0 값으로 채워진 T 유형의 메모리 공간을 할당합니다. 그리고 해당 주소, 즉 *T 유형의 값을 반환합니다.

Go 용어에서는 T 유형의 새로 할당된 0 값에 대한 포인터를 반환합니다. 한 가지는 매우 중요합니다.

new返回指针。

내장 함수 make(T, args)에는 new(T)와 다른 함수가 있습니다. make는 슬라이스, 맵 및 채널만 생성하고 초기 값(0이 아닌 값)을 반환할 수 있습니다. ) *T가 아닌 T를 입력하세요. 기본적으로 이 세 가지 유형이 다른 점은 사용하기 전에 데이터 구조에 대한 참조를 초기화해야 한다는 것입니다.

예를 들어, 슬라이스는 데이터(내부 배열)에 대한 포인터, 길이 및 용량을 포함하는 세 가지 항목 설명자이며 이러한 항목이 초기화될 때까지 슬라이스는 nil입니다. 슬라이스, 맵 및 채널의 경우 make는 내부 데이터 구조를 초기화하고 적절한 값으로 채웁니다.

make返回初始化后的(非零)值。

코드 예:

var map1 map[string]string = make(map[string]string)
    fmt.Println(map1)
    fmt.Println(map1 == nil)

    var map2 *map[string]string = new(map[string]string)
    fmt.Println(map2)
    fmt.Println(map2 == nil)
    fmt.Println(*map2)
    fmt.Println(*map2 == nil)
    //    var map1 map[string]string
    map1["aaa"] = "AAA"
    map1["bbb"] = "BBB"
    map1["ccc"] = "CCC"
    fmt.Println(map1)
    fmt.Println(len(map1))

출력:

map[]
false
&map[]
false
map[]
true
map[bbb:BBB ccc:CCC aaa:AAA]
Success: process exited with code 0.

위 내용은 golang make와 new의 차이점의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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