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\n", 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\n", 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.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
2019-03-31 收集主机OS相关数据
2019-03-31 Kernel trick----PRML读书笔记
2019-03-31 Newton's method
2018-03-31 TCP打开文件传输(服务器端并发code)
2018-03-31 TCP打开文件传输(客户端code)