Go语言基础语法与实践 | 豆包MarsCode AI刷题

74 阅读2分钟

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.Marshaljson.MarshalIndent 用于将 Go 结构体编码为 JSON。
  • json.Unmarshal 用于将 JSON 数据解码为 Go 结构体。
  • 使用 struct 标签(如 json:"age")可以自定义 JSON 字段的名称。

除此之外,还有以下三种 JSON 解析方法:

  • viper.ReadConfig:首先要通过viper.SetConfigType("json")指定要解析数据的格式,否则即使viper.ReadConfig返回值没有报错,也得不到解析后的结果。
  • simplejson.NewJson
  • gojsonq.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.ParseFloatstrconv.ParseInt 提供了对字符串解析为数字类型的强大支持。
  • strconv.Atoistrconv.ParseInt 的简化版本,用于十进制整数的解析。
  • 在实际使用中,需要注意检查错误返回值以确保解析成功。 错误可以帮助识别和处理解析过程中出现的问题。

进程信息

  • 使用 os.Args 可以获取命令行参数。
  • 使用 os.Getenvos.Setenv 可以读取和设置环境变量。
  • 使用 exec.Command 可以执行外部命令并获取输出。
  • 处理错误(如 panic(err)) 是确保程序稳定的好习惯。