我有一个接收[]byte的函数,但我有的是int,进行此转换的最佳方式是什么?

err = a.Write([]byte(myInt))

我想我可以走很长的路,把它变成一个字符串,并把它变成字节,但它听起来很难听,我想有更好的方法来做到这一点.

推荐答案

我同意头脑风暴的方法:假设你传递的是一个机器友好的二进制表示,使用encoding/binary库.OP建议binary.Write()可能会有一些开销.对于Write()的实现,我看the source,它做了一些运行时决策,以获得最大的灵活性.

func Write(w io.Writer, order ByteOrder, data interface{}) error {
    // Fast path for basic types.
    var b [8]byte
    var bs []byte
    switch v := data.(type) {
    case *int8:
        bs = b[:1]
        b[0] = byte(*v)
    case int8:
        bs = b[:1]
        b[0] = byte(v)
    case *uint8:
        bs = b[:1]
        b[0] = *v
    ...

对吗?write()接受一个非常通用的data第三个参数,这会增加一些开销,因为Go运行时会被迫编码类型信息.由于Write()在这里执行一些在您的情况下根本不需要的运行时决策,也许您可以直接调用编码函数,看看它是否执行得更好.

大概是这样的:

package main

import (
    "encoding/binary"
    "fmt"
)

func main() {
    bs := make([]byte, 4)
    binary.LittleEndian.PutUint32(bs, 31415926)
    fmt.Println(bs)
}

让我们知道这是如何执行的.

否则,如果您只是try 获取整数的ASCII表示形式,则可以获取字符串表示形式(可能为strconv.Itoa),并将该字符串转换为[]byte类型.

package main

import (
    "fmt"
    "strconv"
)

func main() {
    bs := []byte(strconv.Itoa(31415926))
    fmt.Println(bs)
}

Go相关问答推荐

如何在go中传递C函数指针

为什么使用append时Go切片的初始容量会随着int32和int64类型的不同而变化?

Go汇编器命名为Constants

Golang测试容器,无法使网络正常工作

golang 的持久隐蔽服务

如何执行asn 1 marshal/unmarshal和omit字段?

为什么 `go mod` 占用了另一个磁盘上的空间而不是我的 GOPATH?

将这两个函数合二为一的惯用方法

如何模拟 stripe 需要 webhooks 的捕获事件?

如何为ANTLR4目标Go调试监听器

在 Go 中解组编号的 XML 标签

有没有办法在 Golang 中使用带有 go-simple-mail lib 的代理?

是否可以在 hyperledger-chaincode 中使用 gRPC?如果可以,我如何避免在测试网络上调用时出错?

hyperledger fabric - go:在 $PATH 中找不到可执行文件

Gremlin-Go:树步骤不可序列化

helm :将 YAML 转换为 JSON 时出错:yaml:第 xx 行:未找到预期的密钥

为什么当我忽略 template.New() 程序可以成功运行?

当有多个同名包时如何在vscode中显示golang包完整路径?

为什么 go-cmp Equal() 说 struct 不是完全相等的,即使所有字段都非常相等?

gopls 为 github.com/Shopify/sarama 返回错误gopls: no packages returned: packages.Load error