golang学习笔记14-函数(三):系统函数
注:本人已有C,C++,Python基础,只写本人认为的重点。
学完前两节,这节就轻松多了,只要知道怎么用别人的函数即可。这讲的系统函数分为字符串函数,日期和时间函数,三个内置函数len,new,make,但本文不做详细分析,直接上代码演示简单用例,想了解更多用法可参考官方文档:https://studygolang.com/pkgdoc。
一、字符串函数
字符串函数还是挺多的,但有些我之前的笔记讲过:
笔记10循环结构:len统计字符串长度,for-range遍历字符串,str转rune切片。
笔记6更方便的转换:提供了更方便的字符串和基本类型互转的包。
还有些直接看代码即可:
package mainimport ("fmt""strings"
)func main() {// 1. 查找子串是否在指定的字符串中str1 := "Hello, world!"substr1 := "world"fmt.Println(strings.Contains(str1, substr1)) // 输出: true// 2. 统计一个字符串有几个指定的子串str2 := "ababcabc"substr2 := "abc"count := strings.Count(str2, substr2)fmt.Println(count) // 输出: 2// 3. 不区分大小写的字符串比较str3a := "Hello"str3b := "hello"fmt.Println(strings.EqualFold(str3a, str3b)) // 输出: true// 4. 返回子串在字符串第一次出现的索引值,如果没有返回-1str4 := "Hello, world!"substr4 := "world"index := strings.Index(str4, substr4)fmt.Println(index) // 输出: 7// 5. 字符串的替换str5 := "Hello, world!"newStr5 := strings.ReplaceAll(str5, "world", "Go")fmt.Println(newStr5) // 输出: Hello, Go!// 6. 按照指定的某个字符为分割标识,将一个字符串拆分成字符串数组str6 := "apple,banana,cherry"splitStr6 := strings.Split(str6, ",")fmt.Println(splitStr6) // 输出: [apple banana cherry]// 7. 将字符串的字母进行大小写的转换str7 := "Hello, World!"fmt.Println(strings.ToLower(str7)) // 输出: hello, world!fmt.Println(strings.ToUpper(str7)) // 输出: HELLO, WORLD!// 8. 将字符串左右两边的空格去掉str8 := " Hello, World! "fmt.Println(strings.TrimSpace(str8)) // 输出: Hello, World!// 9. 将字符串左右两边指定的字符去掉str9 := "***Hello, World!***"fmt.Println(strings.Trim(str9, "*")) // 输出: Hello, World!// 10. 将字符串左边指定的字符去掉str10 := "***Hello, World!"fmt.Println(strings.TrimLeft(str10, "*")) // 输出: Hello, World!// 11. 将字符串右边指定的字符去掉str11 := "Hello, World!***"fmt.Println(strings.TrimRight(str11, "*")) // 输出: Hello, World!// 12. 判断字符串是否以指定的字符串开头str12 := "Hello, world!"prefix := "Hello"fmt.Println(strings.HasPrefix(str12, prefix)) // 输出: true// 13. 判断字符串是否以指定的字符串结束str13 := "Hello, world!"suffix := "world!"fmt.Println(strings.HasSuffix(str13, suffix)) // 输出: true
}
二、日期和时间函数
package mainimport ("fmt""time"
)func main() {// 获取当前时间now := time.Now()// 1. 获取年、月、日、时、分、秒year := now.Year() // 获取当前年份month := now.Month() // 获取当前月份day := now.Day() // 获取当前日hour := now.Hour() // 获取当前小时minute := now.Minute() // 获取当前分钟second := now.Second() // 获取当前秒// 输出当前的年、月、日、时、分、秒fmt.Printf("当前时间: %d年%d月%d日 %d时%d分%d秒\n", year, month, day, hour, minute, second)// 2. 格式化时间,显示年月日时分秒formattedTime := now.Format("2006年01月02日 15时04分05秒") // 自定义格式化fmt.Println("格式化后的时间:", formattedTime)// 3. 解析字符串为时间timeString := "2024年09月24日 10时00分00秒"parsedTime, err := time.Parse("2006年01月02日 15时04分05秒", timeString) // 将字符串解析为时间if err != nil {fmt.Println("解析时间错误:", err)} else {fmt.Println("解析后的时间:", parsedTime)}// 4. 时间的加减futureTime := now.Add(48 * time.Hour) // 在当前时间基础上加48小时fmt.Println("未来时间:", futureTime.Format("2006年01月02日 15时04分05秒"))pastTime := now.Add(-24 * time.Hour) // 在当前时间基础上减24小时fmt.Println("过去时间:", pastTime.Format("2006年01月02日 15时04分05秒"))// 5. 计算时间差duration := futureTime.Sub(now) // 计算时间差fmt.Println("时间差(小时):", duration.Hours())
}
三、内置函数
package mainimport "fmt"func main() {// 1. len 函数// len 函数用于返回数组、切片、字符串、映射(map)、管道(channel)等的长度或元素个数。str := "Hello, Go!"arr := []int{1, 2, 3, 4, 5}fmt.Println("字符串的长度:", len(str)) // 输出: 10,中文逗号占了2字节fmt.Println("数组的长度:", len(arr)) // 输出: 5// 2. new 函数// new 函数用于分配内存并返回指向该内存的指针。返回的指针指向零值。pointer := new(int) // 分配一个整型的内存*pointer = 10 // 设置其值为 10fmt.Println("指针指向的值:", *pointer) // 输出: 10// 3. make 函数// make 函数用于创建切片、映射(map)和管道(channel)。返回的是初始化后的值,而不是指针。slice := make([]int, 5) // 创建一个长度为 5 的切片,初始值为 0slice[0] = 1 // 设置第一个元素slice[1] = 2 // 设置第二个元素fmt.Println("切片内容:", slice) // 输出: [1 2 0 0 0]// 创建一个映射(map)myMap := make(map[string]int) // 创建一个空的映射myMap["apple"] = 5 // 添加元素myMap["banana"] = 10 // 添加元素fmt.Println("映射内容:", myMap) // 输出: map[apple:5 banana:10]
}