map:
m:=make(map[string]int)
m["one"]=1
v,ok:=m["one"] //v=1,ok=true
delete(m,"one")//删除元素
for k,v range m{
...
}//无序遍历
结构体:
func checkPassword(u user, password string) bool {
return u.password == password
}
func checkPassword2(u *user, password string) bool {
return u.password == password
} //使用结构体指针可以避免结构体拷贝
字符串:
package main
import (
"fmt"
"strings"
)
func main() {
a := "hello"
fmt.Println(strings.Contains(a, "ll")) // true
fmt.Println(strings.Count(a, "l")) // 2
fmt.Println(strings.HasPrefix(a, "he")) // 判断前缀,true
fmt.Println(strings.HasSuffix(a, "llo")) // 判断后缀,true
fmt.Println(strings.Index(a, "ll")) // 2
fmt.Println(strings.Join([]string{"he", "llo","world"}, "-")) // he-llo-world
fmt.Println(strings.Repeat(a, 2)) // 复制字符串count次,hellohello
fmt.Println(strings.Replace(a, "e", "E", -1)) // 将a中的"e"替换成"E",数字代表替换次数,为负数全部替换,hEllo
fmt.Println(strings.Split("a-b-c", "-")) // [a b c]
fmt.Println(strings.ToLower(a)) // hello
fmt.Println(strings.ToUpper(a)) // HELLO
fmt.Println(len(a)) // 5
b := "你好"
fmt.Println(len(b)) // 6
}
格式化:
可以用%v打印任意类型变量
fmt.Printf("s=%v\n", s) // s=hello
fmt.Printf("n=%v\n", n) // n=123
fmt.Printf("p=%v\n", p) // p={1 2}
序列化:
type userInfo struct {
Name string
Age int `json:"Testage"` //json标签表示序列化后字段名称
Hobby []string
}
a := userInfo{Name: "wang", Age: 18, Hobby: []string{"Golang", "TypeScript"}}
buf, err := json.Marshal(a) //返回ASCII码
if err != nil {
panic(err)
}
fmt.Println(buf) // [123 34 78 97...]
fmt.Println(string(buf)) // {"Name":"wang","Testage":18,"Hobby":["Golang","TypeScript"]}
时间处理:
//time.Time
now := time.Now() //获取当前时间
fmt.Println(now) // 2022-03-27 18:04:59.433297 +0800 CST m=+0.000087933
t := time.Date(2022, 3, 27, 1, 25, 36, 0, time.UTC) //使用time.Date构造一个time.Time
t2 := time.Date(2022, 3, 27, 2, 30, 36, 0, time.UTC)
fmt.Println(t) // 2022-03-27 01:25:36 +0000 UTC
fmt.Println(t.Year(), t.Month(), t.Day(), t.Hour(), t.Minute()) // 2022 March 27 1 25
fmt.Println(t.Format("2006-01-02 15:04:05")) //格式化时间 // 2022-03-27 01:25:36
diff := t2.Sub(t) //计算时间差
fmt.Println(diff) // 1h5m0s
fmt.Println(diff.Minutes(), diff.Seconds()) // 65 3900
t3, err := time.Parse("2006-01-02 15:04:05", "2022-03-27 01:25:36") //time.Parse 函数用于将字符串解析为 time.Time 类型,layout: 解析的时间格式。Go 使用特定的时间表示法(例如,"2006-01-02 15:04:05")来定义布局,必须使用这个特定的日期和时间来表示格式。value: 要解析的时间字符串。
if err != nil {
panic(err)
}
fmt.Println(t3 == t) // true
fmt.Println(now.Unix()) // 1648738080,返回时间戳
数字、字符串转换:
f, _ := strconv.ParseFloat("1.234", 64) //参数:转换字符串,转换后位数,通常为32或64
fmt.Println(f) // 1.234
n, _ := strconv.ParseInt("111", 10, 64) //参数:转换字符串,进制(2,8,10或16进制,0表示自动判断),转换后位数
fmt.Println(n) // 111
n, _ = strconv.ParseInt("0x1000", 0, 64)
fmt.Println(n) // 4096
n2, _ := strconv.Atoi("123") //字符串转数字
fmt.Println(n2) // 123
FormatXXX:字符串转XXX,如float、int等
func FormatFloat(f float64, fmt byte, prec int, bitSize int) string //浮点数转字符串,int类似
//fmt指定格式类型指定格式的类型,可以是以下 之一:
'f': 以十进制形式表示浮点数。
'e': 以科学计数法表示浮点数。
'g': 根据值的大小自动选择格式(十进制 或科学计数法)。
//prec表示保留小数点后几位,-1表示自动选择