在编写Go应用程序时,我经常会 Select 使用[]bytestring.除了[]byte的明显易变性之外,我如何决定使用哪一个呢?

我有几个示例用例:

  1. 函数返回新的[]byte.既然切片容量是固定的,那么有什么理由不返回字符串呢?
  2. 默认情况下,[]byte的打印效果不如string,因此出于日志(log)记录的目的,我经常发现自己转换为string.它应该一直是string吗?
  3. 在预加[]byte时,始终会创建一个新的基础array.如果要前置的数据是常量,为什么不应该是string

推荐答案

我的建议是在处理文本时默认使用字符串.但如果下列条件之一适用,则使用[]字节:

  • []字节的可变性将显著减少所需的分配数量.

  • 您正在处理使用[]字节的API,避免转换为字符串将简化您的代码.

Go相关问答推荐

Google OAuth2没有刷新令牌

具有GRPC的RBAC(基于角色的访问控制)-网关生成的REST风格的API

CGO Linux到Windows交叉编译中的未知类型名称

Golang Viper:如果第一个字段不存在,如何从另一个字段获取值

如何使用Gorilla WebSockets实现Http.Hijacker&;alexedwards/scs/v2

如何在gofr发起的服务间调用请求中添加Authorization Header?

我可以在Golang中的另一个类型参数的基础上约束一个类型的参数吗?

Prometheus 摘要分位数错误

GORM中是否可能自动迁移具有循环关系的表?

Apache Beam 在 Go 中从 PCollection 中 Select 前 N 行

在 Go 中公开公共 JWK

Golang Oauth2 服务帐户返回空刷新令牌字符串

如何使用带有方法的字符串枚举作为通用参数?

处理程序后访问 HTTP 请求上下文

关系不存在 GORM

Golang - 使用正则表达式提取链接

从 Go struct 中提取标签作为 reflect.Value

Go:如何创建一个可以提供配置文件中描述的 url 的服务器

try 创建新的 etcdv3 客户端时出现pc error: code = Unavailable desc = error reading from server: EOF

Golang 查询扫描未将查询正确扫描到 struct 中