Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

print a value of particular byte in Array of string in golang

Tags:

go

I am new to go lang and I want to print the individual byte of array of string

as in below code I want to print the values 'h','e','l','l','o' once at a time but I am not able to do the same.

func main() {
    strslice := make([]string, 4, 5)
    strslice[0] = "hello"
    strslice[1] = "go"
    strslice[2] = "lang"
    strslice[3] = "whatsup"
    for i := 0; i < len(strslice[i]); i++ {
        fmt.Printf("slice is %c \n", strslice[i])
    }
}
like image 972
user Avatar asked Feb 14 '23 07:02

user


1 Answers

In Go, character literals are stored in a string as a variable-width sequence of UTF-8 encoded bytes. The ASCII code points (0x00..0x7F) occupy one byte. Other code points occupy two to four bytes. To print code points (characters) separately,

package main

import "fmt"

func main() {
    strslice := make([]string, 5, 5)
    strslice[0] = "hello"
    strslice[1] = "go"
    strslice[2] = "lang"
    strslice[3] = "whatsup"
    strslice[4] = "Hello, 世界"
    for _, s := range strslice {
        for _, c := range s {
            fmt.Printf("%c ", c)
        }
        fmt.Printf("\n")
    }
}

Output:

h e l l o 
g o 
l a n g 
w h a t s u p 
H e l l o ,   世 界 

Here's an illustration of the difference between UTF-8 encoded bytes and characters,

package main

import "fmt"

func main() {
    str := "Hello, 世界"
    fmt.Println("Bytes:")
    for i := 0; i < len(str); i++ {
        fmt.Printf("'%c' ", str[i])
    }
    fmt.Printf("\n")
    fmt.Println("Characters:")
    for _, c := range str {
        fmt.Printf("'%c' ", c)
    }
    fmt.Printf("\n")
}

Output:

Bytes:
'H' 'e' 'l' 'l' 'o' ',' ' ' 'ä' '¸' '' 'ç' '' '' 
Characters:
'H' 'e' 'l' 'l' 'o' ',' ' ' '世' '界' 

References:

Unicode UTF-8 FAQ

For statements, The Go Programming Language Specification

like image 63
peterSO Avatar answered Feb 15 '23 20:02

peterSO