这很可能源于对 go 中的 interface{} 的误解。{} 我有以下代码
type Configuration struct {
Username string
}
func loadJson(jsonStr []byte, x *Configuration}) {
json.Unmarshal(jsonStr, x)
}
func main() {
//var config *Configuration
config := new(Configuration)
file, e := ioutil.ReadFile("config.json")
loadJson(file, config)
fmt.Printf("%s\n", config.Username)
}
它将 json 配置加载到 config 变量中。我想让 loadJson 函数更抽象并接受任何结构。我认为最好的方法是接受 a *interface{},但是在更改 loadJson 签名时出现以下错误。
./issue.go:30: cannot use config (type *Configuration) as type *interface {} in argument to loadJson:
*interface {} is pointer to interface, not interface
而是加载 json 应该是这个
func loadJson(jsonStr []byte, x interface{}}) {
json.Unmarshal(jsonStr, x)
}
interface{} 已经是一个指针了吗?此外,错误消息对我来说没有意义,配置不是指向接口的指针吗?此外,如果我更改json.Unmarshal(jsonStr, x)为json.Unmarshal(jsonStr, &x)它仍然可以正常工作。这里发生了什么可以让它发挥作用?
附带问题但与指针相关,为什么我不能像注释掉的行(在 main 下)声明一个指针?
慕少森
qq_遁去的一_1
相关分类