千夜同学 发布的文章

删除在 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"))

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"))

判断字符串 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"))

主要使用包 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)
}

设置 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;

- 阅读剩余部分 -

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 的安装路径。

- 阅读剩余部分 -

分支合并,有两个选择,一个是 merge,另一个是 rebase

  1. mergerebase 合并后的结果是一模一样的,形象的说,二者是殊途同归。
  2. 使用 rebase 后的 commit 与之前的 commit,它们的 SHA-1 值不同,Git 会把它们看成两次提交。

现在社区中推荐的主流 Git 合作方法,也是利用 Rebase 命令,即 Fork 一个代码库后,保留一个 remote 分支用来跟近主库进度,另开一个 feature 分支来打 patch,当 patch 打好后,在本地同步一下 remote 分支上的代码,保持与主库一致,如果在你打 patch 这段时间,主库发生了变化,那么你就需要在本地预先做一次 rebase 操作,以保证你的改动是构建在主库最新代码之上的。这其实相当与你帮助作者在本地处理好了冲突,这样作者再合并你的代码时候,也就能比较轻松了。换个角度,其实使用 rebase 这个过程也是一个自我检查的过程,可以强制你对改动进行 Review,从而减轻贡献者和所有者之间的工作量。因为没有人比你更熟悉你的代码。

git pull —rebase,这个命令在实际使用中的出场率还是很高的。
我们先从 git pull 说起,git pull 完整的应该是 git fetch + git merge FETCH_HEAD,默认时候 git pull 会先拉取代码,再进行 merge,上面说了使用 merge 会多出一条合并的 commit 以及一条分支线来,如果 commitmerge 频繁的话,可能会出现下图这样的情况,但是 rebase 则不同,其会保持线性,这样提交记录看起来就会整洁许多,使用 rebase 就是这个意思用 git rebase 取代。
git-rebase-1.png

假设有如下分支图:
unmerge1.png

注:Git 分支图中的箭头表示依赖关系,并不是分支发展路线。发展路线和箭头是相反的。也就是图中是从 C1 开始一直发展到 C12 的。

假设要回滚 C10。

第一种解决方案是将 master 回退到 C8,然后将两个特性分支 jk/post-checkoutdb/push-cleanup 合并过来。

git checkout master
git reset --hard [sha_of_C8]
git merge jk/post-checkout
git merge db/push-cleanup

完成之后,分支图如下:
unmerge2.png

- 阅读剩余部分 -