首页 > 其他分享 >go yaml文件转化

go yaml文件转化

时间:2023-02-10 17:33:05浏览次数:29  
标签:return err nil 转化 yaml go data string

package yaml

import (
"bufio"
"bytes"
"io"
"path/filepath"
"strings"

fileutil "github.com/labring/sealos/pkg/utils/file"

"k8s.io/apimachinery/pkg/runtime"
utilyaml "k8s.io/apimachinery/pkg/util/yaml"
"sigs.k8s.io/yaml"
)

func Unmarshal(path string) (map[string]interface{}, error) {
metadata, err := fileutil.ReadAll(path)
if err != nil {
return nil, err
}
var data map[string]interface{}
err = yaml.Unmarshal(metadata, &data)
if err != nil {
return nil, err
}
return data, nil
}

func UnmarshalData(metadata []byte) (map[string]interface{}, error) {
var data map[string]interface{}
err := yaml.Unmarshal(metadata, &data)
if err != nil {
return nil, err
}
return data, nil
}

func ToJSON(bs []byte) (jsons []string) {
reader := bytes.NewReader(bs)
ext := runtime.RawExtension{}
d := utilyaml.NewYAMLOrJSONDecoder(reader, 4096)
for {
if err := d.Decode(&ext); err != nil {
if err == io.EOF {
break
}
break
}
jsons = append(jsons, string(ext.Raw))
}
return
}

func ToYalms(bs string) (yamls []string) {
buf := bytes.NewBuffer([]byte(bs))
reader := utilyaml.NewYAMLReader(bufio.NewReader(buf))
for {
patch, err := reader.Read()
if err != nil {
if err == io.EOF {
break
}
break
}
patch = bytes.TrimSpace(patch)
if len(patch) == 0 {
continue
}
yamls = append(yamls, string(patch))
}
return
}

func MarshalYamlToFile(file string, obj ...interface{}) error {
data, err := MarshalYamlConfigs(obj...)
if err != nil {
return err
}
return fileutil.WriteFile(file, data)
}

func UnmarshalYamlFromFile(file string, obj interface{}) error {
metadata, err := fileutil.ReadAll(file)
if err != nil {
return err
}
err = yaml.Unmarshal(metadata, obj)
if err != nil {
return err
}
return nil
}

func MarshalYamlConfigs(configs ...interface{}) ([]byte, error) {
var cfgs [][]byte
for _, cfg := range configs {
data, err := yaml.Marshal(cfg)
if err != nil {
return nil, err
}
cfgs = append(cfgs, data)
}
return bytes.Join(cfgs, []byte("\n---\n")), nil
}

func Matcher(path string) bool {
ext := strings.ToLower(filepath.Ext(path))
return ext == ".yaml" || ext == ".yml"
}

func ShowStructYaml(s interface{}) {
data, _ := yaml.Marshal(s)
println(string(data))

}

标签:return,err,nil,转化,yaml,go,data,string
From: https://www.cnblogs.com/cheyunhua/p/17109771.html

相关文章

  • Go使用协程批量获取数据,加快接口返回速度
    服务端经常需要返回一个列表,里面包含很多用户数据,常规做法当然是遍历然后读缓存。使用Go语言后,可以并发获取,极大提升效率。使用channelpackagemainimport("fmt"......
  • Go 语言指针
    Go语言指针Go语言中指针是很容易学习的,Go语言中使用指针可以更简单的执行一些任务。接下来让我们来一步步学习Go语言指针。我们都知道,变量是一种使用方便的占位符,......
  • Django 含有外键模型新增数据以及序列化
    https://www.cnblogs.com/SunshineKimi/p/14042914.htmlDjango原生实现外键classAppleModel(models.Model):id=models.AutoField(primary_key=True)app_name......
  • Go 语言变量作用域
    作用域为已声明标识符所表示的常量、类型、变量、函数或包在源代码中的作用范围。Go语言中变量可以在三个地方声明:函数内定义的变量称为局部变量函数外定义的变量称为......
  • Go 语言函数
    函数是基本的代码块,用于执行一个任务。Go语言最少有个main()函数。你可以通过函数来划分不同功能,逻辑上每个函数执行的是指定的任务。函数声明告诉了编译器函数的名......
  • GoJS:如何将背景图像添加到图表中
    GoJS:如何将背景图像添加到图表中phic 发布于2019-11-05 • 在 gojs • 最后更新2019-11-0518:23 • 18浏览我如何将一个背景图片添加到GoJS图表中?当我......
  • jsx中渲染报错 Invalid handler for event "input": got undefined
    原代码letdom=<el-dialogtitle="详细信息"visible={this.dialogshow}cancel:falsewidth="600px"><el-formmodel={this.ruleForm}rules={th......
  • Go GUI框架Fyne学习
    一.gcc安装去SourceForge下载gcc,选择x86_64-win32-sehhttps://sourceforge.net/projects/mingw-w64/files/解压后配置环境变量,路径替换成自己的,选择mingw64下的bin文件......
  • Django-ORM
    ORM由来让我们从O/R开始。字母O起源于"对象"(Object),而R则来自于"关系"(Relational)。几乎所有的软件开发过程中都会涉及到对象和关系数据库。在用户层面和业务逻辑层面,......
  • 数据同步gossip协议原理与应用场景介绍
    作者:京东物流冯鸿儒1简介Gossip是一种p2p的分布式协议。它的核心是在去中心化结构下,通过将信息部分传递,达到全集群的状态信息传播,传播的时间收敛在O(Log(N))以内,其中N是节......