Go 字符串拼接


1.直接使用运算符

func BenchmarkAddStringWithOperator(b *testing.B) {
    hello := "hello"
    world := "world"
    for i := 0; i < b.N; i++ {
        _ = hello + "," + world
    }
}

go 里面的字符串都是不可变的,每次运算都会产生一个新的字符串,所以会产生很多临时的无用的字符串,不仅没有用,还会给 gc 带来额外的负担,所以性能比较差。

2.fmt.Sprintf()

func BenchmarkAddStringWithSprintf(b *testing.B) {
    hello := "hello"
    world := "world"
    for i := 0; i < b.N; i++ {
        _ = fmt.Sprintf("%s,%s", hello, world)
    }
}

内部使用 []byte 实现,不像直接运算符这种会产生很多临时的字符串,但是内部的逻辑比较复杂,有很多额外的判断,还用到了 interface,所以性能也不是很。

阅读全文

Go 字符串删除


删除在 s 字符串的头部和尾部中由 cutset 指定的字符,并返回删除后的字符串。

func Trim(s string, cutset string) string

删除首部和尾部的 ! 和空格

// "Achtung! Achtung"
fmt.Printf("%q\n", strings.Trim(" !!! Achtung! Achtung! !!! ", "! "))
// "a lone gopher"
fmt.Printf("%q\n", strings.TrimSpace(" \t\n a lone gopher \n\t\r\n"))
阅读全文

Go 字符串替换


package main
     
import (
    "fmt"
    "strings"
)
     
func main() {
    str := "welcome to beijing"
    strF = strings.Replace(str, " ", ",", -1)
    fmt.Println(strF)
    strS = strings.Replace(str, " ", ",", 1)
    fmt.Println(strS)
}

给定字符串转换为英文标题的首字母大写的格式,不能正确处理 unicode 标点。

func Title(s string) string

所有字母转换为小写。

func ToLower(s string) string

所有字母转换为大写。

func ToUpper(s string) string
// Her Royal Highness
fmt.Println(strings.Title("her royal highness"))
// gopher123
fmt.Println(strings.ToLower("Gopher123"))
// GOPHER
fmt.Println(strings.ToUpper("Gopher"))
阅读全文

Go 字符串查找


判断字符串 string 中是否有字符 chars,如果有返回 true,否则返回 false。

str := "Hello World"
fmt.Println(strings.Contains(str, "l"))
fmt.Println(strings.Contains(str, "T"))

判断字符串 string 中是否有字符 chars 中的任意一个字符,如果有返回 true,否则返回 false。

fmt.Println(strings.ContainsAny(str, "Wa"))
fmt.Println(strings.ContainsAny(str, "Ta"))

检查字符串 string 中字符 chars 出现的总次数。

fmt.Println(strings.Count(str, "l"))
fmt.Println(strings.Count(str, "T"))

判断字符串 string 是否以字符 chars 开头,如果是返回 true,否则返回 false。

fmt.Println(strings.HasPrefix(str, "He"))
fmt.Println(strings.HasPrefix(str, "T"))

判断字符串 string 是否以字符 chars 开头,如果是返回 true,否则返回 false。

fmt.Println(strings.HasSuffix(str, "d"))
fmt.Println(strings.HasSuffix(str, "a"))

判断字符串 string 中字符 chars 第一次出现的位置,如果有返回位置,否则返回 -1。

fmt.Println(strings.Index(str, "l"))
fmt.Println(strings.Index(str, "T"))

判断字符串 string 中是否存在字符 chars 中的任意字符,如果有返回第一次出现的位置,否则返回 -1。

fmt.Println(strings.IndexAny(str, "Wa"))
fmt.Println(strings.IndexAny(str, "Ta"))

判断字符串 string 中字符 chars 最后一次出现的位置,如果有返回位置,否则返回 -1。

fmt.Println(strings.LastIndex(str, "l"))
fmt.Println(strings.LastIndex(str, "T"))

判断字符串 string 中是否存在字符 chars 中的任意字符,如果有返回最后一次出现的位置,否则返回 -1。

fmt.Println(strings.LastIndexAny(str, "la"))
fmt.Println(strings.LastIndexAny(str, "Ta"))
阅读全文

Go 中 string int int64 float64 类型相互转换


主要使用包 strconv

package main
    
import "strconv"
    
func main() {
    // string to int
    int, _ := strconv.Atoi(string)
    // string to int64
    int64, _ := strconv.ParseInt(string, 10, 64)
    // string to float64
    float64, _ := strconv.ParseFloat(value, 64)
    // int to string
    string := strconv.Itoa(int)
    // int64 to string
    string := strconv.FormatInt(int64, 10)
}
阅读全文

使用 Visual Studio Code 开发 Go


设置 Windows 环境变量:

GOPATH = E:\Soft\GoPath
GOROOT = C:\Program Files\Go
Path = %SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\;C:\Program Files\TortoiseSVN\bin;C:\Program Files\Git\cmd;C:\Program Files\Git\mingw64\bin;C:\Program Files\Git\usr\bin;C:\Program Files\Python\;C:\Program Files\Python\Scripts;C:\Program Files\Go\bin;

阅读全文

安装 Go


Mac OS X 安装 go:

  • 下载 go 安装包并执行
  • 配置环境变量
  • 执行编译测试
export GOROOT=/usr/local/go
export GOPATH=$HOME/.gopath
export PATH=$PATH:$GOROOT/bin

GOROOT:
其中 GOROOT 是 go 的安装目录,也是 go 二进制执行文件的路径。

GOPATH:
go install/go get 和 go 的工具等会用到 GOPATH 环境变量。

GOPATH 是作为编译后二进制的存放目的地和 import 包时的搜索路径。其实也是你的工作目录,你可以在 src 下创建你自己的 go 源文件,然后开始工作。GOPATH 之下主要包含三个目录:bin、pkg、src。

bin 目录主要存放可执行文件;pkg 目录存放编译好的库文件;src 目录下主要存放 go 的源文件。不要把 GOPATH 设置成 go 的安装路径。



阅读全文