Go语言如何在其他包设置struct并传递回其定义的原始包使用
问题修复说明
- 跨包访问权限错误:Go 仅首字母大写的标识符支持跨包访问,
router包中Config结构体的some字段为小写,属于包私有成员,main包无法直接赋值,编译会直接报错。 - 结构体初始化语法错误:
main.go中结构体字面量赋值应使用冒号:而非等号=,正确写法为Some: true。 - 实例访问逻辑错误:
router.go的Sending函数中错误使用类型名Config访问字段,应使用传入的实例变量class访问,写法为class.some。
修复后代码
router.go
package router import ( "log" ) type Config struct { Some bool // 首字母大写,开放跨包访问权限 } func Sending(class Config){ if class.Some{ // 通过实例访问字段 log.Println("it worked") } }
main.go
package main import ( "router" ) func main() { cfg := router.Config{ Some: true // 使用正确的初始化语法 } router.Sending(cfg) }
可选优化:如果不希望对外暴露
Config的内部字段,可在router包中新增构造方法完成初始化,无需修改字段可见性:// router.go 新增构造函数 func NewConfig(some bool) Config { return Config{some: some} } // main.go 调用方式调整 cfg := router.NewConfig(true)
内容的提问来源于stack exchange,提问作者Espen Johnsen
相关产品推荐
相关产品推荐

