本文介绍SpringBoot相关内容。和【跨考菌】一起加油吧~
如果你有收获,记得帮博主一键三连哦😊
1 字符串系统函数
1) 统计字符串的长度, 按字节 len(str)
2) 字符串遍历, 同时处理有中文的问题 r := []rune(str)
3) 字符串转整数: n, err := strconv.Atoi(“12”)
4) 整数转字符串 str = strconv.Itoa(12345)
5) 字符串 转 []byte: var bytes = []byte(“hello go”)
6) []byte 转 字符串: str = string([]byte{97, 98, 99})
- 10 进制转 2, 8, 16 进制: str = strconv.FormatInt(123, 2) // 2-> 8 , 16
8) 查找子串是否在指定的字符串中: strings.Contains(“seafood”, “foo”) //true
9) 统计一个字符串有几个指定的子串 : strings.Count(“ceheese”, “e”) //4
10) 不区分大小写的字符串比较(==是区分字母大小写的): fmt.Println(strings.EqualFold(“abc”,“Abc”)) // true
11) 返回子串在字符串第一次出现的 index 值, 如果没有返回-1 : strings.Index(“NLT_abc”, “abc”) // 4
12) 返回子串在字符串最后一次出现的 index, 如没有返回-1 : strings.LastIndex(“go golang”, “go”)
13) 将指定的子串替换成 另外一个子串: strings.Replace(“go go hello”, “go”, “go 语言”, n) n 可以指定你希望替换几个, 如果 n=-1 表示全部替换。将“go go hello”中的所有的n个“go”替换为“go语言”。
14) 按 照 指 定 的 某 个 字 符 , 为 分 割 标 识 , 将 一 个 字 符 串 拆 分 成 字 符 串 数 组 :strings.Split(“hello,wrold,ok”, “,”)
15) 将字符串的字母进行大小写的转换: strings.ToLower(“Go”) // go strings.ToUpper(“Go”) // GO
16) 将字符串左右两边的空格去掉: strings.TrimSpace(" tn a lone gopher ntrn ")
17) 将字符串左右两边指定的字符去掉 : strings.Trim("! hello! “, " !”) // [“hello”] //将左右两边 !和 " "去掉
18) 将字符串左边指定的字符去掉 : strings.TrimLeft("! hello! “, " !”) // [“hello”] //将左边 ! 和 ""去掉
19) 将字符串右边指定的字符去掉 : strings.TrimRight("! hello! “, " !”) // [“hello”] //将右边 ! 和 ""去掉
20) 判断字符串是否以指定的字符串开头: strings.HasPrefix(“ftp://192.168.10.1”, “ftp”) // true
21) 判断字符串是否以指定的字符串结束: strings.HasSuffix("NLT_abc.jpg", "abc") //false
2 日期时间相关函数
- 时间和日期相关函数, 需要导入 time 包
- time.Time 类型, 用于表示时间
- 如何获取到其它的日期信息
- 格式化日期时间
方式 1: 就是使用 Printf 或者 SPrintf
方式二: 使用 time.Format() 方法完成:
对上面代码的说明:
"2006/01/02 15:04:05" 这个字符串的各个数字是固定的, 必须是这样写。
"2006/01/02 15:04:05" 这个字符串各个数字可以自由的组合, 这样可以按程序需求来返回时间
和日期
- 时间的常量
const (
Nanosecond Duration = 1 //纳秒
Microsecond = 1000 * Nanosecond //微秒
Millisecond = 1000 * Microsecond //毫秒
Second = 1000 * Millisecond //秒
Minute = 60 * Second //分钟
Hour = 60 * Minute //小时
)
常量的作用:在程序中可用于获取指定时间单位的时间, 比如想得到 100 毫秒
100 * time. Millisecond
- 结合 Sleep
- time 的 Unix 和 UnixNano 的方法
3 内置函数
Golang 设计者为了编程方便, 提供了一些函数, 这些函数可以直接使用, 我们称为 Go 的内置函数。 文档: https://studygolang.com/pkgdoc -> builtin
- len: 用来求长度, 比如 string、 array、 slice、 map、 channel
- new: 用来分配内存, 主要用来分配值类型, 比如 int、 float32,struct…返回的是指针
举例说明 new 的使用:
内存图分析:
- make: 用来分配内存, 主要用来分配引用类型, 比如
channel、 map、 slice
。 这个我们后面讲解。
4 错误处理
4.1 先看一个例子
对上面代码的分析:
- 在默认情况下, 当发生错误后(panic) ,程序就会退出(崩溃.)
- 如果我们希望: 当发生错误后, 可以捕获到错误, 并进行处理, 保证程序可以继续执行。 还可
以在捕获到错误后, 给管理员一个提示(邮件,短信。 。 。 ) - 这里引出我们要将的错误处理机制
4.2 基本说明
- Go 语言追求简洁优雅, 所以, Go 语言不支持传统的 try…catch…finally 这种处理。
- Go 中引入的处理方式为:
defer, panic, recover
- 这几个异常的使用场景可以这么简单描述: Go 中可以抛出一个 panic 的异常, 然后在 defer 中
通过 recover 捕获这个异常, 然后正常处理
4.3 defer+recover处理错误
package main
import (
"fmt"
_ "time"
"errors"
)
func test() {
//使用defer + recover 来捕获和处理异常
defer func() {
err := recover() // recover()内置函数,可以捕获到异常
if err != nil { // 说明捕获到错误
fmt.Println("err=", err)
//这里就可以将错误信息发送给管理员....
fmt.Println("发送邮件给admin@sohu.com~")
}
}()
num1 := 10
num2 := 0
res := num1 / num2
fmt.Println("res=", res)
}
func main() {
测试
test()
for {
fmt.Println("main()下面的代码...")
time.Sleep(time.Second)
}
}
可以看到错误处理的好处:程序不会轻易挂掉,如果加入了预警代码,就可以让程序更加的健壮。
4.4 自定义错误
Go 程序中, 也支持自定义错误, 使用 errors.New 和 panic 内置函数
。
- errors.New(“错误说明”) , 会返回一个 error 类型的值, 表示一个错误
- panic 内置函数 ,接收一个 interface{}类型的值(也就是任何值了) 作为参数。 可以接收 error 类
型的变量, 输出错误信息, 并退出程序.
案例说明