답변:
이상하게도
package main
func main () {
var sessions = map[string] chan int{};
delete(sessions, "moo");
}
작동하는 것 같습니다. 그래도 자원을 제대로 사용하지 않는 것 같습니다!
다른 방법은 존재를 확인하고 값 자체를 사용하는 것입니다.
package main
func main () {
var sessions = map[string] chan int{};
sessions["moo"] = make (chan int);
_, ok := sessions["moo"];
if ok {
delete(sessions, "moo");
}
}
옛 언어로, 키를 사용하여 항목을 삭제 k
로 표시지도에서 m
, 하나는, 문을 썼다
m[k] = value, false
이 구문은 유일무이 한 2 대 1 과제 인 특별한 경우입니다. 평가되었지만 폐기 된 값 (보통 무시되는 값)과 거의 항상 상수 인 부울 값을 전달해야했습니다. 그것은 일을했지만 이상하고 논쟁의 포인트였습니다.
Go 1에서는 그 구문이 사라졌습니다. 대신 새로운 내장 함수 인 delete
. 호출
delete(m, k)
식으로 검색된 맵 항목을 삭제합니다 m[k]
. 반환 값이 없습니다. 존재하지 않는 항목을 삭제하면 아무런 문제가 없습니다.
업데이트 : 실행 go fix
형태의 표현으로 변환됩니다 m[k] = value, false
으로 delete(m, k)
는 무시 값이 안전하게 프로그램에서 폐기 될 수 있다는 것을 분명 할 때 false
미리 정의 된 부울 상수를 의미한다. 수정 도구는 프로그래머가 검사 할 다른 구문 사용을 표시합니다.
에서 효과적인 이동 :
맵 항목을 삭제하려면 인수가 맵 및 삭제 될 키인 내장 함수 삭제 기능을 사용하십시오. 키가 이미지도에없는 경우에도이 작업을 수행하는 것이 안전합니다.
delete(timeZone, "PDT") // Now on Standard Time
assignment count mismatch: 1 = 2 (use delete)
delete(sessions, "anykey")
요즘에는 아무것도 부서지지 않을 것입니다.
make (chan int)
대신에 사용하십시오 nil
. 첫 번째 값은지도와 동일한 유형이어야합니다.
package main
import "fmt"
func main() {
var sessions = map[string] chan int{}
sessions["somekey"] = make(chan int)
fmt.Printf ("%d\n", len(sessions)) // 1
// Remove somekey's value from sessions
delete(sessions, "somekey")
fmt.Printf ("%d\n", len(sessions)) // 0
}
업데이트 : 내 대답을 수정했습니다.
package main func main () {var sessions = map[string] chan int{};sessions["moo"] = make (chan int);}
sessions["moo"] = sessions["moo"], false;
(? 그 잘못이있다거나)