Go Programming | String Basics | Character Encoding
Labby
Posted on August 12, 2024
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
:
touch ~/project/string.go
Write the following code:
package main
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:
labex shiyanlou Monday Hangzhou
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:
package main
import "fmt"
func main(){
x := "shiyanlou\nlabex"
fmt.Println(x)
}
The expected output is as follows:
shiyanlou
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:
package main
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:
package main
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: %d\n", a, len(a))
fmt.Printf("The value of b is %s, the byte length of b is: %d\n", b, len(b))
fmt.Printf("The value of c is %s, the byte length of c is: %d\n", c, len(c))
// Output string length
fmt.Printf("The length of d is: %d\n", utf8.RuneCountInString(d))
}
The expected output is as follows:
The value of a is , the byte length of a is: 0
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:
package main
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: %T\n", a) // string
fmt.Printf("The type of b: %T\n", b) // int
fmt.Printf("The type of c: %T\n", c) // int
fmt.Printf("The type of d1: %T\n", d1) // string
fmt.Printf("The type of d2: %T\n", d2) // string
}
The expected output is as follows:
The type of a: string
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:
func Sprintf(format string, a ...interface{}) string
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:
a = Sprintf("%d+%d=%d", 1, 2, 3)
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:
package main
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:
lan qiao labex labex
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:
func TrimSpace(s string) string
Here is an example:
package main
import (
"fmt"
"strings"
)
func main() {
a := " \t \n labex \n \t hangzhou"
fmt.Println(strings.TrimSpace(a))
}
The expected output is as follows:
labex
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
Posted on August 12, 2024
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.