golang值类型转换成[]uint8类型的操作

 更新时间:2021年05月08日 09:30:26   作者:爱了李召君  
这篇文章主要介绍了golang值类型转换成[]uint8类型的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

在go语言中,byte其实是uint8的别名,byte 和 uint8 之间可以直接进行互转。

目前来只能将0~255范围的int转成byte。

func Int64ToBytes(num int64) []uint8 {
 var buffer bytes.Buffer
 err := binary.Write(&buffer, binary.BigEndian, num)
 if err != nil {
  logs.Error("int64转[]uint8失败%v", err)
 }
 return buffer.Bytes()
}

在使用binary.Write()的时候,要注意一些问题:

Write writes the binary representation of data into w.

Data must be a fixed-size value or a slice of fixed-size // values, or a pointer to such data.

Boolean values encode as one byte: 1 for true, and 0 for false.

Bytes written to w are encoded using the specified byte order and read from successive fields of the data. When writing structs, zero values are written for fields with blank (_) field names.

我的翻译是这样的(本人英文不好,勿怪!)

Write将数据的二进制表示形式写入w。

数据必须是固定大小的值或固定大小的值的切片,或者是指向此类数据的指针

布尔值编码为一个字节:1表示true,0表示false。

写入w的字节使用指定的字节顺序进行编码,并从数据的连续字段中读取。

写入结构时,将为空白(_)字段写入零值名称。

补充:golang关于json库的一个比较容易陷入的坑 uint8[]数组的json转换问题.

类似这个CA如果实例转化成json.List会变成字符串.

type CA struct {
 List []uint8
}
 
func main() {
 ca := CA{[]uint8{1,2,3,4,5,6,7,8,9,0}}
 r, _ := json.Marshal(ca)
 fmt.Println(string(r)) //{"List":"AQIDBAUGBwgJAA=="}
}

而我们希望的是要一个正常的json. 只有 int8 byte uint8 这种8位的json库会给我们当成字符串处理.想要解决.如果拍脑袋就不能用这几种类型了.需要使用16 32 64位的数字才可以正常转换成json字符串.

{"List":[1,2,3,4,5,6,7,8,9,0]}

但是不用担心. Unmarshal这个 我们认为不想要的json字符串 重新到CA的其他实例 会得到想要的结果.

如果是跨语言的json通信就要小心了.

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。如有错误或未考虑完全的地方,望不吝赐教。

相关文章

  • Go语言处理超大字符串型整数加减经典面试详解

    Go语言处理超大字符串型整数加减经典面试详解

    这篇文章主要为大家介绍了Go语言处理超大字符串型整数加减经典面试示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-10-10
  • Go语言LeetCode题解682棒球比赛

    Go语言LeetCode题解682棒球比赛

    这篇文章主要为大家介绍了Go语言LeetCode题解682棒球比赛示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12
  • 深入剖析Go语言中的Select语句

    深入剖析Go语言中的Select语句

    select是Go中的一个控制结构,类似于switch语句,本文主要介绍了深入剖析Go语言中的Select语句,具有一定的参考价值,感兴趣的可以了解一下
    2023-12-12
  • golang通过mysql语句实现分页查询

    golang通过mysql语句实现分页查询

    这篇文章主要介绍了golang通过mysql语句实现分页查询,文章内容介绍详细,具有一定的参考价值,需要的小伙伴可以参考一下,希望对你的学习有所帮助
    2022-03-03
  • golang类型转换组件Cast的使用详解

    golang类型转换组件Cast的使用详解

    这篇文章主要介绍了golang类型转换组件Cast的使用详解,帮助大家更好的理解和学习使用golang,感兴趣的朋友可以了解下
    2021-02-02
  • golang使用mapstructure解析json

    golang使用mapstructure解析json

    mapstructure 是一个 Go 库,用于将通用映射值解码为结构,这篇文章主要来和大家介绍一下golang如何使用mapstructure解析json,需要的可以参考下
    2023-12-12
  • Go语言入门教程之基础语法快速入门

    Go语言入门教程之基础语法快速入门

    这篇文章主要介绍了Go语言入门教程之基础语法快速入门,本文讲解了值类型、变量、常量、循环、条件语句、条件枚举等内容,需要的朋友可以参考下
    2014-11-11
  • Go语言使用组合的方式实现多继承的方法

    Go语言使用组合的方式实现多继承的方法

    这篇文章主要介绍了Go语言使用组合的方式实现多继承的方法,实例分析了多继承的原理与使用组合方式来实现多继承的技巧,需要的朋友可以参考下
    2015-02-02
  • Go读取yaml文件到struct类的实现方法

    Go读取yaml文件到struct类的实现方法

    本文主要介绍了Go读取yaml文件到struct类,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01
  • 详解Go如何实现协程并发执行

    详解Go如何实现协程并发执行

    线程是通过本地队列,全局队列或者偷其它线程的方式来获取协程的,目前看来,线程运行完一个协程后再从队列中获取下一个协程执行,还只是顺序执行协程的,而多个线程一起这么运行也能达到并发的效果,接下来就给给大家详细介绍一下Go如何实现协程并发执行
    2023-08-08

最新评论