Go常用函数

常用内置函数:

close:用于管道通信

len/cap:len 用于返回某个类型的长度或数量(字符串、数组、切片、map 和管道);cap 是容量的意思,用于返回某个类型的最大容量(只能用于切片和 map)

new/make:new 和 make 均是用于分配内存:new 用于值类型和用户定义的类型,如自定义结构,make 用于内置引用类型(切片、map 和管道)。它们的用法就像是函数,但是将类型作为参数:new(type)、make(type)。new(T) 分配类型 T 的零值并返回其地址,也就是指向类型 T 的指针。它也可以被用于基本类型:v := new(int)。make(T) 返回类型 T 的初始化之后的值,因此它比 new 进行更多的工作。new() 是一个函数,不要忘记它的括号
copy/append:用于复制和连接切片

panic/recover:两者均用于错误处理机制

print/println:底层打印函数,在部署环境中建议使用 fmt 包

complex/real imag:用于创建和操作复数

参考:https://blog.csdn.net/weixin_44123908/article/details/107288543

其他常用函数:

1.获取当前时间

时间戳(秒):time.Now().Unix

日期:time.Now().Format(“2006-01-02 15:04:05”)

注意:参数必须是 2006-01-02 15:04:05 而不能是自定义的年月日时间,不然时间不准(一串神奇的数字)

2.字符串与int转换

i,_ := strconv.Atoi(“3”)//将字符串类型的整数转换为int类型

a := strconv.Itoa(32) //将int类型数据转换为对应的字符串表示

3.结构体json序列化

chatMsg := &ChatMsg{}

err := json.Unmarshal([]byte(msg), chatMsg) //json转结构体

buf, _ := json.Marshal(chatMsg) //结构体转json

4.删除切片元素

mySlice := make([]int, 5) //创建一个初始元素个数为5的数组切片,元素初始值为0

mySlice = append(mySlice[:i], mySlice[i+1:]…) //删除下标为i的元素

mySlice = append(mySlice[:0], mySlice[1:]…) //删除第1个元素

5.url encode/decode

encodeUrl:= url.QueryEscape(urltest)

decodeUrl,err := url.QueryUnescape(encodeUrl)

6.base64编码

encodeString := base64.StdEncoding.EncodeToString(input)

decodeBytes, err := base64.StdEncoding.DecodeString(encodeString)

7.获取字符串长度

tips := “忍者”

len := len(tips) //len=6 字节数

len := utf8.RuneCountInString(tips) //len=2 字符数

8.SubString //可用于字符串截取

1
2
3
4
5
6
7
8
9
10
11
12
13
func SubString(str string, start int32, end int32) string {
result := []rune(str)
length := int32(len(result))
if start < 0 || start > length {
return str
}
if end < 0 || end > length {
return str
}
return string(result[start:end])
}
//注意end参数的取值
result = SubString(result, 0, int32(len([]rune(result)))-1)

9.结构体类型断言

logger := &log.Logger{}

fl, ok := interface{}(logger).(*FileLogger)

1
2
1.类型断言变量一定要是一个接口变量,否则报错 invalid type assertion: xxx (non-interface type xxx on left);
2.使用类型断言的思路,应该是接收到一个接口值,但不确定这个值具体的类型,然后通过类型断言来判断;

参考:https://blog.csdn.net/Sunburst_Lf/article/details/104651511/

10.将int切片转成以分号分隔的字符串

1
2
3
4
5
6
7
func main() {
slice := []int{1, 2, 3, 4, 5, 6, 7, 8, 9}
str := strings.Replace(strings.Trim(fmt.Sprint(slice), "[]"), " ", ";", -1)
fmt.Println("string:", str)
}
输出:
1;2;3;4;5;6;7;8;9

11.将string切片转成以分号分隔的字符串

1
2
3
4
5
6
7
func main() {
slice := []string{"peer0.org1.example.com","peer1.org1.example.com"}
str := strings.Replace(strings.Trim(fmt.Sprint(slice), "[]"), " ", ";", -1)
fmt.Println("string:", str)
}
输出:
peer0.org1.example.com;peer1.org1.example.com