JSON 处理
json数据格式是大多数api通信使用的一种数据传输格式。
以下代码演示了如何使用 encoding/json 包进行结构体的 JSON 编码和解码。
package main
import (
"encoding/json"
"fmt"
)
type userInfo struct {
Name string
Age int `json:"age"`
Hobby []string
}
func main() {
a := userInfo{Name: "wang", Age: 18, Hobby: []string{"Golang", "TypeScript"}}
buf, err := json.Marshal(a)
if err != nil {
panic(err)
}
fmt.Println(buf) // [123 34 78 97...]
fmt.Println(string(buf)) // {"Name":"wang","age":18,"Hobby":["Golang","TypeScript"]}
buf, err = json.MarshalIndent(a, "", "\t")
if err != nil {
panic(err)
}
fmt.Println(string(buf))
var b userInfo
err = json.Unmarshal(buf, &b)
if err != nil {
panic(err)
}
fmt.Printf("%#v\n", b) // main.userInfo{Name:"wang", Age:18, Hobby:[]string{"Golang", "TypeScript"}}
}
json.Marshal 将结构体 a 编码为 JSON 字符串的字节切片。如果出现错误,会通过 panic 打印并终止程序。
json.MarshalIndent 用于生成格式化的 JSON,参数 "" 表示顶层缩进为空,"\t" 表示每个级别的缩进使用制表符。
总结:
json.Marshal和json.MarshalIndent用于将 Go 结构体编码为 JSON。json.Unmarshal用于将 JSON 数据解码为 Go 结构体。- 使用 struct 标签(如
json:"age")可以自定义 JSON 字段的名称。
除此之外,还有以下三种 JSON 解析方法:
viper.ReadConfig:首先要通过viper.SetConfigType("json")指定要解析数据的格式,否则即使viper.ReadConfig返回值没有报错,也得不到解析后的结果。simplejson.NewJsongojsonq.New().FromString
特点:Unmarshal需要预先定义结构体,viper提供键值对访问,simplejson和gojsonq提供了更灵活的查询方式.
数字解析
数字解析是指将以 字符串 形式存在的数字转换为 数字 形式。在这里我们所说的数字形式是指可以转换为整数、浮点数等的数字。
最常用的是 strconv 包
其中 Atoi() 是使用最为广泛的函数,基础语法:result, error := strconv.Atoi(String)
以下代码演示了如何使用 strconv 包进行字符串和数字类型之间的转换
package main
import (
"fmt"
"strconv"
)
func main() {
f, _ := strconv.ParseFloat("1.234", 64)
fmt.Println(f) // 1.234
n, _ := strconv.ParseInt("111", 10, 64)
fmt.Println(n) // 111
n, _ = strconv.ParseInt("0x1000", 0, 64)
fmt.Println(n) // 4096
n2, _ := strconv.Atoi("123")
fmt.Println(n2) // 123
n2, err := strconv.Atoi("AAA")
fmt.Println(n2, err) // 0 strconv.Atoi: parsing "AAA": invalid syntax
}
总结
strconv.ParseFloat和strconv.ParseInt提供了对字符串解析为数字类型的强大支持。strconv.Atoi是strconv.ParseInt的简化版本,用于十进制整数的解析。- 在实际使用中,需要注意检查错误返回值以确保解析成功。 错误可以帮助识别和处理解析过程中出现的问题。
进程信息
- 使用
os.Args可以获取命令行参数。 - 使用
os.Getenv和os.Setenv可以读取和设置环境变量。 - 使用
exec.Command可以执行外部命令并获取输出。 - 处理错误(如
panic(err)) 是确保程序稳定的好习惯。