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)
4年前 评论
讨论数量: 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)
4年前 评论
xianyunyehe
return nil,err
4年前 评论
qIXbwU11 (楼主) 4年前
qIXbwU11 (楼主) 4年前
xianyunyehe (作者) 4年前

可以试试命名返回值:

func abc(path string) (slice []string, err error){
    dir,err := ioutil.ReadDir(path)
    if err != nil {
      return
    }
    ......
}
4年前 评论
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)
}
4年前 评论

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

file

3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!