注:本人已有C,C++,Python基础,只写本人认为的重点。
学完前两节,这节就轻松多了,只要知道怎么用别人的函数即可。这讲的系统函数分为字符串函数,日期和时间函数,三个内置函数len,new,make,但本文不做详细分析,直接上代码演示简单用例,想了解更多用法可参考官方文档:https://studygolang.com/pkgdoc。
一、字符串函数
字符串函数还是挺多的,但有些我之前的笔记讲过:
笔记10循环结构:len统计字符串长度,for-range遍历字符串,str转rune切片。
笔记6更方便的转换:提供了更方便的字符串和基本类型互转的包。
还有些直接看代码即可:
package main
import (
"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. 返回子串在字符串第一次出现的索引值,如果没有返回-1
str4 := "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 main
import (
"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 main
import "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 // 设置其值为 10
fmt.Println("指针指向的值:", *pointer) // 输出: 10
// 3. make 函数
// make 函数用于创建切片、映射(map)和管道(channel)。返回的是初始化后的值,而不是指针。
slice := make([]int, 5) // 创建一个长度为 5 的切片,初始值为 0
slice[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]
}