Golang : convert(cast) bytes to string
Encounter a problem when helping out a co-worker today to read in data generated by another program. To make it short, the data is in the form of array of bytes and the objective is to convert the bytes into string. The problem is that the length of the given data is dynamic and we need to create a program that can handle the dynamic length.
Typically, the program should look something like 1st program below
1st program :
package main
import "fmt"
func main() {
src := [10]byte{'h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd'}
fmt.Println(len(src), src)
dst := string(src[:])
fmt.Println(len(dst), dst)
}
and running this program will generate error array index 10 out of bounds [0:10]
and to fix the error.... a programmer will typically just increase the array size.... which in turn... it will work ... but also generate trailing zeros 20 [104 101 108 108 111 32 119 111 114 108 100 0 0 0 0 0 0 0 0 0]
.
What if there is a incoming array of higher values ? Then the error will appear again.
In Golang, there is a better way to handle this kind of dynamic length situation. We will use the three dots to tell the compiler to figure out the length of the array during run time.
2nd program :
package main
import "fmt"
func main() {
src := [...]byte{'h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd'}
fmt.Println(len(src), src)
dst := string(src[:])
fmt.Println(len(dst), dst)
}
Output :
11 [104 101 108 108 111 32 119 111 114 108 100]
11 hello world
Hope this will assist you in developing a more robust program.
See also : Golang : automatically figure out array length(size) with three dots
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
+6.6k Get Facebook friends working in same company
+86.3k Golang : How to convert character to ASCII and back
+14.8k Golang : Save(pipe) HTTP response into a file
+34.3k Golang : How to stream file to client(browser) or write to http.ResponseWriter?
+13.7k Golang : convert rune to unicode hexadecimal value and back to rune character
+5.7k Golang : Denco multiplexer example
+20.8k Golang : How to force compile or remove object files first before rebuild?
+40.8k Golang : How to count duplicate items in slice/array?
+13.2k Golang : Get constant name from value
+16k Golang : How to extract links from web page ?
+20.9k Golang : Create and resolve(read) symbolic links
+6.1k Golang : Test input string for unicode example