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 []
Ссылка:
Спецификация Go языка программирования n: Создание ломтиков , maps and channe
Комментарий: jetbrains жалуется и говорит пустое объявление среза через литерал и предлагает заменить его на var cleaned [] interface {}, но неясно, почему? - Олегзандр Денман
Это другой вопрос. Причина ясна.
Go Комментарии к обзору кода : Объявление пустых фрагментов
При объявлении пустого фрагмента предпочитайте
var t []string
over
t := []string{}
Первый объявляет нулевое значение среза, а второй не ноль, но нулевой длины. Они функционально эквивалентны - их 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