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

我有需要在 mips 和 x86 上运行的代码。为了方便起见,我实现的功能使用相同的名称,并在mylib_x86.go和mylib_mips.go和也得到了代码来构建和工作两个平台上。下面是一些代码片段,用于显示我的结构的布局。


为了进一步优化我的代码,我为每个平台声明了单独的结构 common.go


// lib/common.go:


// Struct for mips

type MipsData struct {

        var1 string

        var2 string

        var3    string

}


// Struct for x86

type 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()以克服编译错误?有没有其他有效的方法来解决这个问题?


子衿沉夜
浏览 165回答 1
1回答

慕无忌1623718

如果您只是想将这些结构体传递给json.MarshalIndent,简单的解决方案是在 if 语句外按如下方式声明变量:var data interface{}它将能够存储任一结构体,并且是json.MarshalIndent. 如果您想执行更多应该在任一结构上工作的操作,请考虑定义由每个结构实现的接口,并使用它来代替。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go