gpt4 book ai didi

go - 使变量接受多种类型

转载 作者:数据小太阳 更新时间:2023-10-29 03:07:22 26 4
gpt4 key购买 nike

我想在 Go 中开发一个库,它使用 Go 标准包 (http://golang.org/pkg/debug/) 中调试包的不同文件格式。这个想法是打开一个文件并打印出关于该文件的信息。现在我想通过测试所有相关文件类型来自动识别正确的文件格式。例如,为了测试一个文件是简单的 Mach-O 还是胖 Mach-O 文件,我试图用两种打开方法打开文件:

  file, err := macho.Open(filename)
if err != nil {
fmt.Println("Not an Mach-O file.")
}
file, err = macho.OpenFat(filename)
if err != nil {
fmt.Println("Not an fat Mach-O file. Exiting.")
return
}

不幸的是,文件变量(当然)进行了类型检查,我收到以下错误:

cannot assign *macho.FatFile to file (type *macho.File) in multiple assignment

我什至不确定这是解决这个问题的正确方法。任何人都可以指出如何正确执行此操作的正确方向吗?

最佳答案

或者根本不声明文件,如果你不打算对它做任何事情的话。

if _, err := macho.Open(filename); err != nil {
fmt.Println("Not an Mach-O file.")
}
if _, err = macho.OpenFat(filename); err != nil {
fmt.Println("Not an fat Mach-O file. Exiting.")
return
}

如果你真的想在 File 上调用一些函数,那么你可以用你想调用的函数声明它的接口(interface)类型,然后你可以这样说:

var file io.Closer
file, err := macho.Open(filename)
if err != nil {
fmt.Println("Not an Mach-O file.")
}
file, err = macho.OpenFat(filename)
if err != nil {
fmt.Println("Not an fat Mach-O file. Exiting.")
return
}
file.Close()

在这种情况下,它并不那么有趣,因为它看起来像 macho.File 和 macho.FatFile 唯一的通用函数是 Close()

关于go - 使变量接受多种类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25950701/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com