# Basic Types ## Basic Syntax Types related to strings: - byte: a synonym for uint8 - rune: a synonym for int32 for characters - string: an immutable sequence of characters - physically a sequence of bytes (UTF-8 encoding) - logically a sequence of runes (unicode) The length of the string is the number of bytes required to represent the unicode characters, not the number of the unicode characters. ```go s := "élite" fmt.Printf("%8T %[1]v %d\n", s, len(s)) fmt.Printf("%8T %[1]v\n", []rune(s)) b := []byte(s) fmt.Printf("%8T %[1]v %d\n", b, len(b)) ``` ```bash string élite 6 []int32 [233 108 105 116 101] []uint8 [195 169 108 105 116 101] 6 ``` Fprintf: writes formatted text to the output stream you specify. ```go fmt.Fprintf(w io.Writer, format string, a ...any) ``` Printf is equivalent to writing Fprintf() and writes formatted text to wherever the standard output stream is currently pointing. Sprintf writes formatted text to an array of char, as opposed to a stream. ## Search and replace program When you use < filename, the shell redirects the contents of filename as the standard input (stdin) to the program. ```go old, new := os.Args[1], os.Args[2] scan := bufio.NewScanner(os.Stdin) for scan.Scan() { s := strings.Split(scan.Text(), old) fmt.Println(s) t := strings.Join(s, new) fmt.Println(t) } ``` ```bash go run main.go Bob Matt < test.txt ``` Original text file: ```bash Bob went to the store. Hi Bob, how are you? Alan went to Japan. ``` After run the program: ```bash Matt went to the store. Hi Matt, how are you? Alan went to Japan. ``` --- Prev: [Go - 01 - Hello World](https://hackmd.io/OGtHs--vR5ilNtCyqGLQ3g?both) Next: [Go - 03 - Arrays, Slices, and Maps](https://hackmd.io/hX6q6PW0TSyqlJlSncl8eQ)