Golang基础篇-字符串及格式化输出

golang字符串

一个Go语言字符串是一个任意字节的常量序列。[] byte

go语言字符串字面量

在Go语言中,字符串字面量使用双引号 "" 或者反引号 ' 来创建。双引号用来创建可解析的字符串,支持转义,但不能用来引用多行;反引号用来创建原生的字符串字面量,可能由多行组成,但不支持转义,并且可以包含除了反引号外其他所有字符。双引号创建可解析的字符串应用最广泛,反引号用来创建原生的字符串则多用于书写多行消息,HTML以及正则表达式。

go语言字符串连接

 

s1 := "hello"

s2 := "word"

var build strings.Builder
build.WriteString(s1)
build.WriteString(s2)
s3 := build.String()
fmt.Println(s3)
 

go语言字符串转义字符

Go 语言的字符串常见转义符包含回车、换行、单双引号、制表符等,如下表所示。

转义符含义
\r 回车符(返回行首)
\n 换行符(直接跳到下一行的同列位置)
\t 制表符
\' 单引号
\" 双引号
\\ 反斜杠

实例

package main

import (
	"fmt"
)

func main() {
	fmt.Print("hello\tworld\n")
	fmt.Print("\"c:\\test\\\"")
}

运行结果

hello	world
"c:\test\"

go语言字符串切片操作

package main

import (
	"fmt"
)

func main() {
	str := "hello world"
	n := 3
	m := 5
	fmt.Println(str[n])   //获取字符串索引位置为n的原始字节
	fmt.Println(str[n:m]) //截取得字符串索引位置为 n 到 m-1 的字符串
	fmt.Println(str[n:])  //截取得字符串索引位置为 n 到 len(s)-1 的字符串
	fmt.Println(str[:m])  //截取得字符串索引位置为 0 到 m-1 的字符串
}

运行结果

108
lo
lo world
hello

go语言字符串常用方法

方法介绍
len(str) 求长度
+或fmt.Sprintf 拼接字符串
strings.Split 分割
strings.contains 判断是否包含
strings.HasPrefix,strings.HasSuffix 前缀/后缀判断
strings.Index(),strings.LastIndex() 子串出现的位置
strings.Join(a[]string, sep string) join操作

实例

package main

import (
	"fmt"
	"strings"
)

func main() {
	s := "hello world!"
	fmt.Printf("len(s): %v\n", len(s))
	fmt.Printf("strings.Split(s, \"\"): %v\n", strings.Split(s, " "))
	fmt.Printf("strings.Contains(s, \"hello\"): %v\n", strings.Contains(s, "hello"))
	fmt.Printf("strings.HasPrefix(s, \"hello\"): %v\n", strings.HasPrefix(s, "hello"))
	fmt.Printf("strings.HasSuffix(s, \"world!\"): %v\n", strings.HasSuffix(s, "world!"))
	fmt.Printf("strings.Index(s, \"l\"): %v\n", strings.Index(s, "l"))
	fmt.Printf("strings.LastIndex(s, \"l\"): %v\n", strings.LastIndex(s, "l"))
}

运行结果

len(s): 14
strings.Split(s, ""): [hello world!]
strings.Contains(s, "hello"): true
strings.HasPrefix(s, "hello"): true
strings.HasSuffix(s, "world!"): true
strings.Index(s, "l"): 2
strings.LastIndex(s, "l"): 9

byte和rune类型

组成每个字符串的元素叫做“字符”,可以通过遍历或者单个获取字符串元素获得字符。 字符用单引号(’)包裹起来,如:

package main

import "fmt"

func main() {
	var a = '华'
	var b = 'a'
	fmt.Printf("a: %v,%c\n", a, a)
	fmt.Printf("b: %v,%c\n", b, b)
}

运行结果

a: 21326,华
b: 97,a

Go 语言的字符有以下两种:

  1. uint8类型,或者叫 byte 型,代表了ASCII码的一个字符。
  2. rune类型,代表一个 UTF-8字符。

当需要处理中文、日文或者其他复合字符时,则需要用到rune类型。rune类型实际是一个int32。

Go 使用了特殊的 rune 类型来处理 Unicode,让基于 Unicode 的文本处理更为方便,也可以使用 byte 型进行默认字符串处理,性能和扩展性都有照顾。

 

golang格式化输出

下面实例使用到的结构体

type Website struct {
	    Name string
}
// 定义结构体变量
var site = Website{Name:"duoke360"}

占位符

普通占位符

占位符						说明						举例										输出
%v		相应值的默认格式。								Printf("%v", site),Printf("%+v", site)	{duoke360},{Name:duoke360}
		在打印结构体时,“加号”标记(%+v)会添加字段名
%#v		相应值的Go语法表示							Printf("#v", site)						main.Website{Name:"duoke360"}
%T		相应值的类型的Go语法表示						Printf("%T", site)						main.Website
%%		字面上的百分号,并非值的占位符					Printf("%%")							%

布尔占位符

占位符						说明						举例										输出
%t		单词 true 或 false。							Printf("%t", true)						true

整数占位符

占位符						说明						举例									输出
%b		二进制表示									Printf("%b", 5)						101
%c		相应Unicode码点所表示的字符					Printf("%c", 0x4E2D)				中
%d		十进制表示									Printf("%d", 0x12)					18
%o		八进制表示									Printf("%o", 10)					12
%q		单引号围绕的字符字面值,由Go语法安全地转义		Printf("%q", 0x4E2D)				'中'
%x		十六进制表示,字母形式为小写 a-f				Printf("%x", 13)					d
%X		十六进制表示,字母形式为大写 A-F				Printf("%x", 13)					D
%U		Unicode格式:U+1234,等同于 "U+%04X"			Printf("%U", 0x4E2D)				U+4E2D

浮点数和复数的组成部分(实部和虚部)

占位符						说明												举例									输出
%b		无小数部分的,指数为二的幂的科学计数法,与 strconv.FormatFloat	
		的 'b' 转换格式一致。例如 -123456p-78
%e		科学计数法,例如 -1234.456e+78									Printf("%e", 10.2)							1.020000e+01
%E		科学计数法,例如 -1234.456E+78									Printf("%e", 10.2)							1.020000E+01
%f		有小数点而无指数,例如 123.456									Printf("%f", 10.2)							10.200000
%g		根据情况选择 %e 或 %f 以产生更紧凑的(无末尾的0)输出				Printf("%g", 10.20)							10.2
%G		根据情况选择 %E 或 %f 以产生更紧凑的(无末尾的0)输出				Printf("%G", 10.20+2i)						(10.2+2i)

字符串与字节切片

占位符						说明												举例									输出
%s		输出字符串表示(string类型或[]byte)							Printf("%s", []byte("多课网"))		多课网
%q		双引号围绕的字符串,由Go语法安全地转义							Printf("%q", "多课网")				"多课网"
%x		十六进制,小写字母,每字节两个字符								Printf("%x", "golang")						676f6c616e67
%X		十六进制,大写字母,每字节两个字符								Printf("%X", "golang")						676F6C616E67

指针

占位符						说明												举例									输出
%p		十六进制表示,前缀 0x											Printf("%p", &site)							0x4f57f0

实例

type user struct {
	name string
}

func main() {
	u := user{"guo"}
	//Printf 格式化输出
	fmt.Printf("% + v\n", u)     //格式化输出结构
	fmt.Printf("%#v\n", u)       //输出值的 Go 语言表示方法
	fmt.Printf("%T\n", u)        //输出值的类型的 Go 语言表示
	fmt.Printf("%t\n", true)     //输出值的 true 或 false
	fmt.Printf("%b\n", 1024)     //二进制表示
	fmt.Printf("%c\n", 11111111) //数值对应的 Unicode 编码字符
	fmt.Printf("%d\n", 10)       //十进制表示
	fmt.Printf("%o\n", 8)        //八进制表示
	fmt.Printf("%q\n", 22)       //转化为十六进制并附上单引号
	fmt.Printf("%x\n", 1223)     //十六进制表示,用a-f表示
	fmt.Printf("%X\n", 1223)     //十六进制表示,用A-F表示
	fmt.Printf("%U\n", 1233)     //Unicode表示
	fmt.Printf("%b\n", 12.34)    //无小数部分,两位指数的科学计数法6946802425218990p-49
	fmt.Printf("%e\n", 12.345)   //科学计数法,e表示
	fmt.Printf("%E\n", 12.34455) //科学计数法,E表示
	fmt.Printf("%f\n", 12.3456)  //有小数部分,无指数部分
	fmt.Printf("%g\n", 12.3456)  //根据实际情况采用%e或%f输出
	fmt.Printf("%G\n", 12.3456)  //根据实际情况采用%E或%f输出
	fmt.Printf("%s\n", "wqdew")  //直接输出字符串或者[]byte
	fmt.Printf("%q\n", "dedede") //双引号括起来的字符串
	fmt.Printf("%x\n", "abczxc") //每个字节用两字节十六进制表示,a-f表示
	fmt.Printf("%X\n", "asdzxc") //每个字节用两字节十六进制表示,A-F表示
	fmt.Printf("%p\n", 0x123)    //0x开头的十六进制数表示
}
posted @ 2022-09-16 09:46  威小龙  阅读(2296)  评论(0)    收藏  举报