亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

已知長度數據的切片與數組

已知長度數據的切片與數組

Go
人到中年有點甜 2023-05-08 17:40:56
在處理諸如sha256已知長度為 32 字節的散列之類的東西時——使用[]byte切片或[32]byte數組更符合習慣嗎?我有點新手——但直覺上感覺使用[32]byte數組存儲散列很好而且明確,但實際上操作起來很麻煩,需要各種奇怪的事情,比如將數組復制到新的緩沖區切片中操縱為[]byte.
查看完整描述

2 回答

?
慕容森

TA貢獻1853條經驗 獲得超18個贊

查看 Go 標準庫,數組似乎經常用于已知長度的散列之類的東西。例如sha256.Sum256返回一個[sha256.Size]bytewhere?sha256.Sizeis 32。或者查看digest實現hash.Hash接口的結構,其中sha256包含[chunk]bytewhere?chunkis 64,即 sha256 塊大小。

我認為通常使用數組來避免不必要的內存分配。要利用對可變長度切片進行操作的算法,您可以將數組轉換為切片而無需使用x[:].

package main


import (

? ? "crypto/sha256"

? ? "fmt"

)


type myHash struct {

? ? x [32]byte

}


func print(b []byte) {

? ? fmt.Print(b)

}


func main() {

? ? b := []byte("Hello world!")

? ? h := myHash{x: sha256.Sum256(b)}

? ? print(h.x[:])

}


查看完整回答
反對 回復 2023-05-08
?
炎炎設計

TA貢獻1808條經驗 獲得超4個贊

切片在 Go 中是一流的,并且根據它們與標準庫中數組的比較用法,它似乎是首選方式。


將數組轉換為切片也很簡單:


package main


import (

    "fmt"

)


func main() {

    array := [5]int{1, 2, 3, 4, 5}

    slice := array[:]

    fmt.Println("Hello, playground", array, slice)

}


查看完整回答
反對 回復 2023-05-08
  • 2 回答
  • 0 關注
  • 168 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號