Saya punya peta:
var sessions = map[string] chan int{}
Bagaimana cara saya menghapus sessions[key]
? Saya mencoba:
sessions[key] = nil,false;
Itu tidak berhasil.
Pembaruan (November 2011):
Sintaks khusus untuk menghapus entri peta dihapus di Go versi 1 :
Pergi 1 akan menghapus peta tugas khusus dan memperkenalkan baru built-in fungsi,
delete
:delete(m, x)
akan menghapus entri peta diambil oleh ekspresim[x]
. ...
sessions["moo"] = sessions["moo"], false;
(? Atau yang salah)Disalin dari catatan rilis Go 1
Dalam bahasa lama, untuk menghapus entri dengan kunci
k
dari peta yang diwakili olehm
, seseorang menulis pernyataan,Sintaks ini adalah kasus khusus yang khas, satu-satunya tugas dua-ke-satu. Untuk itu diperlukan melewati nilai (biasanya diabaikan) yang dievaluasi tetapi dibuang, ditambah boolean yang hampir selalu bernilai false konstan. Itu melakukan pekerjaan tetapi aneh dan titik pertengkaran.
Dalam Go 1, sintaks itu telah hilang; alih-alih ada fungsi bawaan baru
delete
,. Panggilanakan menghapus entri peta yang diambil oleh ekspresi
m[k]
. Tidak ada nilai balik. Menghapus entri yang tidak ada adalah no-op.Memperbarui: Menjalankan
go fix
akan mengubah ekspresi formulirm[k] = value, false
menjadidelete(m, k)
ketika jelas bahwa nilai yang diabaikan dapat dengan aman dibuang dari program danfalse
mengacu pada konstanta boolean yang telah ditentukan. Alat perbaikan akan menandai penggunaan sintaks lain untuk diperiksa oleh programmer.sumber
Dari Go Efektif :
sumber
sessions.go:6: cannot use 0 (type int) as type chan int
assignment count mismatch: 1 = 2 (use delete)
Hari ini, tidak ada yang akan crash.
sumber
Gunakan
make (chan int)
sebagai gantinil
. Nilai pertama harus jenis yang sama dengan yang dipegang oleh peta Anda.PEMBARUAN: Memperbaiki jawaban saya.
sumber
sessions.go:6: cannot use 0 (type int) as type chan int
package main func main () {var sessions = map[string] chan int{};sessions["moo"] = make (chan int);}