golang 多返回值怎么返回错误

func abc(path string) ([]string,error){
    dir,err := ioutil.ReadDir(path)
    if err != nil {
        return err
    }
    ......
}

这个函数如果成功我想返回切片,失败我就返回ioutil.ReadDir的错误。我上面这种写法报错。应该怎么写呢???

pardon110
最佳答案

你应该这样写,函数返回值是两个,无论成败

func abc(path string) ([]string,error){
    dir,err := ioutil.ReadDir(path)
    if err != nil {
        return []string{}, err
    }
    ......
}

注意ReadDir 函数签名是如下,不是单纯的string

func ReadDir(dirname string) ([]os.FileInfo, error)
6个月前 评论
讨论数量: 5
pardon110

你应该这样写,函数返回值是两个,无论成败

func abc(path string) ([]string,error){
    dir,err := ioutil.ReadDir(path)
    if err != nil {
        return []string{}, err
    }
    ......
}

注意ReadDir 函数签名是如下,不是单纯的string

func ReadDir(dirname string) ([]os.FileInfo, error)
6个月前 评论
xianyunyehe
return nil,err
6个月前 评论
qIXbwU11 (楼主) 6个月前
qIXbwU11 (楼主) 6个月前
xianyunyehe (作者) 6个月前

可以试试命名返回值:

func abc(path string) (slice []string, err error){
    dir,err := ioutil.ReadDir(path)
    if err != nil {
      return
    }
    ......
}
5个月前 评论
func abc(path string) ([]os.FileInfo,error){
    return ioutil.ReadDir(path)
}

func main() {
    dirs, err := abc("tttt")
    if err!=nil {
       panic(err)
    }
    fmt.Println(dirs)
}
5个月前 评论

其实可以参考rust 封装下 :grin: 把带错误的返回值封装成结构体

file

1个月前 评论

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!