Golang bytes and strings

WBOY
Release: 2024-02-09 09:00:29
forward
874 people have browsed it

Golang 字节与字符串

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!

Question content

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)
}
Copy after login

The output I get is

i
common element = i18 (0x0,0x0)
Copy after login

Code provided here

Workaround

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)
Copy after login

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("...")
}
Copy after login

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!

source:stackoverflow.com
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!