2015-03-31 74 views
8

我有這樣的代碼:Golang類型[N]字節轉換爲[]字節

hashChannel <- []byte(md5.Sum(buffer.Bytes())) 

而且我得到這個錯誤:

cannot convert md5.Sum(buffer.Bytes()) (type [16]byte) to type []byte 

即使沒有明確的轉換,這並不工作。我能保持型[16]字節爲好,但在某些時候,我需要轉換,因爲我送過來一個TCP連接:

_, _ = conn.Write(h) 

什麼是轉換它的最好方法是什麼? 感謝

+4

'[:]'轉換陣列以一個切片 – Volker 2015-03-31 07:42:48

回答

8

切片的陣列。例如,

package main 

import (
    "bytes" 
    "crypto/md5" 
    "fmt" 
) 

func main() { 
    var hashChannel = make(chan []byte, 1) 
    var buffer bytes.Buffer 
    sum := md5.Sum(buffer.Bytes()) 
    hashChannel <- sum[:] 
    fmt.Println(<-hashChannel) 
} 

輸出:

[212 29 140 217 143 0 178 4 233 128 9 152 236 248 66 126] 
3

使用數組你可以讓創建切片simple slice expression

foo := [5]byte{0, 1, 2, 3, 4} 
var bar []byte = foo[:] 

或者你的情況:

b := md5.Sum(buffer.Bytes()) 
hashChannel <- b[:] 
+1

BUG:'hashChannel < - md5.Sum(buffer.Bytes())[:]'錯誤是'無效操作md5.Sum(buffer.Bytes())[:](slice of unaddressable value)' – peterSO 2015-03-31 07:55:49

+0

peterSo:啊,是的。對不起。確實如此。更正了它 – ANisus 2015-03-31 08:05:34

+1

@ANisus你知道爲什麼我們需要引入一箇中間變量'b'而不是僅僅使用'hashChannel < - md5.Sum(buffer.Bytes())[:]'例如? – boramalper 2017-07-23 22:56:07