JSON相关
1.官方默认的是encoding/json
2.建议用"github.com/json-iterator/go",好处是有jsoniter.MarshalToString 和 jsoniter.UnmarshalFromString 这种直接和字符串相关的
3.在PHP中主要是json_encode和json_decode那些;
类型转换相关
1.github.com/spf13/cast
类型转换时会用到,github官网链接
注:常用的cast.ToXXX包中 cast.ToUint64 有点问题,底层用的是parseInt,所以实际并不是印象中的unsigned int64,最大数字范围还是int64。对于这种情况可以先用 strconv.ParseUint(cast.ToString(yourparam), 10, 64) 代替。
2. strconv
strconv包实现了基本数据类型和其字符串表示的相互转换,
教程
目前用到的几种:
strconv.Unquote(s string)(t string,err error) : Unquote 将 s 解释为单引号、双引号或反引号 Go 字符串文字,解析它并返回它表示的值。 (如果 s 是单引号,它将是 Go 字符文字;取消引用返回相应的字符串。)
Itoa():整型转字符串
Atoi():字符串转整型
Parse 系列函数:用于将字符串转换为指定类型的值,其中包括 ParseBool()、ParseFloat()、ParseInt()、ParseUint()
Format 系列函数:将给定类型数据格式化为字符串类型
Append 系列函数:用于将指定类型转换成字符串后追加到一个切片中
3.strings包
strings包实现了用于操作字符的简单函数,strings
目前用到的:
strings.Contains:函数用于检查一个字符串是否包含另一个子串;其中s参数是要搜索的字符串,substr参数是要查找的子串。如果s包含substr,则该函数返回true,否则返回false。
4.sort包
sort包提供了排序切片和用户自定义数据集的函数
sort.Slice排序:
sort.Slice(tableMaxId,
func
(i, j int) bool {
return
tableMaxId[i] < tableMaxId[j] })
上面的示例是传了一个数组(可以传any),然后直接定义一个函数来规定比较方法来排序
其他技巧
1.比如先定义了一个结构体,里面的每个属性都赋值了,然后在请求下面服务的时候,又要一个别的结构体,除了一个一个的赋值之外,还看到一种方法是先json,再解json到新的结构体中
var getDataConds dao.GetDataByCondsParam
_param, err := jsoniter.Marshal(param)
if err != nil {
return err
}
err = jsoniter.Unmarshal(_param, &getArticleDataConds)
if err != nil {
return err
}
2.假如PHP中有这样的入参:
$test = array(
'req' => array(
'ids => array($id)
)
);
转成go是这样:
req := map[string][]int64{
"ids": {
id,
},
}
reqJSON, _ := jsoniter.MarshalToString(req)
body := map[string]string{
"req": reqJSON,
}
或者:
test01 := []int{
id,
}
req := map[string][]int{
"ids": test01,
}
3.数组中嵌套数组的结构体如何定义
type YesterdayData struct {
List []Yesterday `json:"list"`
}
type RYesterday struct {
EventDay string `json:"event_day"`
Count int64 `json:"count"`
}
4.日期相关
比如要输出20230401这个日期:
PHP:
$time = date('Ymd', time() - 86400 * 7)
GO:
time.Now().AddDate(0, 0, -7).Format("20060102")
5.go中map嵌套定义后,要分别初始化
result := make(map[string]map[string]interface{})
result["view"] = make(map[string]interface{}) //里面的map也要初始化
result["view"]["Count"] = "--"
result["view"]["yesterdayCount"] = "--"