Skip to content

Instantly share code, notes, and snippets.

@prakhar1989
Created August 12, 2014 10:19
Show Gist options
  • Save prakhar1989/e393594ba379011c57df to your computer and use it in GitHub Desktop.
Save prakhar1989/e393594ba379011c57df to your computer and use it in GitHub Desktop.
Understanding Strings
package main
import "fmt"
func main() {
//const sample = "\xbd\xb2\x3d\xbc\x20\xe2\x8c\x98"
//const sample = "Hello"
// sample as a slice of bytes
sample := []byte{'H', 'e', 'l', 'l', 'o'}
for i := 0; i < len(sample); i++ {
fmt.Printf("char: %c, int: %d, hex: %x, utf-8: u00%x\n",
sample[i], sample[i], sample[i], sample[i])
}
// another way of printing the above
fmt.Printf("Bytes: % x\n", sample)
// escape non-printable characters
fmt.Printf("Printable characters(only): %q\n", sample)
// escape non-printable and show only ASCII
fmt.Printf("ASCII only: %+q\n", sample)
}
@prakhar1989
Copy link
Author

For loop and ranges over strings

package main

import "fmt"

func main() {
    diffForRange("prakhar") // english
    diffForRange("日本語")   // chinese
    diffForRange("المزيد")  // arabic
}


func diffForRange(s string) {
    for i := 0; i < len(s); i++ {
        fmt.Printf("%c, ", s[i])
    }
    fmt.Println()
    // to get each rune, always use range rather than for   
    for index, runeValue := range s {
        fmt.Printf("%#U starts at byte position %d\n", runeValue, index)
    }
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment