mkaz.blog

Working with Go

Working with Strings

A set of examples working with strings in Golang. The strings standard library contains most of the functions you'll use to work with string. See strings package documentation

Create and set a variable in one line using := operator. Go will automatically determine the type by the assignment.

str := "This is an example string"

In general, Go does not use a standard object oriented notation to operate on values. This differs from languages like JavaScript and Python. Instead in Go, you typically pass in the variable you are working on to the function. Here is an example using the Contains function from the strings package:

exists := strings.Contains(str, "example")

Here is a full example program, that uses the ToLower function to convert a string to lowercase, and Contains to check if a string contains another.

package main
 
import (
    "fmt"     // for standard output
    "strings" // for manipulating strings
)
 
func main() {
 
    // create a string variable
    str := "HI, I'M UPPER CASE"
 
    // convert to lower case
    lower := strings.ToLower(str)
 
    // output to show its really lower case
    fmt.Println(lower)
 
    // check if string contains another string
    if strings.Contains(lower, "case") {
        fmt.Println("Yes, exists!")
    }
}

Strings as Array of Characters

Strings in Go are an array of characters and can be referenced as such.

str := "abcdefghijklmnopqrstuvwxyz"
fmt.Println("Chars 3-10: " + str[3:10])
 
// printing out first 5 characters
fmt.Println("First Five: " + str[:5])
 
// printing out from 13 to end
fmt.Println("From 13 on: " + str[13:])

💡 The Go Playground is a useful online environment that runs Go code in your browser. See the above example in the Go Playground here: https://play.golang.org/p/DC7R7XKzZ5G. I often use the playground to test out a bit of logic I'm working on.

Split Strings

Split a string on a specific character or word

sentence := "I'm a sentence made up of words"
words := strings.Split(sentence, " ")
fmt.Printf("%v \n", words)

If you were splitting on whitespace, using Fields is better because it will split on all whitespace characters, not just a space.

sentence := "I'm a sentence made up of words"
fields := strings.Fields(sentence)
fmt.Printf("%v \n", fields)

Join an Array of Strings

In an OOP world, the Join function would be defined in an array package. In Go, however, it is part of the strings package, you pass in an array of strings and the separator you want to join them.

lines := []string{ "one", "two", "three" }
str := string.Join(lines, ",")
fmt.Println(str)
>> one, two, three

String Replace

To replace a string with another use strings.Replace

str := "The blue whale loves blue fish."
newstr := strings.Replace(str, "blue", "red", 1)
>> "The red whale loves blue fish."

The strings.Replace function requires passing in how many replacements it should do. Pass in -1 to replace all occurrences.

str := "The blue whale loves blue fish."
newstr := strings.Replace(str, "blue", "red", -1)
>> "The red whale loves red fish."

Go version 1.12 introduced the strings.ReplaceAll function that does not have the fourth argument -- it, as it says, replaces all occurrences.

Strings HasPrefix and HasSuffix

The Go functions for checking if a strings starts with, or ends with, another string are strings.HasPrefix() and strings.HasSuffix().

path := "/home/mkaz"
isAbsolute := strings.HasPrefix(path, "/")
 
dir := "/home/mkaz/"
hasTrailingSlash := strings.HasSuffix(path, "/")