英文:
Can you delete keys from a map in Golang using a variable that contains the name of the key instead of the key in quotations?
问题
这是我的代码:
package main
import "fmt"
var map1 = make(map[string]string)
func main() {
deleteItem()
}
func deleteItem() {
fmt.Println("输入要删除的键:")
var key2 string
fmt.Scanln(&key2)
fmt.Println(map1)
for index := range map1 {
if index == key2 {
delete(map1, index)
fmt.Println(map1)
}
}
}
这是错误信息:
go:95:9: 调用 delete 时参数过多
已有 (map[string]string, string)
需要 ()
我试图创建一个地图,程序可以根据用户输入删除项目,但似乎无法将变量作为参数传递给 delete() 函数。有没有办法解决这个问题?
英文:
This is my code:
package main
import "fmt"
var map1 = make(map[string]string)
func main() {
delete()
}
func delete() {
fmt.Println("Enter key to be deleted: ")
var key2 string
fmt.Scanln(&key2)
fmt.Println(map1)
for index, element := range map1 {
if index == key2 {
delete(map1, index)
fmt.Println(map1)
}
}
}
This is the error message
go:95:9: too many arguments in call to delete
have (map[string]string, string)
want ()
I'm trying to create a map where the program can delete items upon user input but it doesn't seem like I can pass a variable as an argument to the delete() function.
Is there any way to get around this?
答案1
得分: 3
你将函数命名为delete,因此在函数内部,你遮蔽了内置的delete()函数,并且使用它将引用你的delete()函数。请将其重命名。
另外请注意,为了实现你想要的效果,你不需要使用循环,只需使用delete(map1, key2):
func remove() {
fmt.Println("Enter key to be deleted: ")
var key2 string
fmt.Scanln(&key2)
fmt.Println(map1)
delete(map1, key2)
fmt.Println(map1)
}
英文:
You named your function delete, so inside it you shadow the builtin delete() function, and using it will refer to your delete() function. Rename it.
Also note that to achieve what you want, you don't need a loop, just use delete(map1, key2):
func remove() {
fmt.Println("Enter key to be deleted: ")
var key2 string
fmt.Scanln(&key2)
fmt.Println(map1)
delete(map1, key2)
fmt.Println(map1)
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。


评论