Home > Article > Backend Development > Golang bytes and strings
php editor Youzi will take you to explore in-depth bytes and strings in Golang. In Golang, bytes and string are common data types, but there are some subtle differences and conversion methods between them. Understanding these differences and conversion methods will help you better process your data and optimize program performance. This article will introduce the concepts of bytes and strings, methods of mutual conversion, and their usage scenarios in practical applications, helping you better understand and apply bytes and strings in Golang. Let’s explore together!
I am trying to find the common elements between two strings of equal length in golang.
The element is found, but the string representation appears to contain byte values as well. How can I get rid of it?
func main() { println(fmt.printf("common element = %s", findcommonelement("abcdefghi", "ijklmnopq"))) } func findcommonelement(firstelements, secondelements string) string { elementsinfirstgroup := make(map[string]bool) for _, charvalue := range firstelements { elementsinfirstgroup[string(charvalue)] = true } for index := range firstelements { if _, ok := elementsinfirstgroup[string(secondelements[index])]; ok { matchingelem := secondelements[index] println(string(matchingelem)) return string(matchingelem) } } panicmessage := fmt.sprintf("could not find a common item between %s and %s", firstelements, secondelements) panic(panicmessage) }
The output I get is
i common element = i18 (0x0,0x0)
Code provided here
You should use fmt.sprintf
instead of fmt.printf
.
And avoid using the built-in println
, instead use fmt.println
.
https://pkg.go.dev/[email protected]#printf
func printf(format string, a ...any) (n int, err error)
printf formats according to the format specifier and writes to standard output. It returns the number of bytes written and any write errors encountered.
Therefore 18 (0x0,0x0)
...
18
is the number of characters in the string "common element = i"
. (0x0,0x0)
is the nil
error value printed by println
. More importantly, however, your algorithm is flawed because it mixes bytes with runes. When you range
a string, the iteration variable charvalue
will be assigned a rune
, which may be multibyte. However, when you index a string (e.g. secondelements[index]
), the result is always a single byte
. Therefore, panics or gibberish (invalid bytes) will inevitably be the result of your function. See Examples.
You may get better results by doing the following:
func findCommonElement(firstElements, secondElements string) string { second := map[rune]bool{} for _, r := range secondElements { second[r] = true } for _, r := range firstElements { if second[r] { fmt.Println(string(r)) return string(r) } } panic("...") }
https://www.php.cn/link/dbdc69ea6ccbdea0ca2d796e1af24ebf
The above is the detailed content of Golang bytes and strings. For more information, please follow other related articles on the PHP Chinese website!