回答

收藏

在 Go 中将数组转换为切片

技术问答 技术问答 177 人阅读 | 0 人回复 | 2023-09-12

这似乎是整个过程interwebs一个很常见的事情,丰富的例子,但我似乎找不到如何转换一个例子[32]byte来[]byte。6 p$ Z6 @  T9 i
我有一个从外部库调用的函数,它返回到数组1 P6 r2 O% N3 a
    func Foo() [32]byte {...}
    5 n/ g5 C1 F% |3 ?: M) s3 T; G4 S
然后我需要将结果传递给不同的函数进一步处理。  I( ^8 h$ N3 B# I* J4 n* V
    func Bar(b []byte) { ... }8 n3 \( P0 N1 ?! V
不幸的是,如果我试着打电话
% K" t  s( I: n- T3 t7 a9 t; h
    d := Foo()Bar(d); d" m" ^( s. e% {
我得到0 Y: n. H: q7 Z* k7 K2 c8 T2 ]+ e
    cannot convert d (type [32]byte) to type []byte* Z) f& N2 a: r# K7 d
正在做
4 k$ `& g8 f7 p$ z0 E* E, C4 @
    []byte(d)
    ( G' M: F# u& s9 ^* i
好不了多少。我该怎么办,尤其是不创建数据副本(当我只是传输数据时,复制数据似乎很愚蠢)。
3 z% Q, E7 ?9 M2 [- B; p                                                                : a7 y) R" k8 y7 @  _
    解决方案:                                                                ' Z2 p' G( d# C1 N, W- [4 m% E: @7 X
                                                                应有效:
) m# V' [2 V4 c, Z) Z! {8 u4 D[code]func Foo() [32]byte    return [32]byte0,1,2,3,4,5,6a','b','c','d','e','f0,1,2,3,4,5,6,a','b','c','d','e','f'}}func Bar(b []byte)    fmt.Println(string(b))}func main()    x := Foo()    Bar(x[]code]它不会创建底层缓冲区的副本
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则