01、error 接口的使用
定义:
type error interface{
Error() string
}
package main
import "fmt"
import "errors"
func main(){
err1 := fmt.Errorf("%s", "this is normal err1")
fmt.Println("err1 = ", err1)
err2 := errors.New("this is normal err2")
fmt.Println("err2 = ", err2)
}
02、error 接口的应用
package main
import "fmt"
import "errors"
func MyDiv(a, b int)(result int err error){
err = nil
if b == 0{
err = errors.New("分母不能为0")
}else{
result = a / b
}
return
}
func main(){
result, err := MyDiv(10, 0)
if err != nil{
fmt.Println("err = ", err)
}else{
fmt.Println("result = ", result)
}
}
03、显示调用 panic 函数
在通常情况下,向程序使用方报告错误状态的方式可以是返回一个额外的 error 类型值,但是,当遇到不可恢复的错误状态的时候,如数组访问越界,空指针引用等,这些运行时错误会引起 painc 异常
一般而言,当 painc 异常发生时,程序会中断运行
不是所有的 painc 异常都来自运行时,直接调用内置的 painc 函数也会引发 painc 异常:painc 函数接受任何值作为参数
package main
import "fmt"
func testa(){
fmt.Println("AAAAA")
}
func testb(){
//fmt.Println("BBBBB")
//显示调用painc函数,导致程序中断
painc("this is a painc test")
}
func testc(){
fmt.Println("CCCCC")
}
func main(){
testa()
testb()
testc()
}
04、数组越界到导数 painc
package main
import "fmt"
func testa(){
fmt.Println("AAAAA")
}
func testb(x int){
var a [10]int
a[x] = [11] //当x为20是,导致数组越界,产生一个painc,导致程序崩溃
}
func testc(){
fmt.Println("CCCCC")
}
func main(){
testa()
testb(20)
testc()
}
05、recover 的使用
注意:recover 只有在 defer 调用的函数中有效
package main
import "fmt"
func testa(){
fmt.Println("AAAAA")
}
func testb(x int){
//设置recover
defer func(){
//recover() //可以打印panic的错误信息
//fmt.Peintln(recover())
if err := recover(); err != nil { //产生了panic异常
fmt.Println(err)
}
}()//调用此匿名函数
var a [10]int
a[x] = [11] //当x为20是,导致数组越界,产生一个painc,导致程序崩溃
}
func testc(){
fmt.Println("CCCCC")
}
func main(){
testa()
testb(20)
testc()
}
06、字符串操作常用函数
Contains:
func Contains(s, substr string) bool
功能:字符串 s 中是否包含 substr ,返回 bool 值
示例:
fmt.Println(strings.Contains("seafood", "foo"))
fmt.Println(strings.Contains("seafood", "bar"))
fmt.Println(strings.Contains("seafood", ""))
fmt.Println(strings.Contains("", ""))
//运行结果
true
false
true
true
Join:
func Join(a []string, sep string) string
<