Go语言跨包调用struct报错问题求助
解决Go中跨包使用结构体切片的初始化问题
嘿,我来帮你搞定这个小问题!你遇到的错误都是因为跨包后切片类型的语法使用不对,咱们一步步理清楚:
错误原因分析
第一个错误
cannot use models.require as type []Require:
你写的models.Requires{{Name: "db"}}其实是创建了一个单个models.Requires结构体实例,但你的字段需要的是[]Requires(切片类型),类型不匹配自然报错。第二个错误
use of package without selector:models.[]Requires是完全错误的Go语法——包名后面只能跟包内的类型、函数等标识符,不能直接跟切片符号[],Go编译器根本识别不了这种写法。
正确写法
跨包使用结构体切片时,切片的类型应该是[]models.Requires(把包名加在结构体类型前面,放在切片符号内部),初始化方式和你在当前包时的逻辑完全一致:
Requires: []models.Requires{ { Name: "db", } }
简单解释一下
当结构体在当前包时,你用[]Requires表示当前包下Requires类型的切片;移到models包后,结构体的完整类型是models.Requires,所以对应的切片类型就是[]models.Requires,按照这个类型来初始化切片就没问题了。
内容的提问来源于stack exchange,提问作者user9528667
相关产品推荐
相关产品推荐

