涉及到格式转换,json与map转换,和执行命令行命令
package main
import (
"fmt"
"reflect"
"os/exec"
"github.com/bitly/go-simplejson"
"encoding/json"
"io/ioutil"
"log"
)
var DEPLOY=`{
"public":{
"server-pos":{
"dev":{"auto_deploy":0, "tag":"develop", "host":["100.100.100.100"],"extend":["event"]}
},
"mmmm":{
"dev":{"auto_deploy":0, "tag":"develop", "host":["100.100.100.100"]}
},
"medmed":{
"dev":{"auto_deploy":0, "tag":"develop", "host":["100.100.100.100"]}
},
"titi":{
"dev":{"auto_deploy":0, "tag":"develop", "host":["100.100.100.100"]}
},
"haha":{
"dev":{"auto_deploy":0, "tag":"develop", "host":["100.100.100.100"]}
},
"hihi":{
"dev":{"auto_deploy":0, "tag":"cloud", "host":["100.100.100.100"]}
},
"hehe":{
"dev":{"auto_deploy":0, "tag":"nn", "host":["100.100.100.100"]}
}
},
"dd":{
"dd-server":{
"dev":{"auto_deploy":0, "tag":"master", "host":["100.100.100.100"]}
},
"dd-promotion":{
"dev":{"auto_deploy":0, "tag":"made", "host":["100.100.100.100"]}
},
"nn-server":{
"dev":{"auto_deploy":0, "tag":"develop", "host":["100.100.100.100"],"extend":["dd-event","dd-task"]}
},
"dd-web":{
"dev":{"auto_deploy":0, "tag":"gateway", "host":["100.100.100.100"]}
},
"dd-nn":{
"dev":{"auto_deploy":0, "tag":"develop", "host":["100.100.100.100"]}
},
"my-way":{
"dev":{"auto_deploy":0, "tag":"develop", "host":["100.100.100.100"]}
}
},
"ceshi":{
"my_test":{
"dev":{"auto_deploy":0, "tag":"master", "host":["100.100.100.100"]}
},
"my_test_python":{
"dev":{"auto_deploy":0, "tag":"made", "host":["100.100.100.100"]}
}
}
}`
//需要大写
type Change struct{
Auto_deploy int32
Tag string
Host []string
}
func main() {
//simplejson是一个处理json简易的第三方包
DEPLOY_Json, err := simplejson.NewJson([]byte(DEPLOY)) //反序列化
if err != nil {
panic(err.Error())
}
fmt.Println(reflect.TypeOf(DEPLOY_Json))
//这一步是将simplejson转换为map
DEPLOY_Map,_ :=DEPLOY_Json.Map()
for project,_ := range DEPLOY_Map{
project_info:=DEPLOY_Map[project]
//将interface转换为map
project_info_new:=project_info.(map[string]interface{})
ab:="my_test"
//判断map中key值是否存在
if v, ok := project_info_new[ab]; ok {
value :=v.(map[string]interface{})
for env,env_info :=range value{
fmt.Println(env)
env_info_new:=env_info.(map[string]interface{})
//序列化,map[string]interface{}转化为json类型
cc,err :=json.Marshal(env_info_new)
if err !=nil{
fmt.Println("cc not")
}else{
fmt.Println("cc exist")
}
var msg Change
//反序列化,json转化为struct类型
json.Unmarshal([]byte(cc),&msg)
v:=reflect.ValueOf(msg)
//下面这三步是将reflect.Value转化为int类型
x:=v.Field(0)
y:=x.Interface()
i:=y.(int32)
if i==0{
fmt.Println("success")
project_name:="myproject"
//字符串拼接
s:= fmt.Sprintf("项目:%s,环境: %s,正在发布,请稍等",project_name,env)
fmt.Println(s)
//判断env_info_new中的key值是否存在
if _, ok := env_info_new["tag"]; ok {
fmt.Println("exist")
//以下,到输出结果,都是执行系统命令,并输出结果
cmd := exec.Command("ls", "-a" )
stdout, err := cmd.StdoutPipe()
if err != nil {
log.Fatal(err)
}
// 保证关闭输出流
defer stdout.Close()
// 运行命令
if err := cmd.Start(); err != nil {
log.Fatal(err)
}
// 读取输出结果
opBytes, err := ioutil.ReadAll(stdout)
if err != nil {
log.Fatal(err)
}
log.Println(string(opBytes))
}
}
}
} else {
fmt.Println("Key Not Found")
}
}
}
网友评论