我有需要在 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
. 如果您想执行更多应该在任一结构上工作的操作,请考虑定义由每个结构实现的接口,并使用它来代替。
- 1 回答
- 0 关注
- 164 浏览
添加回答
举报
0/150
提交
取消