zoukankan      html  css  js  c++  java
  • golang读取json配置文件

    package main
    
    import (
        "fmt"
        "log"
        "os"
        "sync"
        "strings"
        "io/ioutil"
        "encoding/json"
    )
    
    type demo struct {
    }
    
    type creStruct struct {
        Name string `json:"name"`
        Ak   string `json:"ak"`
        Sk   string `json:"sk"`
    }
    
    type cre struct {
        Cres []creStruct `json:"credentials"`
    }
    
    func Newdemo() *demo {
        dem := &demo{}
    
        return dem
    }
    
    var wg sync.WaitGroup
    
    func (d *demo) LoadCredentials(path string) cre{
        jsonFile, err := os.Open(path)
        if err != nil {
            log.Println(err)
        }
        defer jsonFile.Close()
    
        byteValue, err := ioutil.ReadAll(jsonFile)
        if err != nil {
            log.Println(err)
        }
    
        var cres cre
        err = json.Unmarshal(byteValue, &cres)
        if err != nil {
            log.Println(err)
        }
    
        data, err := json.MarshalIndent(cres, "", "    ")
        if err != nil {
            log.Println(err)
        }
        fmt.Printf("%s
    ", data)
        return cres
    }
    
    func (d *demo) PrintCredential(cres cre) {
        wg.Add(len(cres.Cres))
    
        for _, i := range cres.Cres {
            go func(email, ak, sk string) {
                defer wg.Done()
    
                name := strings.Split(email, "@")
                fmt.Printf("name: %s, ak: %s, sk: %s
    ", name[0], ak, sk)
            }(i.Name, i.Ak, i.Sk)
        }
    }
    
    func init() {
        f, err := os.OpenFile("goerror.log", os.O_APPEND | os.O_CREATE | os.O_RDWR, 0666)
        if err != nil {
            log.Fatal(err)
        }
        log.SetPrefix("Trace: ")
        log.SetOutput(f)
    }
    
    func main() {
        mydemo := Newdemo()
    
        val := mydemo.LoadCredentials("/root/goProj/credential.json")
    
        mydemo.PrintCredential(val)
    
        wg.Wait()
    }
    {
        "credentials": [
            {
                "name": "********@.onaliyun.com",
                "ak":   "********",
                "sk":   "********"
            },
            {
                "name": "********@.onaliyun.com",
                "ak": "********",
                "sk": "********"
            }
        ]
    }
    • Use WaitGroup.Add(int) to keep count of how many goroutines we will be running as part of our logic.
    • Use WaitGroup.Done() to signal that a goroutine is done with its task.
    • Use WaitGroup.Wait() to wait until all goroutines are done.
    • Pass WaitGroup instance to the goroutines so they can call the Done() method.
  • 相关阅读:
    HDU 5791 Two(训练题002 F)
    HDU 5783 Divide the Sequence (训练题002 B)
    关于01背包和完全背包二重循环的顺序(前人之技,后人惊叹)
    关于01背包求第k优解
    最长上升子序列(logN算法)
    ACM课程总结
    Problem F
    关于狄克斯特拉算法(dijkstra)总结
    Problem I
    OBJ文件格式分析工具: objdump, nm,ar
  • 原文地址:https://www.cnblogs.com/donggongdechen/p/14599878.html
Copyright © 2011-2022 走看看