常用包介绍
包的概念就是我们程序中的目录,包在实际应用中是非常常见的。Go语言提供了很多内置包,例如:fmt、strings、strconv、os、io等等。
strings包
strings包主要针对utf-8编码,实现一些简单函数。
// 是否包含指定内容,返回bool类型
s1 := "你好,世界!"
fmt.Println(strings.Contains(s1, "世界")) // true
// 是否包含指定的字符串中任意一个字符,有一个出现过,就返回true
fmt.Println(strings.ContainsAny(s1, "2")) // false
// 返回指定字符出现的次数
fmt.Println(strings.Count(s1, "好")) // 1
// 查看是否位于指定字符串的开头
fmt.Println(strings.HasPrefix(s1, "你好")) // true
// 查看是否位于指定字符串的结尾
fmt.Println(strings.HasSuffix(s1, "世界!")) // true
// 查找指定字符串在字符串中存在的位置,如果不存在返回-1
fmt.Println(strings.Index(s1, "世界")) // 3
// 查找字符串中任意一个字符出现在字符串中的位置
fmt.Println(strings.IndexAny(s1, "你好")) // 0
// 查找指定字符串出现在字符串中最后一个的位置
fmt.Println(strings.LastIndex(s1, "好")) // 1
// 字符串的拼接
s2 := []string{"123", "456", "789"}
s3 := strings.Join(s2, "-")
fmt.Println(s3) // 123-456-789
// 字符串的切割
s4 := strings.Split(s3, "-")
fmt.Println(s4) // [123 456 789]
// 字符串的替换
s5 := "你好,世界!"
s6 := strings.Replace(s5, "世界", "Go", 1) // 1 只能替换一次 -1 全部替换
fmt.Println(s6) // 你好,Go!
// 字符串的截取
s7 := "你好,世界!"
s8 := s7[0:3]
fmt.Println(s8) // 你好,
strconv包
主要用于字符串和基本数据类型的转换
//str := "aa" + 100
// 字符串和整型数据不能放在一起,所以需要将100,转换为字符串
// +号再字符串中标识字符串的连接,在整型中标识数据的计算
str := "aa" + strconv.Itoa(100)
println(str) // aa100
// string转bool
s1 := "true"
b, err := strconv.ParseBool(s1)
if err != nil {
fmt.Println(err) // strconv.ParseBool: parsing "true": invalid syntax
}
fmt.Printf("%T, %t\n", b, b) // bool, true
// string转int
s2 := "100"
i, err := strconv.ParseInt(s2, 10, 64)
if err != nil {
fmt.Println(err) // strconv.ParseInt: parsing "100": invalid syntax
}
fmt.Printf("%T, %d\n", i, i) // int64, 100
// 整型转为字符串
s3 := strconv.Itoa(100)
fmt.Printf("%T, %s\n", s3, s3) // string, 100
// 字符串转为整型
j, e := strconv.Atoi(s3)
if e != nil {
fmt.Println(e) // strconv.Atoi: parsing "100": invalid syntax
}
fmt.Printf("%T, %d\n", j, j) // int, 100
time包
time包操作的都是时间,时间的单位都包括年、月、日、时、分、秒、毫秒、微秒、纳秒、皮秒
// 获取当前时间
t := time.Now()
fmt.Println(t) // 2022-11-14 16:45:57.201000 +0800 CST m=+0.000000000
// 获取的时间后面的信息是时区
// 格式化时间
s := t.Format("2006-2-2 15:04:05")
fmt.Println(s) // 2006-1-2 15:04:05
以上的时间格式都是time.Time类型的数据,如果将string类型的字符串时间转为具体时间格式则用time包下的parse函数。
// 字符串类型的时间
str := "2022年11月15日"
// 第一个参数是模板,第二个是要转换的时间字符串
s, _ := time.Parse("2006年1月2日", str)
fmt.Println(s) // 2022-11-15 00:00:00 +0000 UTC
// 获取年月日
year, month, day := time.Now().Date()
fmt.Println(year, month, day) // 14 November 2022
// 获取时分秒
hour, minute, second := time.Now().Clock()
fmt.Println(hour, minute, second) // 16 45 57
// 获取今年过了多少天了
tday := time.Now().YearDay()
fmt.Println(tday) // 318
// 获取今天是星期几
weekday := time.Now().Weekday()
fmt.Println(weekday) // Wednesday
时间戳
// 获取指定日期时间戳
t := time.Date(2022, 11, 15, 0, 0, 0, 0, time.UTC)
timestamp := t.Unix()
fmt.Println(timestamp) // 1636988800
// 获取当前时间的时间戳
timestamp2 := time.Now().Unix()
fmt.Println(timestamp2) // 1636891157
// 当前时间的以纳秒为单位的时间戳
timestamp3 := time.Now().UnixNano()
fmt.Println(timestamp3) // 1636891157201000000
时间的计算
now := time.Now()
// 当前时间加一分钟
t := now.Add(time.Minute)
fmt.Println(now) // 2022-11-14 16:45:57.201000 +0800 CST m=+0.000000000
fmt.Println(t) // 2022-11-14 16:46:57.201000 +0800 CST m=+60.000000000
// 计算时间间隔
d := t.Sub(now)
fmt.Println(d) // 1m0s
时间戳与时间格式互转
// 将指定时间格式转为时间戳格式
beforeTime := "2022-11-15 00:00:00"
timeLayout := "2006-01-02 15:04:05"
loc := time.Now().Location() // 重要:获取时区
theTime, _ := time.ParseInLocation(timeLayout, beforeTime, loc) // 使用模板在对应时区转化为time.time类型
afterTime := theTime.Unix() // 转化为时间戳 类型是int64
fmt.Println(theTime) // 2022-11-15 00:00:00 +0000 UTC
fmt.Println(afterTime) // 1636988800
// 将时间戳转换为日期
dateTimeStr := time.Unix(afterTime, 0).Format(timeLayout) // 设置时间戳 使用模板格式化为日期字符串
fmt.Println(dateTimeStr) // 2022年11月15日 00点00分00秒