Learn back-end development by writing real code
Boot.dev Blog ยป Golang ยป How Replace a String in Go - Top 5 Examples

How Replace a String in Go - Top 5 Examples

By Lane Wagner on Apr 20, 2021

Last updated on Oct 1, 2022

Go has a powerful standard library that makes string manipulation easy right out of the box. One of the functions I use most often is the strings package’s Replace() function. strings.Replace() returns a copy of its input string after replacing all instances of a given substring with a new one.

How to use strings.Replace in Go

Function signature:

func Replace(s, old, new string, n int) string

Example usage:

strings.Replace("one one two two three", "one", "1", -1)
// 1 1 two two three

Notes about the function:

  • s is the original string that contains the substrings to be replaced.
  • old is the substring you want to be replaced.
  • new is the substring that will be swapped out for old.
  • n limits the number of replacements. If you want to replace them all, just set n to -1, or use the more explicit ReplaceAll function.

Example #1 - Replacing delimiters

Let’s say you have some comma-separated-values, CSVs. Perhaps you want to separate each word with a space instead of a comma. This can be useful if you need to make your delimiters consistent so you can later split the string into a slice.

package main

import (
    "fmt"
    "strings"
)

func main() {
    fmt.Println(strings.Replace("apple,banana,orange,pear", ",", " ", -1))
    // prints "apple banana orange pear"
}

Example #2 - Only replace some strings

It can be useful to only print the replace the first n instances of a word. For example, let’s say we had some text containing dialogue, like in a movie script. If you want to change the delimiter between the speaker and there lines to be a dash instead of a colon, but don’t want to replace any colons in the dialogue, you can set n=1.

package main

import (
    "fmt"
    "strings"
)

func main() {
    fmt.Println(strings.Replace("Lane: 'The box said price:1'", ":", " -", 1))
    // prints "Lane - 'The box said price:1'"
}

Get a back-end job without spending $10k on a bootcamp

  • Learn Python, Javascript and Go
  • Build the professional projects you need to land your first job
  • Spend about 6 months (when done part-time)
  • Pricing as low as $24/month*
  • No risk. Cancel anytime.

Example #3 - Remove all instances of a string

Sometimes you just want to strip out specific characters. For example, you may want to remove all periods. To do so, you can simply replace all periods with an empty string.

package main

import (
    "fmt"
    "strings"
)

func main() {
    fmt.Println(strings.Replace("123.456.789.0", ".", "", -1))
    // prints "1234567890"
}

Example #4 - High performance string replacement

If you need to perform the same replacements on many different documents, it can make sense to initialize a Replacer, which is much faster that the strings.Replace function when used repeatedly. It’s faster is because it builds a trie structure under the hood that it keeps in memory, and that structure can be used repeatedly.

package main

import (
    "fmt"
    "strings"
)

func main() {
    replacer := strings.NewReplacer(",", ":", "!", "?")
    fmt.Println(replacer.Replace("hello,there!good,reader!"))
    fmt.Println(replacer.Replace("glad,to!have,you!"))
    fmt.Println(replacer.Replace("bye,now!thank,you!"))
    // prints:
    // hello:there?good:reader?
    // glad:to?have:you?
    // bye:now?thank:you?
}

NewReplacer() takes a list of old-new string pairs, so you can use it to perform many different replacement operations.

func NewReplacer(oldnew ...string) *Replacer

Example #5 - Complicated Replacements with Regex

We’re shifting packages entirely now, and will be using the standard library’s regexp package. This package exposes a ReplaceAllString() function that lets us do more complicated replacements using a standard regex. This may be useful if you need to do some dynamic replacements, or are fluent in regular expressions.

func (re *Regexp) ReplaceAllString(src, repl string) string
package main

import (
    "fmt"
    "regexp"
)

func main() {
    re := regexp.MustCompile(`r.t`)
    fmt.Println(re.ReplaceAllString("rat cat rot dog", "ram"))
    // prints "ram cat ram dog"

    re = regexp.MustCompile(`-.*-`)
    fmt.Println(re.ReplaceAllString("-rasjdkajnsdt-hello world", ""))
    // prints "hello world"
}

Learn back-end without spending $10,000+ on a bootcamp

  • Write modern code in JavaScript, Python and Go
  • Build and deploy real backend projects to your personal portfolio
  • Compete in the job market by mastering computer science fundamentals

Related Reading