2017-07-31 122 views
1

將一行base64拆分爲多行76個字符的最佳方法是什麼?目前我使用encoding/base64包裝爲:將base64行拆分爲塊

encoded := base64.StdEncoding.EncodeToString(data) 

提前致謝!

+0

環路和切片操作'[0:76]' – zerkms

回答

2

在標準庫中沒有對此的支持。你必須自己做一個。

一個簡單的實現可以是這樣的:

func split(s string, size int) []string { 
    ss := make([]string, 0, len(s)/size+1) 
    for len(s) > 0 { 
     if len(s) < size { 
      size = len(s) 
     } 
     ss, s = append(ss, s[:size]), s[size:] 

    } 
    return ss 
} 

這個循環,直到字符串被消耗,而在從一開始就size字符(字節)每個迭代的削減。

請注意,這適用於base64文本,因爲它只使用以UTF-8編碼形式(這是Go如何將字符串存儲在內存中)映射1對1字節的字符。如果你想在任意字符串上使用它,切片可能破壞有效的UTF-8序列,並且塊也不一定是size個字符。

測試它:

s := strings.Repeat("1", 2*76+3) 
for _, chunk := range split(s, 76) { 
    fmt.Println(chunk) 
} 

輸出(嘗試在Go Playground):

1111111111111111111111111111111111111111111111111111111111111111111111111111 
1111111111111111111111111111111111111111111111111111111111111111111111111111 
111