gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 02:05:44 26 4
gpt4 key购买 nike

我有需要在 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被限制在每个 block 中,从而导致这样的编译器错误: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() 中的通用数据类型克服编译错误?有没有其他有效的方法来解决这个问题?

谢谢

最佳答案

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

var data interface{}

它将能够存储任一结构,并且是 json.MarshalIndent 所期望的类型。如果您想执行更多应该在任一结构上工作的操作,请考虑定义一个由每个结构实现的接口(interface),然后改用它。

关于go - 特定于体系结构的结构的通用变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26941980/

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