golang yaml不全部解析 修改子节点
时间: 2023-10-03 11:04:05 浏览: 140
golang解析html网页的方法
如果您只需要解析 YAML 文件中的一部分,并修改其中的某些值,可以使用 Go 语言中的 yaml 包和 map[string]interface{} 类型。
以下是一个示例代码片段,假设我们要修改以下 YAML 文件的 "name" 字段:
```yaml
person:
info:
name: John
age: 30
```
```go
package main
import (
"fmt"
"io/ioutil"
"gopkg.in/yaml.v2"
)
func main() {
// 读取 YAML 文件
data, err := ioutil.ReadFile("person.yaml")
if err != nil {
panic(err)
}
// 解析 YAML 文件中的 person.info 字段为一个 map[string]interface{} 类型
var person map[string]interface{}
err = yaml.Unmarshal(data, &person)
if err != nil {
panic(err)
}
// 修改 person 字段中的 info.name 值
person["info"].(map[interface{}]interface{})["name"] = "Alice"
// 将修改后的数据写回到 YAML 文件
newData, err := yaml.Marshal(&person)
if err != nil {
panic(err)
}
err = ioutil.WriteFile("person.yaml", newData, 0644)
if err != nil {
panic(err)
}
fmt.Println("person.yaml 文件已更新!")
}
```
在这个示例中,我们首先使用 ioutil.ReadFile 函数读取 YAML 文件的内容,然后使用 yaml.Unmarshal 函数将其解析为一个 map[string]interface{} 类型。接着,我们修改该 map 中的 "name" 字段的值,然后使用 yaml.Marshal 函数将其转换回 YAML 格式的数据。最后,使用 ioutil.WriteFile 函数将修改后的数据写回到原始 YAML 文件中。
请注意,使用这种方法仅仅解析需要修改的部分,而不是将整个 YAML 文件都解析出来,这样可以提高程序的效率。另外,注意 "name" 字段在 YAML 文件中是在 "info" 字段下的,需要使用类型断言来获取该子节点的值。
阅读全文