从AWS Secret Manager获取字符串转YAML时Go解析报错求助
解决YAML解析报错:
yaml: line 11: could not find expected ':' 问题根源
你提供的YAML里有无效的转义双引号,直接导致解析器无法正确识别键值结构:
psql.auth字段末尾的\"属于错误转义,解析器会把它当作字符串的一部分,打乱了YAML的格式规则- 其他字段的
\"\"写法也不符合YAML规范,解析器无法识别这是空值
修正后的YAML
把多余的转义符去掉,空值直接用""表示即可:
psql: db: dev auth: postgres://localhost:5432 qldb: region: "" ledger: "" cognito: token_endpoint: "" issuer: "" login_url: ""
如果你的连接字符串确实需要包含双引号(比如特殊场景),可以用单引号包裹,或者在双引号内部正确转义:
# 用单引号包裹,内部双引号无需转义 psql: auth: 'postgres://localhost:5432"' # 或者用双引号内部转义双引号 psql: auth: "postgres://localhost:5432\""
代码修正建议
- 先确认从AWS Secret Manager拿到的
c字符串是正确的未转义YAML——可以先打印c的内容,看看是不是Secret Manager存储时自动加了转义符,这是常见坑点 - 你的代码片段存在语法错误,Viper的读取逻辑要放在
main函数内部,修正后:
func main() { c, err := Secretmanager.Getconfig() if err != nil { fmt.Println(err) return // 出错直接退出,避免后续无效执行 } viper.SetConfigType("yaml") err = viper.ReadConfig(strings.NewReader(c)) if err != nil { log.Panic("unable to load config", err) } // 这里写你使用配置的逻辑 }
内容的提问来源于stack exchange,提问作者nagaraj
相关产品推荐
相关产品推荐

