package mainimport "fmt"func main() { // 1.成立偏向信息 var err error = fmt.Errorf("这里是偏向信息") // 2.打印偏向信息 fmt.Println(err) // 这里是偏向信息}package mainimport "fmt"func main() { // 1.成立偏向信息 var err error = errors.New("这里是偏向信息") // 2.打印偏向信息 fmt.Println(err) // 这里是偏向信息}package builtin// 定义了一个称号叫做error的接口// 接口中声了然一个叫做Error() 的编制type error inte***ce { Error() string}// 指定包名为errorspackage errors // 定义了一个称号叫做errorString的筹划体, 里面有一个字符串圭表类型属性stype errorString struct { s string}// 完成了error接口中的Error编制// 内部直接将筹划体中保管的字符串前去func (e *errorString) Error() string { return e.s}// 定义了一个New函数, 用于成立特别很是信息// 寄看: New函数的前去值是一个接口圭表类型func New(text string) error { // 前去一个成立好的errorString筹划体地址 return &errorString{ text}}func Errorf(format string, a ...inte***ce{ }) error { return errors.New(Sprintf(format, a...))}package mainimport "fmt"func div(a, b int) (res int, err error) { if(b == 0){ // 一旦传进的除数为0, 就会前去error信息 err = errors.New("除数不克不及为0") }else{ res = a / b } return}func main() { //res, err := div(10, 5) res, err := div(10, 0) if(err != nil){ fmt.Println(err) // 除数不克不及为0 }else{ fmt.Println(res) // 2 }}package mainimport "fmt"func div(a, b int) (res int) { if(b == 0){ //一旦传进的除数为0, 法度圭表类型就会延续 panic("除数不克不及为0") }else{ res = a / b } return}func main() { res := div(10, 0) fmt.Println(res)}package mainimport "fmt"func main() { // 比如:数组角标越界, 就会主动触发panic var arr = [3]int{ 1, 3, 5} arr[5] = 666 // 报错 fmt.Println(arr) // 比如:除数为0, 就会主动触发panic var res = 10 / 0 fmt.Println(res)}package mainimport "fmt"func div(a, b int) (res int) { // 定义一个迟误调用的函数, 用于捕获panic特别很是 // 寄看: 必定要在panic之前定义 defer func() { if err := recover(); err != nil{ res = -1 fmt.Println(err) // 除数不克不及为0 } }() if(b == 0){ //err = errors.New("除数不克不及为0") panic("除数不克不及为0") }else{ res = a / b } return}func setValue(arr []int, index int ,value int) { arr[index] = value}func main() { res := div(10, 0) fmt.Println(res) // -1}package mainimport "fmt"func div(a, b int) (res int) { if(b == 0){ //err = errors.New("除数不克不及为0") panic("除数不克不及为0") }else{ res = a / b } return}func main() { // panic特别很是会沿着调用仓库向别传递, 所以也可以在外层捕获 defer func() { if err := recover(); err != nil{ fmt.Println(err) // 除数不克不及为0 } }() div(10, 0)}package mainimport "fmt"func test1() { // 多个特别很是,只需第一个会被捕获 defer func() { if err := recover(); err != nil{ fmt.Println(err) // 特别很是A } }() panic("特别很是A") // 相当于return, 后背代码不会延续奉行 panic("特别很是B")}func main() { test1(10, 0)}package mainimport "fmt"func test2() { // 假如有特别很是写在defer中, 并且此外特别很是写在defer后背, 那么只需defer中的特别很是会被捕获 defer func() { if err := recover(); err != nil{ fmt.Println(err) // 特别很是A } }() defer func() { panic("特别很是B") }() panic("特别很是A")}func main() { test1(10, 0)}到此这篇关
package mainimport "fmt"func main() { // 1.成立偏向信息 var err error = fmt.Errorf("这里是偏向信息") // 2.打印偏向信息 fmt.Println(err) // 这里是偏向信息}package mainimport "fmt"func main() { // 1.成立偏向信息 var err error = errors.New("这里是偏向信息") // 2.打印偏向信息 fmt.Println(err) // 这里是偏向信息}package builtin// 定义了一个称号叫做error的接口// 接口中声了然一个叫做Error() 的编制type error inte***ce { Error() string}// 指定包名为errorspackage errors // 定义了一个称号叫做errorString的筹划体, 里面有一个字符串圭表类型属性stype errorString struct { s string}// 完成了error接口中的Error编制// 内部直接将筹划体中保管的字符串前去func (e *errorString) Error() string { return e.s}// 定义了一个New函数, 用于成立特别很是信息// 寄看: New函数的前去值是一个接口圭表类型func New(text string) error { // 前去一个成立好的errorString筹划体地址 return &errorString{ text}}func Errorf(format string, a ...inte***ce{ }) error { return errors.New(Sprintf(format, a...))}package mainimport "fmt"func div(a, b int) (res int, err error) { if(b == 0){ // 一旦传进的除数为0, 就会前去error信息 err = errors.New("除数不克不及为0") }else{ res = a / b } return}func main() { //res, err := div(10, 5) res, err := div(10, 0) if(err != nil){ fmt.Println(err) // 除数不克不及为0 }else{ fmt.Println(res) // 2 }}package mainimport "fmt"func div(a, b int) (res int) { if(b == 0){ //一旦传进的除数为0, 法度圭表类型就会延续 panic("除数不克不及为0") }else{ res = a / b } return}func main() { res := div(10, 0) fmt.Println(res)}package mainimport "fmt"func main() { // 比如:数组角标越界, 就会主动触发panic var arr = [3]int{ 1, 3, 5} arr[5] = 666 // 报错 fmt.Println(arr) // 比如:除数为0, 就会主动触发panic var res = 10 / 0 fmt.Println(res)}package mainimport "fmt"func div(a, b int) (res int) { // 定义一个迟误调用的函数, 用于捕获panic特别很是 // 寄看: 必定要在panic之前定义 defer func() { if err := recover(); err != nil{ res = -1 fmt.Println(err) // 除数不克不及为0 } }() if(b == 0){ //err = errors.New("除数不克不及为0") panic("除数不克不及为0") }else{ res = a / b } return}func setValue(arr []int, index int ,value int) { arr[index] = value}func main() { res := div(10, 0) fmt.Println(res) // -1}package mainimport "fmt"func div(a, b int) (res int) { if(b == 0){ //err = errors.New("除数不克不及为0") panic("除数不克不及为0") }else{ res = a / b } return}func main() { // panic特别很是会沿着调用仓库向别传递, 所以也可以在外层捕获 defer func() { if err := recover(); err != nil{ fmt.Println(err) // 除数不克不及为0 } }() div(10, 0)}package mainimport "fmt"func test1() { // 多个特别很是,只需第一个会被捕获 defer func() { if err := recover(); err != nil{ fmt.Println(err) // 特别很是A } }() panic("特别很是A") // 相当于return, 后背代码不会延续奉行 panic("特别很是B")}func main() { test1(10, 0)}package mainimport "fmt"func test2() { // 假如有特别很是写在defer中, 并且此外特别很是写在defer后背, 那么只需defer中的特别很是会被捕获 defer func() { if err := recover(); err != nil{ fmt.Println(err) // 特别很是A } }() defer func() { panic("特别很是B") }() panic("特别很是A")}func main() { test1(10, 0)}到此这篇关Go言语