>백엔드 개발 >Golang >golang 맵에는 make가 필요합니까?

golang 맵에는 make가 필요합니까?

(*-*)浩
(*-*)浩원래의
2019-12-17 10:04:179144검색

golang 맵에는 make가 필요합니까?

map

다른 언어의 해시 테이블이나 사전과 유사하게 데이터는 키-값 형식으로 저장됩니다(권장 학습: go)

key는 == 또는 != 비교 연산을 지원해야 합니다. 유형은 함수, 맵 또는 슬라이스일 수 없습니다.

키로 값을 검색하는 맵은 선형 검색보다 훨씬 빠릅니다.

맵은 make()를 사용하여 생성되며 :=

make([keyType]valueType의 약어를 지원합니다. ,cap ), cap은 용량을 나타내며 생략 가능

용량을 초과하면 자동으로 확장되지만 합리적인 초기값을 제공하도록 노력하세요

len()을 사용하여 요소 수를 가져옵니다

자동으로 키 추가- 값 쌍이 없으면 delete()를 사용하세요. 키-값 쌍을 삭제하세요

맵과 슬라이스를 반복하려면 범위에 사용하세요

맵의 선언과 기본값

// 声明
var m map[string]string
 
// bool 的零值是false
var m map[int]bool 
a, ok := m[1]
fmt.Println(a, ok) // false  false
 
// int 的零值是0
var m map[int]int 
a, ok := m[1]
fmt.Println(a, ok) // 0  false

맵이 선언되면 기본값 value는 nil입니다. 이때 값을 가져와 해당 유형을 반환합니다. 0 값(존재하지 않으면 0 값이 반환됨)

// 先声明map
var m1 map[string]string
// 再使用make函数创建一个非nil的map,nil map不能赋值
m1 = make(map[string]string)
// 最后给已声明的map赋值
m1["a"] = "aa"
m1["b"] = "bb"
 
// 直接创建
m2 := make(map[string]string)
// 然后赋值
m2["a"] = "aa"
m2["b"] = "bb"
 
// 初始化 + 赋值一体化
m3 := map[string]string{
    "a": "aa",
    "b": "bb",
}
 
// ==========================================
// 查找键值是否存在
if v, ok := m1["a"]; ok {
    fmt.Println(v)
} else {
    fmt.Println("Key Not Found")
}
 
// 遍历map
for k, v := range m1 {
    fmt.Println(k, v)
}
 
m := make(map[interface{} ]interface{})
m[1] = 56
m["str"] = "dfsdf"
fmt.Println(m)

map 데이터 유형 초기화:

두 가지 방법: map[string ]string{} 또는 make(map[string]string)

초기화되지 않은 맵은 nil입니다.

초기화되지 않은 맵은 nil입니다. 이는 기본적으로 빈 맵과 동일합니다. 단, nil 맵은 값 추가를 허용하지 않습니다. 그것에. (nil 맵은 요소를 추가할 수 없다는 점을 제외하면 빈 맵과 동일합니다.)

따라서 맵이 nil인 경우 값을 얻을 때 오류가 보고되지 않지만(단지 사용할 수 없음) 오류가 발생합니다. 값이 추가되면 보고됩니다.

실제로 또 다른 차이점이 있습니다. nil 맵을 삭제하면 패닉이 발생하지만, 빈 맵을 삭제하면 아무 작업도 수행할 수 없습니다(패닉도 발생하지 않습니다). (이 차이점은 최신 Go 팁에서는 더 이상 존재하지 않습니다. 즉, nil 삭제 map도 패닉 상태가 됩니다) 패닉이 발생하지 않습니다)

fmt를 통해 지도를 인쇄할 때 빈 맵과 nil 맵의 결과는 동일합니다.

fmt를 통해 지도를 인쇄할 때 빈 맵과 nil 맵의 결과는 동일합니다. 둘 다 map[]입니다. 따라서 이때는 map이 비어 있는지 nil인지 판단하지 않고 map == nil로 판단한다.

Request의 Form 필드에 대한 경우입니다. ParseForm()이 직접 또는 간접적으로 호출되지 않으면 Form은 실제로 nil입니다. 그러나 출력하지만 map[]인 경우 약간 혼란스러울 수 있습니다. . 소스 코드를 추적해 보면 Form이 전혀 초기화되지 않은 것을 알 수 있습니다.

FormValue() 메서드에서는 Form이 nil인지 판단한 후 ParseForm() 메서드를 호출할지 여부를 결정합니다. 물론 ParseForm() 메서드를 수동으로 호출할 수도 있습니다

위 내용은 golang 맵에는 make가 필요합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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