Go语言的使用字符串

Go语言中可以使用反引号或者双引号来定义字符串。

双引号:字符串使用双引号括起来,其中相关的转义字符将被替换。

反引号:字符串使用反引号括起来,其中相关的转义字符不会被替换。

创建字符串字面量,程序清单如下:

package main

import(
  "fmt"
)

func main(){
  s:="I am an interpreted string literal"
  fmt.Println(s)
}

运行结果如下:

I am an interpreted string literal

使用rune字面量,程序清单如下:

package main

import(
  "fmt"
)

func main(){
  s:="After a backslash, certain single character escapes represent special values\nn is a line feed or new line \n\t t is a tab"
  fmt.Println(s)
}

运行结果如下:

After a backslash, certain single character escapes represent special values
n is a line feed or new line 
	 t is a tab

原始字符串字面量,程序清单如下:

package main

import(
  "fmt"
)

func main(){
  s:=`After a backslash, certain single character escapes represent special values
  n is a line feed or new line
      t is a tab`
  fmt.Println(s)
}

运行结果如下:

After a backslash, certain single character escapes represent special values
  n is a line feed or new line
      t is a tab

将多个字符串拼接成一个,程序清单如下:

package main

import(
  "fmt"
)

func main(){
  s:="Oh sweet ignition"+" be my fuse"
  fmt.Println(s)
}

运行结果如下:

Oh sweet ignition be my fuse

使用复合赋值运算符拼接字符串,程序清单如下:

package main

import(
  "fmt"
)

func main(){
  s:="Can you hear me?"
  s+="\nHear me screamin'?"
  fmt.Println(s)
}

运行结果如下:

Can you hear me?
Hear me screamin'?

只能拼接类型为字符串的变量,如果将整数和字符串进行拼接将导致编译错误。Go标准库提供了strconv包,使用itoa来完成这种办法。

将其它类型转换为字符串,程序清单如下:

package main

import(
  "fmt"
  "strconv"
)

func main(){
  var i int =1
  var s string=" egg"
  intToString:=strconv.Itoa(i)
  var breakfast string=intToString+s
  fmt.Println(breakfast)
}

运行结果如下:

1 egg

使用缓冲区接拼字符串,程序清单如下:

package main

import(
  "fmt"
  "bytes"
)

func main(){
  var buffer bytes.Buffer
  for i:=0;i<500;i++{
    buffer.WriteString("z")
  }
  fmt.Println(buffer.String())
}

运行结果如下:

zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz

将字符串转换为小写,程序清单如下:

package main

import(
  "fmt"
  "strings"
)

func main(){
  fmt.Println(strings.ToLower("VERY IMPORTANT MESSAGE"))
}

运行结果如下:

very important message

查找子串,程序清单如下:

package main

import(
  "fmt"
  "strings"
)

func main(){
  fmt.Println(strings.Index("surface","face"))
  fmt.Println(strings.Index("moon","aer"))
}

运行结果如下:

3
-1

删除有开头和末尾的空白,程序清单如下:

package main

import(
  "fmt"
  "strings"
)

func main(){
  fmt.Println(strings.TrimSpace("I don't need all this space"))
}

运行结果如下:

I don't need all this space

 计算字符串长度

遍历字符串——获取每一个字符串元素

获取字符串的某一个字符

修改字符串

连接字符串

格式化

示例:Base64编码——电子邮件的基础编码格式

代码如下:

package main

import (
	"encoding/base64"
	"fmt"
)

func main() {
	message := "Away from keyboard. https://golang.org/"
	encodedMessage := base64.StdEncoding.EncodeToString([]byte(message))
	fmt.Println(encodedMessage)
	data, err := base64.StdEncoding.DecodeString(encodedMessage)
	if err != nil {
		fmt.Println(err)
	} else {
		fmt.Println(string(data))
	}
}

运行结果如下:

QXdheSBmcm9tIGtleWJvYXJkLiBodHRwczovL2dvbGFuZy5vcmcv
Away from keyboard. https://golang.org/

示例:从INI配置文件中查询需要的值

字符口中拼接:

1、直接使用运算符

2、mt.Sprintf()

3、strings.Join()

4、bytes.Buffer

5、strings.Builder

UTF-8编码

中文字符占用三个字符 。英文字母占用一个字节。

代码如下:

package main

import (
	t "tools"
)

func main() {
	s := "我们OK。"
	t.Printfln("s的长度:%v", len(s))
	byteSlice := []byte(s)
	t.Printfln("byteSlice:%v", byteSlice)
	runeSlice := []rune(s)
	t.Printfln("runeSlice: %v,runeSlice的长度:%v", runeSlice, len(runeSlice))
	t.Printfln("%08b", uint8(230))
}

运行结果如下:

[Running] go run "c:\Users\a-xiaobodou\OneDrive - Microsoft\Projects\Go\main.go"
s的长度:11
byteSlice:[230 136 145 228 187 172 79 75 227 128 130]
runeSlice: [25105 20204 79 75 12290],runeSlice的长度:5
11100110

[Done] exited with code=0 in 19.531 seconds

在Go语言中,rune类型实际上是uint32类型的别名,32个二进制位表示的无符号整数,由于每个字节有8个二进制位。rune类型是由4个字节组成。

用rune对字符串进行遍历

代码如下:

package main

import (
	t "tools"
)

func main() {
	s := "大家都说nice。"
	for i := 0; i < len(s); i++ {
		t.Printfln("字节序号: %d,内容: %v,类型: %T", i, s[i], s[i])
	}
	t.Printfln("------------")
	for i, v := range s {
		t.Printfln("字节序号: %d,内容: %v,类型: %T", i, v, v)
	}
	t.Printfln("------------")
	runeSlice := []rune(s)
	for i := 0; i < len(runeSlice); i++ {
		t.Printfln("字节序号: %d,内容: %v,类型: %T", i, runeSlice[i], runeSlice[i])
	}
	t.Printfln("------------")
	for i, v := range runeSlice {
		t.Printfln("字节序号: %d,内容: %v,类型: %T", i, v, v)
	}
}

运行结果如下:

[Running] go run "c:\Users\a-xiaobodou\OneDrive - Microsoft\Projects\Go\main.go"
字节序号: 0,内容: 229,类型: uint8
字节序号: 1,内容: 164,类型: uint8
字节序号: 2,内容: 167,类型: uint8
字节序号: 3,内容: 229,类型: uint8
字节序号: 4,内容: 174,类型: uint8
字节序号: 5,内容: 182,类型: uint8
字节序号: 6,内容: 233,类型: uint8
字节序号: 7,内容: 131,类型: uint8
字节序号: 8,内容: 189,类型: uint8
字节序号: 9,内容: 232,类型: uint8
字节序号: 10,内容: 175,类型: uint8
字节序号: 11,内容: 180,类型: uint8
字节序号: 12,内容: 110,类型: uint8
字节序号: 13,内容: 105,类型: uint8
字节序号: 14,内容: 99,类型: uint8
字节序号: 15,内容: 101,类型: uint8
字节序号: 16,内容: 227,类型: uint8
字节序号: 17,内容: 128,类型: uint8
字节序号: 18,内容: 130,类型: uint8
------------
字节序号: 0,内容: 22823,类型: int32
字节序号: 3,内容: 23478,类型: int32
字节序号: 6,内容: 37117,类型: int32
字节序号: 9,内容: 35828,类型: int32
字节序号: 12,内容: 110,类型: int32
字节序号: 13,内容: 105,类型: int32
字节序号: 14,内容: 99,类型: int32
字节序号: 15,内容: 101,类型: int32
字节序号: 16,内容: 12290,类型: int32
------------
字节序号: 0,内容: 22823,类型: int32
字节序号: 1,内容: 23478,类型: int32
字节序号: 2,内容: 37117,类型: int32
字节序号: 3,内容: 35828,类型: int32
字节序号: 4,内容: 110,类型: int32
字节序号: 5,内容: 105,类型: int32
字节序号: 6,内容: 99,类型: int32
字节序号: 7,内容: 101,类型: int32
字节序号: 8,内容: 12290,类型: int32
------------
字节序号: 0,内容: 22823,类型: int32
字节序号: 1,内容: 23478,类型: int32
字节序号: 2,内容: 37117,类型: int32
字节序号: 3,内容: 35828,类型: int32
字节序号: 4,内容: 110,类型: int32
字节序号: 5,内容: 105,类型: int32
字节序号: 6,内容: 99,类型: int32
字节序号: 7,内容: 101,类型: int32
字节序号: 8,内容: 12290,类型: int32

[Done] exited with code=0 in 24.409 seconds

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值