为什么Golang在url.Values中使用字符串切片,而不是单个字符串?[已关闭]

k7fdbhmy  于 2023-09-28  发布在  Go
关注(0)|答案(1)|浏览(126)

已关闭此问题为not reproducible or was caused by typos。它目前不接受回答。

此问题是由打印错误或无法再重现的问题引起的。虽然类似的问题可能是on-topic在这里,这一个是解决的方式不太可能帮助未来的读者。
29天前关闭
Improve this question
在Golang中,为什么url.Values使用字符串slice作为值:

type Values map[string][]string

而不是单个字符串:

type Values map[string]string

使用单字符串不是更简单吗?在这方面是否有更多的考虑?

hi3rlvi2

hi3rlvi21#

类型url.Values表示查询中使用的一个 common syntax。这个约定的问题在于它从来没有完全形式化为一个规范。
RFC 1738中的“统一资源定位符(URL)”在“HTTP”子节3.3中没有提及。“URI通用语法”RFC 3986指出“......因为查询组件通常用于以“key=value”的形式携带标识信息......”这几乎没有任何意义。“HTTP/1.1”RFC 2616和后续完全跳过了这个主题。
因此,查询参数使用多个值,甚至根本没有值,即?a&b=1&c=2&c=3被大多数人容忍。
Go语言的Get gets the first value associated with the given key.可能会导致复杂的行为,有利于更可读的代码。出于安全性和可靠性的考虑,我建议为多个值触发一个错误案例。如果您确实需要一行程序,那么至少在url.Valuesx 1 m5n1x上执行strings.Join(q[key], ""),以获得一些一致的结果。

相关问题