Introduction
In the previous lesson, we learned that characters in Go are encoded using UTF-8 and stored as either the byte or rune types. Now, let’s talk about string, which is a collection of characters. Let’s learn about it together.
Knowledge Points:
What is a string
Creating a string
Declaring a string
Common string functions
What is a String
In the first program we learned in Go, we printed the string hello, world.
String is a basic data type in Go, also known as a string literal. It can be understood as a collection of characters and occupies a continuous block of memory. This block of memory can store any type of data, such as letters, text, emoji, etc.
However, unlike other languages, strings in Go are read-only and cannot be modified.
Creating a String
Strings can be declared in several ways. Let’s take a look at the first method. Create a new file called string.go:
Write the following code:
import “fmt”
func main() {
// Use the var keyword to create a string variable a
var a string = “labex”
a = “labex” // Assign “labex” to variable a
// Declare variable a and assign its value
var b string = “shiyanlou”
// Type declaration can be omitted
var c = “Monday”
// Use := for quick declaration and assignment
d := “Hangzhou”
fmt.Println(a, b, c, d)
}
The above code demonstrates how to create strings using the var keyword and the := operator. If you assign a value when creating a variable with var, you can omit the type declaration, as shown in the creation of variable b.
The expected output is as follows:
Declaring a String
In most cases, we use double quotes “” to declare strings. The advantage of double quotes is that they can be used as escape sequence. For example, in the program below, we use the n escape sequence to create a new line:
import “fmt”
func main(){
x := “shiyanlounlabex”
fmt.Println(x)
}
The expected output is as follows:
labex
Here are some common escape sequences:
Symbol
Description
n
New line
r
Carriage return
t
Tab
b
Backspace
\
Backslash
‘
Single quote
“
Double quote
If you want to preserve the original format of the text or need to use multiple lines, you can use backticks to represent them:
import “fmt”
func main() {
// Output Pascal’s Triangle
yangHuiTriangle := `
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1`
fmt.Println(yangHuiTriangle)
// Output the ASCII art of “labex”
ascii := `
# ## # # ### # ## ####
# # # ## # # # # # # # #
# # # # # # # # # # # # #
# ##### # # # # # # # ##### # #
# # # # ## # # # # # # #
##### # # # # ## # # # # ### `
fmt.Println(ascii)
}
After running the program, you will see the following output:
Backticks are commonly used in prompts, HTML templates, and other cases where you need to preserve the original format of the output.
Getting the Length of a String
In the previous lesson, we learned that English characters and general punctuation marks occupy one byte, while Chinese characters occupy three to four bytes.
Therefore, in Go, we can use the len() function to get the byte length of a string. If there are no characters that occupy multiple bytes, the len() function can be used to approximately measure the length of the string.
If a string contains characters that occupy multiple bytes, you can use the utf8.RuneCountInString function to get the actual number of characters in the string.
Let’s see an example. Write the following code to the string.go file:
import (
“fmt”
“unicode/utf8”
)
func main() {
// Declare two empty strings using var and :=
var a string
b := “”
c := “labex”
// Output byte length
fmt.Printf(“The value of a is %s, the byte length of a is: %dn“, a, len(a))
fmt.Printf(“The value of b is %s, the byte length of b is: %dn“, b, len(b))
fmt.Printf(“The value of c is %s, the byte length of c is: %dn“, c, len(c))
// Output string length
fmt.Printf(“The length of d is: %dn“, utf8.RuneCountInString(d))
}
The expected output is as follows:
The value of b is , the byte length of b is: 0
The value of c is labex, the byte length of c is: 5
The length of d is: 9
In the program, we first declared two empty strings and the string labex. You can see that their byte lengths and actual lengths are the same.
Converting Strings and Integers
We can use functions from the strconv package to convert between strings and integers:
import (
“fmt”
“strconv”
)
func main() {
// Declare a string a and an integer b
a, b := “233”, 223
// Use Atoi to convert an integer to a string
c, _ := strconv.Atoi(a)
// Use Sprintf and Itoa functions respectively
// to convert a string to an integer
d1 := fmt.Sprintf(“%d”, b)
d2 := strconv.Itoa(b)
fmt.Printf(“The type of a: %Tn“, a) // string
fmt.Printf(“The type of b: %Tn“, b) // int
fmt.Printf(“The type of c: %Tn“, c) // int
fmt.Printf(“The type of d1: %Tn“, d1) // string
fmt.Printf(“The type of d2: %Tn“, d2) // string
}
The expected output is as follows:
The type of b: int
The type of c: int
The type of d1: string
The type of d2: string
In the program, we use the Sprintf() function from the fmt package, which has the following format:
format is a string with escape sequences, a is a constant or variable that provides values for the escape sequences, and … means that there can be multiple variables of the same type as a. The string after the function represents that Sprintf returns a string. Here’s an example of using this function:
fmt.Println(a) // 1+2=3
In this code snippet, the format is passed with three integer variables 1, 2, and 3. The %d integer escape character in format is replaced by the integer values, and the Sprintf function returns the result after replacement, 1+2=3.
Also, note that when using strconv.Atoi() to convert an integer to a string, the function returns two values, the converted integer val and the error code err. Because in Go, if you declare a variable, you must use it, we can use an underscore _ to comment out the err variable.
When strconv.Atoi() converts correctly, err returns nil. When an error occurs during conversion, err returns the error message, and the value of val will be 0. You can change the value of string a and replace the underscore with a normal variable to try it yourself.
Concatenating Strings
The simplest way to concatenate two or more strings is to use the + symbol. We can also use the fmt.Sprintf() function to concatenate strings. Let’s take a look at an example:
import (
“fmt”
)
func main() {
a, b := “lan”, “qiao”
// Concatenate using the simplest method, +
c1 := a + b
// Concatenate using the Sprintf function
c2 := fmt.Sprintf(“%s%s”, a, b)
fmt.Println(a, b, c1, c2) // lan qiao labex labex
}
The expected output is as follows:
In the program, we also used the Sprintf() function from the fmt package to concatenate strings and print the results.
Removing Leading and Trailing Spaces from a String
We can use the strings.TrimSpace function to remove leading and trailing spaces from a string. The function takes a string as input and returns the string with leading and trailing spaces removed. The format is as follows:
Here is an example:
import (
“fmt”
“strings”
)
func main() {
a := ” t n labex n t hangzhou”
fmt.Println(strings.TrimSpace(a))
}
The expected output is as follows:
hangzhou
Summary
To summarize what we’ve learned in this lesson:
The relationship between strings and characters
Two ways to declare strings
Concatenating strings
Removing leading and trailing spaces from a string
In this lesson, we explained the strings we use in daily life. We’ve learned about the relationship between strings and characters, mastered string creation and declaration, and gained some knowledge of common string functions.
In the next lesson, we will learn about constants.
🚀 Practice Now: Go String Fundamentals
Want to Learn More?
🌳 Learn the latest Go Skill Trees
📖 Read More Go Tutorials
💬 Join our Discord or tweet us @WeAreLabEx