GO语言语法基础10 —— 字符串 | 青训营

134 阅读3分钟

一、字符串的定义:

字符串是计算机科学中的一种数据类型,用于表示文本或字符序列。在大多数编程语言中,字符串由一系列字符组成,可以是字母、数字、符号或空格等。

二、GO语言字符串的特点:

在GO语言中字符串是一种不可改变(immutable)的字节序列,使用UTF-8编码来表示Unicode字符。在Go中,字符串采用双引号(")或反引号()包裹起来。

三、详细解读:

例子:

package main
import (
	"fmt"
	"strings"
)

func main() {
	a := "hello"
	fmt.Println(strings.Contains(a, "ll"))                // true
	fmt.Println(strings.Count(a, "l"))                    // 2
	fmt.Println(strings.HasPrefix(a, "he"))               // true
	fmt.Println(strings.HasSuffix(a, "llo"))              // true
	fmt.Println(strings.Index(a, "ll"))                   // 2
	fmt.Println(strings.Join([]string{"he", "llo"}, "-")) // he-llo
	fmt.Println(strings.Repeat(a, 2))                     // hellohello
	fmt.Println(strings.Replace(a, "e", "E", -1))         // hEllo
	fmt.Println(strings.Split("a-b-c", "-"))              // [a b c]
	fmt.Println(strings.ToLower(a))                       // hello
	fmt.Println(strings.ToUpper(a))                       // HELLO
	fmt.Println(len(a))                                   // 5
	b := "你好"
	fmt.Println(len(b)) // 6
}

    1. 字符串字面量
    • 使用双引号(")定义字符串字面量,例如:"Hello, Go!"
    • 使用反引号(```)定义原始字符串字面量,可以包含转义字符和多行文本。
    1. 字符串类型
    • Go语言中的字符串类型为string
    • 字符串类型是不可变的,一旦创建就不能修改其内容。
    1. 字符串操作
    • 字符串拼接:使用+操作符将两个字符串拼接起来。
    • 字符串长度:使用len函数获取字符串的字节数。
    • 字符串索引:可以通过索引访问字符串的单个字符,索引从0开始。
    • 切片操作:通过切片表达式可以提取字符串的子串。
    • 字符串比较:可以使用==!=<><=>=等操作符对字符串进行比较。
    1. 字符串转换
    • 字符串到字节切片:使用[]byte将字符串转换为字节切片。
    • 字符串到字符切片:使用[]rune将字符串转换为Unicode字符切片。
    • 字节切片到字符串:使用string将字节切片转换为字符串。
    • Unicode字符切片到字符串:使用string将Unicode字符切片转换为字符串。
    1. 字符串操作函数
    • strings包提供了许多用于处理字符串的函数,例如strings.Containsstrings.HasPrefixstrings.Join等等。
    • strconv包提供了字符串和基本数据类型之间的相互转换函数,例如strconv.Atoistrconv.Itoa等等。

四、字符串格式化:

package main

import "fmt"

type point struct {
	x, y int
}

func main() {
	s := "hello"
	n := 123
	p := point{1, 2}
	fmt.Println(s, n) // hello 123
	fmt.Println(p)    // {1 2}

	fmt.Printf("s=%v\n", s)  // s=hello
	fmt.Printf("n=%v\n", n)  // n=123
	fmt.Printf("p=%v\n", p)  // p={1 2}
	fmt.Printf("p=%+v\n", p) // p={x:1 y:2}
	fmt.Printf("p=%#v\n", p) // p=main.point{x:1, y:2}

	f := 3.141592653
	fmt.Println(f)          // 3.141592653
	fmt.Printf("%.2f\n", f) // 3.14
}

在Go语言中,格式化字符串是通过使用fmt包来实现的。fmt包提供了许多用于格式化和输出字符串的函数。

以下是一些常用的字符串格式化操作:

  1. 使用占位符进行格式化:
    • %v:通用占位符,根据变量的值自动选择格式。
    • %d:十进制整数。
    • %f:浮点数。
    • %s:字符串。
    • %t:布尔值。
    • %c:字符(Unicode码点)。
    • %b:二进制表示。
    • %o:八进制表示。
    • %x:小写的十六进制表示。
    • %X:大写的十六进制表示。

示例:

age := 25
fmt.Printf("My age is %d\n", age)  // 输出:My age is 25

temperature := 36.5
fmt.Printf("The temperature is %.1f\n", temperature)  // 输出:The temperature is 36.5

name := "John"
fmt.Printf("Hello, %s!\n", name)  // 输出:Hello, John!
  1. 格式化宽度和精度:
    • 可以在占位符中指定宽度和精度,例如:%5d%.2f等。
    • 宽度指定域的最小字符数。
    • 精度用于浮点数,指定小数部分的位数。

示例:

num := 123
fmt.Printf("Number: %5d\n", num)  // 输出:Number:   123

pi := 3.14159
fmt.Printf("Pi: %.2f\n", pi)  // 输出:Pi: 3.14
  1. 使用PrintfSprintf函数:
    • Printf函数将格式化后的字符串直接打印到标准输出。
    • Sprintf函数将格式化后的字符串保存到一个变量中,而不打印。

示例:

age := 30
str := fmt.Sprintf("I am %d years old.", age)
fmt.Println(str)  // 输出:I am 30 years old.

除了上述示例中的常用操作外,fmt包还提供了其他的格式化功能,例如对齐、填充字符、指定输出宽度等。可以根据具体需求查阅fmt包的文档获取更多信息[。](FMT 包 - FMT - Go 包)