为了账号安全,请及时绑定邮箱和手机立即绑定

特定于体系结构的结构的通用变量

特定于体系结构的结构的通用变量

Go
子衿沉夜 2021-08-30 15:15:44
我有需要在 mips 和 x86 上运行的代码。为了方便起见,我实现的功能使用相同的名称,并在mylib_x86.go和mylib_mips.go和也得到了代码来构建和工作两个平台上。下面是一些代码片段,用于显示我的结构的布局。为了进一步优化我的代码,我为每个平台声明了单独的结构 common.go// lib/common.go:// Struct for mipstype MipsData struct {        var1 string        var2 string        var3    string}// Struct for x86type X86Data struct {        var2 string        var3    string}我想通过查询来声明架构的相关结构runtime.GOARCH,main()但变量的范围data仅限于每个块,从而导致编译器错误,如下所示:error: reference to undefined name 'data'import "lib"import "strings"import "runtime"func main() {    if strings.HasPrefix(runtime.GOPATH, "mips") {        data := common.MipsData{            var1: "Mips",            var2: "Something",            var3: "Else",        }    } else if strings.HasPrefix(runtime.GOPATH, "amd64") {        data := common.X86Data{            var2: "Something",            var3: "Else",        }    }    text, err := json.MarshalIndent(data, "", "  ")    // Write text to a file.}是否可以定义data为通用数据类型main()以克服编译错误?有没有其他有效的方法来解决这个问题?
查看完整描述

1 回答

?
慕无忌1623718

TA贡献1744条经验 获得超4个赞

如果您只是想将这些结构体传递给json.MarshalIndent,简单的解决方案是在 if 语句外按如下方式声明变量:

var data interface{}

它将能够存储任一结构体,并且是json.MarshalIndent. 如果您想执行更多应该在任一结构上工作的操作,请考虑定义由每个结构实现的接口,并使用它来代替。


查看完整回答
反对 回复 2021-08-30
  • 1 回答
  • 0 关注
  • 164 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信