最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Golang解析yaml文件的方法小結(jié)

 更新時(shí)間:2024年11月01日 09:19:11   作者:心恩惠動(dòng)  
Go 語言沒有內(nèi)置解析 yaml 文件的功能,實(shí)現(xiàn) yaml 的解析可以使用第三方庫,下面我們就來看看如何使用opkg.in/yaml.v2 和 gopkg.in/yaml.v3實(shí)現(xiàn)解析yaml吧

yaml 文件是目前最常用的配置文件,使用go語言編寫代碼和工具時(shí),也會(huì)用到y(tǒng)aml文件,將服務(wù)配置及中間件等信息定義到y(tǒng)aml文件中,后續(xù)可根據(jù)實(shí)際場景來選用。

//先下載外部包
go get -u gopkg.in/yaml.v2

1、定義yaml配置文件

conf/test.yaml

ck:
  host: 11.11.11.11
  port: 9001
  database: db2
  username: test2
  password: 123ck456
user: test
password: 123yy456
host: 10.10.10.10
port: 3306
dbname: db1

2、主程序

package main

import (
    "database/sql"
    "fmt"
    "gopkg.in/yaml.v3"
    "io/ioutil"
    "time"
)

type Conn struct {
    Ck struct {
        Host     string `yaml:"host"`
        Port     string `yaml:"port"`
        Database string `yaml:"database"`
        Username string `yaml:"username"`
        Password string `yaml:"password"`
    }
}
type Mysql struct {
    User     string `yaml:"user"`
    Password string `yaml:"password"`
    Host     string `yaml:"host"`
    Port     string `yaml:"port"`
    DBname   string `yaml:"dbname"`
}

const cfgFile = "conf/test.yaml"

func main() {
    data, err := ioutil.ReadFile(cfgFile)  //讀取配置文件的路徑
    if err != nil {
        fmt.Printf("err: %v\n", err)
        return
    }

    var conf Conn
    if err := yaml.Unmarshal(data, &conf); err != nil {  //將yaml文件中的信息反序列化給conf結(jié)構(gòu)體
        fmt.Printf("err: %v\n", err)
        return
    }
    yml, _ := yaml.Marshal(conf)  //序列化為yaml文件
    fmt.Printf("conf: %#v\n", conf)
    fmt.Printf("%s\n", yml)

    var confs Mysql
    if err := yaml.Unmarshal(data, &confs); err != nil {
        fmt.Printf("err: %v\n", err)
        return
    }
    yaml, _ := yaml.Marshal(confs)
    fmt.Printf("conf: %#v\n", confs)
    fmt.Printf("%s\n", yaml)

    //連接數(shù)據(jù)庫
    user := confs.User
    password := confs.Password
    host := confs.Host
    port := confs.Port
    database := confs.DBname
    dataSourceName := user + ":" + password + "@tcp(" + host + ":" + port + ")/" + database + "?charset=utf8&parseTime=True"
    conn, err := sql.Open("mysql", dataSourceName)
    if err != nil {
        return
    }
    conn.SetConnMaxLifetime(time.Minute * 30)     //最大連接超時(shí)時(shí)間,應(yīng)小于數(shù)據(jù)庫本身的鏈接超時(shí)時(shí)間
    conn.SetMaxIdleConns(10)                  //最大閑置連接數(shù)(并發(fā)時(shí)可以同時(shí)獲取的連接,也是用完后放回池里面的互用的連接, 從而提升性能)
    conn.SetMaxOpenConns(100)                 //最大打開連接數(shù),0為不限制

    //記得結(jié)束后關(guān)閉連接
    defer conn.Close()
}

3、輸出結(jié)果

conf: main.Conn{Ck:struct { Host string "yaml:\"host\""; Port string "yaml:\"por
t\""; Database string "yaml:\"database\""; Username string "yaml:\"username\"";
Password string "yaml:\"password\"" }{Host:"11.11.11.11", Port:"9001", Database:
"db2", Username:"test2", Password:"123ck456"}}
ck:
    host: 11.11.11.11
    port: "9001"
    database: db2
    username: test2
    password: 123ck456

conf: main.Mysql{User:"test", Password:"123yy456", Host:"10.10.10.10", Port:"330
6", DBname:"db1"}
user: test
password: 123yy456
host: 10.10.10.10
port: "3306"
dbname: db1

4、補(bǔ)充

4.1 已棄用 'ReadFile'

從 Go 語言 1.16 開始,ioutil.ReadAll、ioutil.ReadFile 和 ioutil.ReadDir 被棄用,因?yàn)?io/ioutil 包被棄用。

解決方法如下,使用 io 或 os 包中相同的方法替換,即修改自己按如下參照修改包名即可

ioutil.ReadAll -> io.ReadAll
    ioutil.ReadFile -> os.ReadFile
    ioutil.ReadDir -> os.ReadDir
    // others
    ioutil.NopCloser -> io.NopCloser
    ioutil.ReadDir -> os.ReadDir
    ioutil.TempDir -> os.MkdirTemp
    ioutil.TempFile -> os.CreateTemp
    ioutil.WriteFile -> os.WriteFile

 4.2 yaml文件里的變量命名規(guī)則

yaml文件里的變量需全用小寫字母。使用大寫字母、中劃線、下劃線等,如 CK: 127.1.1.1 mySQL : xxx Myql : xxx my_sql : xxx 會(huì)在解讀yaml配置文件時(shí)出問題,解讀出來是空值,且不會(huì)報(bào)錯(cuò)

到此這篇關(guān)于Golang解析yaml文件的方法小結(jié)的文章就介紹到這了,更多相關(guān)Go解析yaml內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家

相關(guān)文章

  • 手把手教你如何在Goland中創(chuàng)建和運(yùn)行項(xiàng)目

    手把手教你如何在Goland中創(chuàng)建和運(yùn)行項(xiàng)目

    歡迎來到本指南!我們將手把手地教您在Goland中如何創(chuàng)建、配置并運(yùn)行項(xiàng)目,通過簡單的步驟,您將迅速上手這款強(qiáng)大的集成開發(fā)環(huán)境(IDE),輕松實(shí)現(xiàn)您的編程夢想,讓我們一起開啟這段精彩的旅程吧!
    2024-02-02
  • Go中make函數(shù)和append函數(shù)的作用詳解

    Go中make函數(shù)和append函數(shù)的作用詳解

    本文給大家介紹Go中make函數(shù)和append函數(shù)的作用詳解,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2025-10-10
  • Go Resiliency庫中timeout實(shí)現(xiàn)原理及源碼解析

    Go Resiliency庫中timeout實(shí)現(xiàn)原理及源碼解析

    Go-Resiliency庫中的timeout是一種基于協(xié)程的超時(shí)機(jī)制,通過創(chuàng)建協(xié)程來執(zhí)行任務(wù)并設(shè)置超時(shí)時(shí)間,若任務(wù)執(zhí)行時(shí)間超時(shí)則中止協(xié)程并返回錯(cuò)誤,需要詳細(xì)了解可以參考下文
    2023-05-05
  • Go語言中Gin框架使用JWT實(shí)現(xiàn)登錄認(rèn)證的方案

    Go語言中Gin框架使用JWT實(shí)現(xiàn)登錄認(rèn)證的方案

    在如今前后端分離開發(fā)的大環(huán)境中,我們需要解決一些登陸,后期身份認(rèn)證以及鑒權(quán)相關(guān)的事情,通常的方案就是采用請求頭攜帶token的方式進(jìn)行實(shí)現(xiàn),本文給大家介紹了Go語言中Gin框架使用JWT實(shí)現(xiàn)登錄認(rèn)證的方案,需要的朋友可以參考下
    2024-11-11
  • Go語言計(jì)算指定年月天數(shù)的方法

    Go語言計(jì)算指定年月天數(shù)的方法

    這篇文章主要介紹了Go語言計(jì)算指定年月天數(shù)的方法,實(shí)例分析了Go語言操作時(shí)間的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-02-02
  • Golang time.Format時(shí)間格式化的實(shí)現(xiàn)

    Golang time.Format時(shí)間格式化的實(shí)現(xiàn)

    Go語言的time.Format使用一個(gè)固定的參考時(shí)間來定義格式,本文就來介紹一下Golang time.Format時(shí)間格式化的實(shí)現(xiàn),感興趣的可以了解一下
    2026-04-04
  • 利用golang進(jìn)行OpenCV學(xué)習(xí)和開發(fā)的步驟

    利用golang進(jìn)行OpenCV學(xué)習(xí)和開發(fā)的步驟

    目前,OpenCV逐步成為一個(gè)通用的基礎(chǔ)研究和產(chǎn)品開發(fā)平臺(tái),下面這篇文章主要給大家介紹了關(guān)于利用golang進(jìn)行OpenCV學(xué)習(xí)和開發(fā)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2018-09-09
  • Go語言的type?func()用法詳解

    Go語言的type?func()用法詳解

    在Go語言中,函數(shù)的基本組成為:關(guān)鍵字func、函數(shù)名、參數(shù)列表、返回值、函數(shù)體和返回語句,這篇文章主要介紹了Go語言的type?func()用法,需要的朋友可以參考下
    2022-03-03
  • Golang中的泛型你真的了解嗎

    Golang中的泛型你真的了解嗎

    Golang?在?1.18?版本更新后引入了泛型,這是一個(gè)重要的更新,Gopher?萬眾矚目,為?Golang?帶來了更多的靈活性和可重用性,今天,我們將深入探討泛型的概念、為什么需要泛型、泛型的語法,并探討如何在實(shí)踐中使用它
    2023-05-05
  • 淺析Golang如何向已關(guān)閉的chan讀寫數(shù)據(jù)

    淺析Golang如何向已關(guān)閉的chan讀寫數(shù)據(jù)

    這篇文章主要為大家詳細(xì)介紹了Golang如何向已關(guān)閉的chan讀寫數(shù)據(jù),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-02-02

最新評論

会昌县| 辽宁省| 响水县| 莲花县| 南京市| 南澳县| 双辽市| 林周县| 湘西| 西林县| 柏乡县| 长丰县| 游戏| 桦甸市| 龙游县| 黄浦区| 胶州市| 益阳市| 平舆县| 长汀县| 沙河市| 聂拉木县| 石城县| 乐昌市| 伊川县| 伊金霍洛旗| 建阳市| 历史| 北京市| 苍溪县| 东辽县| 余庆县| 恩施市| 正蓝旗| 绥阳县| 平遥县| 靖边县| 昌乐县| 当涂县| 咸丰县| 惠东县|