字符串与切片转换

本节内容主要代码位于 runtime/string.go, 基于 go1.16.4/amd64

以下面的代码进行说明

1
2
3
slice := []byte{'h', 'e', 'l', 'l', 'o'}
slice2str := string(slice)
str2slice := []byte(slice2str)

slice to string

底层将 byte slice 转换成 string 的函数为 slicebytetostring

1
func slicebytetostring(buf *tmpBuf, ptr *byte, n int) (str string) 

这个函数接收三个参数,*tmpBuf 是一个指向 byte 数组的指针,ptr 指向 slice 第一个元素的地址, n 表示切片的长度。

阅读更多

字符串相加

本节内容主要代码位于 runtime/string.go

以下面的代码进行说明

1
2
3
a := "Hello "
b := "World "
_ = a + b

当执行 a+b 的时候,底层上调用的是 concatstrings,并且将a, b 两个操作数作为 slice 传递进去,如下:

阅读更多

Golang 报错 package xxx is not in GOROOT or GOPATH 或者 cannot find package “xxx“ in any of

GO111MODULE=”off”

GO111MODULE="off" 的条件下,并且写的代码不在 $GOPATH/src 下,也就是说下面的 main.go 不在$GOPATH/src 目录下面,同时我想要使用当前项目目录下的另一个 module 里面的可导出标识符(函数、变量等),但是这个模块 不是标准库,或者说不在 GOROOT 里(一般我们不会修改 GOROOT 中的内容)

阅读更多