cleaned := []interface{}{}
我怎样才能用 make() 做同样的事情?
例如,
package main
import (
"fmt"
)
func main() {
{
cleaned := []interface{}{}
fmt.Println(len(cleaned), cap(cleaned), cleaned)
}
// OR
{
cleaned := make([]interface{}, 0)
fmt.Println(len(cleaned), cap(cleaned), cleaned)
}
// OR
{
cleaned := make([]interface{}, 0, 0)
fmt.Println(len(cleaned), cap(cleaned), cleaned)
}
}
游乐场:https://play.golang.org/p/qndsxIKWjEp
输出:
0 0 []
0 0 []
0 0 []
参考:
The Go Programming Language Specification:Making slices, maps and channe
评论:jetbrains 抱怨说空切片声明通过
文字并建议用 var clean []interface{} 替换,但是
目前还不清楚为什么? ——奥列格赞德·丹曼
这是一个不同的问题。原因很清楚。
Go Code Review Comments : Declaring Empty Slices
当声明一个空切片时,首选
var t []string
结束
t := []string{}
前者声明一个 nil 切片值,而后者是非 nil 但
零长度。它们在功能上是等价的——它们的 len 和 cap 是
两者都为零——但 nil 切片是首选样式。
。 . .
例如,
package main
import (
"fmt"
)
func main() {
{
cleaned := []interface{}{}
fmt.Println(len(cleaned), cap(cleaned), cleaned, cleaned == nil)
}
// OR
{
cleaned := make([]interface{}, 0)
fmt.Println(len(cleaned), cap(cleaned), cleaned, cleaned == nil)
}
// OR
{
cleaned := make([]interface{}, 0, 0)
fmt.Println(len(cleaned), cap(cleaned), cleaned, cleaned == nil)
}
// OR
{
var cleaned []interface{}
fmt.Println(len(cleaned), cap(cleaned), cleaned, cleaned == nil)
}
}
游乐场:https://play.golang.org/p/9cZOOS2F9qI
输出:
0 0 [] false
0 0 [] false
0 0 [] false
0 0 [] true