Go 语言入门很简单:String

简介: Go 也像 C 语言家族语言一样,使用双引号来声明字符串。Go 字符串可以使用 双引号(" ")或者 反引号(` `)来创建。双引号用来创建可解析的字符串,但不能用来引用多行,这也是大多数字符串的定义方式。反引号用来创建原生的字符串,这些字符串可以由多行组成。多用于多行消息,HTML 以及正则表达式。

前言

Go 也像 C 语言家族语言一样,使用双引号来声明字符串。


Go 字符串可以使用 双引号(" ")或者 反引号(` `)来创建。双引号用来创建可解析的字符串,但不能用来引用多行,这也是大多数字符串的定义方式。


反引号用来创建原生的字符串,这些字符串可以由多行组成。多用于多行消息,HTML 以及正则表达式。


比如我们这样声明一个字符串:

package main
import "fmt"
func main() {
  hello_Chinese := "您好"
  hello_English := "Hello"
  hello_Japanese := "こんにちは"
  hello_French := "Bonjour"
  fmt.Println(hello_Chinese)
  fmt.Println(hello_English)
  fmt.Println(hello_Japanese)
  fmt.Println(hello_French)
  longString := `
        Hello, my friend!
        .This is a long string`
  fmt.Println(longString)
}


运行以上代码, 我们可以看到 Go 也能支持非英文字符,比如 “您好”、“こんにちは”:

$ go run hello.go     
您好
Hello
こんにちは
Bonjour
        Hello, my friend!
        .This is a long string

字符串拼接

开发过程中难免会出现一些字符串追加或者拼接的功能,Go 语言提供字符串对加号 “+” 的支持,使用“ + ”操作符将两个字符串拼接起来:

str1 := "Hello "
str2 := "world"
str3 := str1 + str2
fmt.Println(str3) // Hello world


如果想要创建一个长的可解析字符串变量,但又不想在代码中写同意长的一行,也可以使用“ + ”拼接符将这些片段连接起来。


需要注意的是,Go 语言的字符串是不可变的,但它们支持“ += ”追加操作符。这种字符串连接的方法很容易阅读,非常适合简单的情况。 但是,虽然 Go 确实允许我们使用 +(或 +=)运算符连接字符串,但它并不是最有效的方法。 最好仅在添加很少的字符串时使用,而不是在热代码路径中。

text := "the very things that in the moment dampen our moods " +
        "can later be sources of intense gratification"
text += " and delight."
fmt.Println(text)


在大部分情况下,内置的 fmt.Sprintf 函数是一个更好的选择构建一个字符串。

str4 := fmt.Sprintf("%s %s", str1, str2)
fmt.Println(str4)  // Hello world


注意:“+” 号不支持不同类型的变量相加和拼接。

使用 fmt 包来格式化字符串

"%s" 序列是一个特殊的占位符,它告诉 Sprintf 函数在该位置插入字符串。还有其他不是字符串的序列,比如:


  • "%d" 表示整数
  • "%f" 表示浮点数
  • 或"%v"表示离开它以确定类型。


这些序列允许我们在不强制转换的情况下将数字和其他类型添加到字符串中。



这些函数类似于 C 中 printf 和 scanf 函数中的代码,以及 Python 中的旧式字符串格式化。


读者有兴趣可以自己去体验上述函数。

拆分字符串

string 包只需添加导入块中加入 import "strings",这个包为我们提供了许多字符串操作功能。其中之一是用分隔符拆分字符串并获得一段字符串的函数:

package main
import (
  "fmt"
  "strings"
)
func main() {
  myClass := "小张,小李,小王,大周"
  name := strings.Split(myClass, ",")
  fmt.Printf("%q", name)  // ["小张" "小李" "小王" "大周"]
}


string.Split 函数以字符串和分隔符作为参数。


在本例中,我们传入"小张,小李,小王,大周" 和分隔符 "," ,并收到一个字符串片段: ["小张" "小李" "小王" "大周"].

计数和查找子字符串

使用 strings 包,我们还可以计算一个字符串中的子字符串的非重叠实例的数量,该函数是strings.Count。


看一下如下的代码:

package main
import (
  "fmt"
  "strings"
)
func main() {
  test := "January February"
  count1 := strings.Count(test, "r")
  count2 := strings.Count(test, "uary")
  fmt.Println(count1, count2)  // 3 2
}

strconv 包

strconv 包提供了字符串和其他类型的数据之间进行转换的函数:


strconv.ParseInt(s, base, bits): 如果 s 能够转换成一个整数,则返回 int64 值和 nil ,否则返回 0 和 error ;如果 base 为 0 ,则表示要从 s 中判断进制的大小。

package main
import (
  "fmt"
  "strconv"
)
func main() {
  // 字符串转换我数字类型
  fmt.Println("---- demo String To Numeric----")
  str1_val1 := "5"
  str2_val2 := "2.8769"
  var err error
  var int_val1 int64
  int_val1, err = strconv.ParseInt(str1_val1, 10, 32) // base10, 64 size
  if err == nil {
    fmt.Println(int_val1)
  } else {
    fmt.Println(err)
  }
  var float_val2 float64
  float_val2, err = strconv.ParseFloat(str2_val2, 64) // 64 size
  if err == nil {
    fmt.Println(float_val2)
  } else {
    fmt.Println(err)
  }
  // 数字类型转字符串
  fmt.Println("---- demo numeric to string ----")
  num1 := 8
  num2 := 5.872
  var str_num1 string
  str_num1 = fmt.Sprintf("%d", num1)
  fmt.Println(str_num1)
  var str_num2 string
  str_num2 = fmt.Sprintf("%f", num2)
  fmt.Println(str_num2)
}


运行上述代码,结果为:

---- demo String To Numeric----
5
2.8769
---- demo numeric to string ----
8
5.872000
相关文章
|
Cloud Native 安全 Java
Go语言深度解析:从入门到精通的完整指南
🌟蒋星熠Jaxonic,Go语言探索者。深耕云计算、微服务与并发编程,以代码为笔,在二进制星河中书写极客诗篇。分享Go核心原理、性能优化与实战架构,助力开发者掌握云原生时代利器。#Go语言 #并发编程 #性能优化
816 43
Go语言深度解析:从入门到精通的完整指南
|
存储 安全 Java
【Golang】(4)Go里面的指针如何?函数与方法怎么不一样?带你了解Go不同于其他高级语言的语法
结构体可以存储一组不同类型的数据,是一种符合类型。Go抛弃了类与继承,同时也抛弃了构造方法,刻意弱化了面向对象的功能,Go并非是一个传统OOP的语言,但是Go依旧有着OOP的影子,通过结构体和方法也可以模拟出一个类。
602 2
|
Cloud Native 安全 Java
Go语言深度解析:从入门到精通的完整指南
🌟 蒋星熠Jaxonic,执着的星际旅人,用Go语言编写代码诗篇。🚀 Go语言以简洁、高效、并发为核心,助力云计算与微服务革新。📚 本文详解Go语法、并发模型、性能优化与实战案例,助你掌握现代编程精髓。🌌 从goroutine到channel,从内存优化到高并发架构,全面解析Go的强大力量。🔧 实战构建高性能Web服务,展现Go在云原生时代的无限可能。✨ 附技术对比、最佳实践与生态全景,带你踏上Go语言的星辰征途。#Go语言 #并发编程 #云原生 #性能优化
|
Cloud Native 安全 Java
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
881 1
|
Cloud Native Go API
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
759 0
|
Cloud Native Java Go
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
588 0
|
Cloud Native Java 中间件
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
620 0
|
Cloud Native Java Go
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
1788 0
|
数据采集 Go API
Go语言实战案例:多协程并发下载网页内容
本文是《Go语言100个实战案例 · 网络与并发篇》第6篇,讲解如何使用 Goroutine 和 Channel 实现多协程并发抓取网页内容,提升网络请求效率。通过实战掌握高并发编程技巧,构建爬虫、内容聚合器等工具,涵盖 WaitGroup、超时控制、错误处理等核心知识点。
|
数据采集 JSON Go
Go语言实战案例:实现HTTP客户端请求并解析响应
本文是 Go 网络与并发实战系列的第 2 篇,详细介绍如何使用 Go 构建 HTTP 客户端,涵盖请求发送、响应解析、错误处理、Header 与 Body 提取等流程,并通过实战代码演示如何并发请求多个 URL,适合希望掌握 Go 网络编程基础的开发者。