栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

为什么在Go中无法将[Size] byte转换为字符串?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

为什么在Go中无法将[Size] byte转换为字符串?

简短的答案是因为Go语言规范不允许这样做。

引用Go语言规范:转换:

在以下任何一种情况下,

x
可以将非恒定值转换为类型
T

  • x
    可分配给
    T
  • x
    的类型,并且
    T
    具有相同的基础类型。
  • x
    的类型和
    T
    是未命名的指针类型,它们的指针基类型具有相同的基础类型。
  • x的类型
    T
    均为整数或浮点类型。
  • x的类型和
    T
    都是复杂类型。
  • x
    是整数或字节或符文的片段,并且
    T
    是字符串类型。
  • x
    是一个字符串,
    T
    是字节或符文的一部分。

该规范仅允许将字节的片段或符文转换为

string
,而不能将字节数组转换为。

长答案

在Go中,数组和切片是不同的类型。数组的大小是该类型的一部分。

切片比数组要通用得多,将数组转换为代表相同值序列的切片非常容易:(

arr[:]
而且价格便宜,结果切片将与该数组共享数组作为后备数组,而不会进行重新分配或复制完成)。

因此,所有功能和支持都提供给切片而不是数组。

只是您要创建一个简单函数的图像,该函数接受数字的切片(任意长度)

int
并返回数字的总和。像这样:

func sum(s []int) (sum int) {    for _, v := range s {        sum += v    }    return}

如果您决定使用数组作为输入,因为长度是类型的一部分,那么您将限制函数的可用性,它只能采用相同长度的数组:

func sum2(s [2]int) (sum int) {    for _, v := range s {        sum += v    }    return}

你可以调用

sum2()
类型的值仅
[2]int
但如果你有类型的数组
[3]int
,你 不能
因为这些2种类型是不同的!
sum2()
如果仅包含的一个切片,您也无法调用
int
(您无法访问切片的支持数组)。同时,您可以
sum()
使用所有
[]int
切片调用函数,如果有数组,则仍可以通过传递
arr[:]
sum()
函数来使用它。

注意:

另请注意,将“随机”字节片转换为极

string
有可能不是您想要的,因为“随机”字节片可能不是有效的UTF-8字节序列。

而是使用

encoding/hex
包将结果转换为十六进制字符串,如下所示:

fmt.Println(hex.EnpreToString(b[:]))


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/377031.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号