回答:
不思議なことに、
package main
func main () {
    var sessions = map[string] chan int{};
    delete(sessions, "moo");
}動作するようです。ただし、これはリソースの使用が不十分なようです!
もう1つの方法は、存在を確認し、値自体を使用することです。
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の割り当てです。評価されて破棄される値(通常は無視されます)と、ほぼ常に定数falseであるブール値を渡す必要がありました。それは仕事をしましたが、奇妙で、論争のポイントでした。
Go 1では、その構文はなくなりました。代わりに、新しい組み込み関数がありdeleteます。呼び出し
delete(m, k)式によって取得されたマップエントリを削除しますm[k]。戻り値はありません。存在しないエントリを削除しても何も起こりません。
更新:実行go fix形式の表現に変換されますm[k] = value, falseにdelete(m, k)、無視された値が安全プログラムから破棄し、できることは明らかであるとき、false事前定義ブール定数を指します。修正ツールは、プログラマーによる検査のために構文の他の使用にフラグを立てます。
効果的なGoから:
マップエントリを削除するには、削除する組み込みの関数を使用します。この関数の引数は、マップと削除するキーです。キーがすでにマップに存在しない場合でも、これを実行しても安全です。
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;