golang常用三方库与使用技巧整理

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"] = "--"
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值