检查指针是否指向空切片

问题描述 投票:0回答:1

我有一个获取指向任何切片的指针的函数,并且所述参数的类型为interface{}

我需要确保指针没有指向nil切片。

package main

import (
    "fmt"
)

type Dog struct {
    Name string
    Age  int
}

func main() {
    var slicePointer interface{}

    // We only want slices that were initialized with `make()`.
    dogs1 := make([]Dog, 0)
    fmt.Println("dogs1 == nil:", dogs1 == nil)

    slicePointer = &dogs1
    fmt.Println("slicePointer == nil:", slicePointer == nil)

    fmt.Println("-----")

    // This needs to be caught, as the slice is `nil`.
    var dogs2 []Dog
    fmt.Println("dogs2 == nil:", dogs2 == nil)

    slicePointer = &dogs2
    fmt.Println("slicePointer == nil:", slicePointer == nil)
}

输出:

dogs1 == nil: false
slicePointer == nil: false
-----
dogs2 == nil: true
slicePointer == nil: false   

有没有办法在Golang中进行这种检查?

pointers go null slice
1个回答
1
投票

您可以通过反射来判断非nil接口是否具有nil-pointer值:

fmt.Println(reflect.ValueOf(slicePointer).Elem().IsNil())

最安全的方法:

  if slicePointer!=nil {
    v:=reflect.ValueOf(slicePointer)
    if v.Kind()==reflect.Ptr {
      fmt.Println(v.Elem().IsNil())
    }
  }
© www.soinside.com 2019 - 2024. All rights reserved.