Как проверить слайс на пустоту

Существует несколько способов проверки слайса на пустоту. Выбор метода зависит от конкретной ситуации и того, что именно вы подразумеваете под "пустотой". Рассмотрим различные подходы.

1. Проверка длины слайса

Самый распространенный способ проверить, пустой ли слайс, — это проверить его длину с помощью функции `len`. Если длина слайса равна нулю, то слайс пустой.

```go
package main

import "fmt"

func main() {
    var slice1 []int // nil слайс
    slice2 := []int{} // Пустой слайс, но не nil
    slice3 := []int{1, 2, 3} // Непустой слайс

    fmt.Println("slice1 is empty:", len(slice1) == 0) // true
    fmt.Println("slice2 is empty:", len(slice2) == 0) // true
    fmt.Println("slice3 is empty:", len(slice3) == 0) // false
}
```

2. Проверка на `nil`

Иногда важно отличать `nil` слайс от пустого слайса с нулевой длиной. Для этого можно использовать сравнение с ним же.

```go
package main

import "fmt"

func main() {
    var slice1 []int // nil слайс
    slice2 := []int{} // Пустой слайс, но не nil

    fmt.Println("slice1 is nil:", slice1 == nil) // true
    fmt.Println("slice2 is nil:", slice2 == nil) // false
}
```

Комбинированная проверка

В некоторых случаях может потребоваться отличать `nil` слайс от пустого слайса и одновременно проверять, пустой ли он. Это можно сделать с помощью комбинации проверок `len` и сравнения с `nil`.

```go
package main

import "fmt"

func isEmpty(slice []int) bool {
    return slice == nil || len(slice) == 0
}

func main() {
    var slice1 []int // nil слайс
    slice2 := []int{} // Пустой слайс, но не nil
    slice3 := []int{1, 2, 3} // Непустой слайс

    fmt.Println("slice1 is empty:", isEmpty(slice1)) // true
    fmt.Println("slice2 is empty:", isEmpty(slice2)) // true
    fmt.Println("slice3 is empty:", isEmpty(slice3)) // false
}
```

Для проверки слайса на пустоту обычно используют `len(slice) == 0`. Для проверки, является ли слайс `nil`, используют `slice == nil`. Для комбинированной проверки можно использовать оба условия.

July 1, 2024, easyoffer

Примеры ответов: