Go语言map[string]any复合字面量换行错误求助
Go复合字面量换行警告及代码修复方案
- 复合字面量换行警告的直接解决
你遇到的Unexpected newline in composite literal警告,是因为map字面量中"second"字段的赋值语句后未添加逗号。Go对跨多行的复合字面量解析规则严格,即便最后一个元素,也建议加上结尾逗号,避免解析器误判换行逻辑。修改这一行:
"second": BuildJson(map[string]any{"child": "test"}), // 加上结尾逗号
- 代码中其他需修复的问题
除了警告,你的代码还有几处会导致编译或运行错误的问题:
- 函数参数缺失类型:
BuildJson函数的参数fields未声明类型,需明确为map[string]any:func BuildJson(fields map[string]any) *JsonNode { - 结构体字段未初始化:
JsonNode的fields是map类型,创建实例后需先初始化,否则直接赋值会触发panic:jn := &JsonNode{fields: make(map[string]interface{})} - 返回类型不匹配:函数声明返回
JsonNode,但实际返回指针*JsonNode,需统一类型(推荐用指针避免值拷贝):func BuildJson(fields map[string]any) *JsonNode { // ... return jn } - 打印格式错误:
fmt.Printf(json)缺少格式化占位符,用%+v才能正确打印结构体内容:fmt.Printf("%+v\n", json)
- 修复后的完整代码
package main import ( "fmt" ) type JsonNode struct { fields map[string]interface{} } func BuildJson(fields map[string]any) *JsonNode { jn := &JsonNode{fields: make(map[string]interface{})} for key, value := range fields { jn.fields[key] = value } return jn } func main() { json := BuildJson( map[string]any{ "first": 1, "second": BuildJson(map[string]any{"child": "test"}), }, ) fmt.Printf("%+v\n", json) }
内容的提问来源于stack exchange,提问作者tolga
相关产品推荐
相关产品推荐

