Golang : Chunk split or divide a string into smaller chunk example
Problem:
You need a function in Golang that are similar to PHP's chunk_split()
function that can split a string into smaller chunks. It is commonly used in converting base64 encoded string to match RFC 2045 semantics. Such as line-breaking base64 encoded lines at 76 characters.
Excerpt from https://www.ietf.org/rfc/rfc2045.txt
(5) Encoded lines must not be longer than 76 characters, not counting the trailing CRLF. If longer lines are found in incoming, encoded data, a robust implementation might nevertheless decode the lines, and might report the erroneous encoding to the user.
Solution:
This code example below should do the job on dividing a string into smaller chunks.
package main
import (
"fmt"
)
func chunkSplit(body string, limit int, end string) string {
var charSlice []rune
// push characters to slice
for _, char := range body {
charSlice = append(charSlice, char)
}
var result string = ""
for len(charSlice) >= 1 {
// convert slice/array back to string
// but insert end at specified limit
result = result + string(charSlice[:limit]) + end
// discard the elements that were copied over to result
charSlice = charSlice[limit:]
// change the limit
// to cater for the last few words in
// charSlice
if len(charSlice) < limit {
limit = len(charSlice)
}
}
return result
}
func main() {
before := "this is a long string that needs to be chunked into smaller chunks"
// chunk after 30 characters and append with newline
// for RFC 2045, change limit from 30 to 76
after := chunkSplit(before, 30, "\n")
fmt.Println("Before :\n", before)
fmt.Println("After :\n", after)
}
Output:
Before :
this is a long string that needs to be chunked into smaller chunks
After :
this is a long string that nee
ds to be chunked into smaller
chunks
References:
https://socketloop.com/tutorials/golang-warp-text-string-by-number-of-characters-or-runes-example
See also : Golang : Warp text string by number of characters or runes example
By Adam Ng
IF you gain some knowledge or the information here solved your programming problem. Please consider donating to the less fortunate or some charities that you like. Apart from donation, planting trees, volunteering or reducing your carbon footprint will be great too.
Advertisement
Tutorials
+9.8k Golang : Removes punctuation or defined delimiter from the user's input
+18.9k Golang : How to get struct tag and use field name to retrieve data?
+6.9k Golang : Load DSA public key from file example
+34.2k Golang : Validate IP address
+6.5k Golang : Convert(cast) io.Reader type to string
+4.1k Golang : Constant and variable names in native language
+7.2k Golang : Routes multiplexer routing example with regular expression control
+19.9k Golang : Encrypt and decrypt data with TripleDES
+37.8k Golang : Remove dashes(or any character) from string
+11k Golang : Encrypt and decrypt data with x509 crypto
+12.3k Golang : Get constant name from value
+25.1k Golang : Encrypt and decrypt data with AES crypto