Go中的异常处理

1. errors包

Go 有一个预先定义的 error 接口类型 :

type error interface {
	Error() string
}

错误值用来表示异常状态。Go也提供了一个包:errors,errors 包中有一个 errorString 结构体实现了 error 接口 。任何时候当你需要一个新的错误类型,都可以用 errors包的 errors.New 函数接收合适的错误信息来创建 :

err := errors.New("so.this is a error test")
2. 运行时异常和panic

我们在代码段中定义了一个error,这个error我们可以处理也可以不处理,它并不会影响程序继续往下执行;但是如果在程序中定义了一个panic,那程序是一定不会往下执行。

panic所定义的异常,是在程序运行到这里才触发,所以属于运行时异常。

	fmt.Print("start....")
	panic("an error occured: stopping")
	fmt.Print("end")

输出错误:

start....panic: an error occured: stopping

goroutine 1 [running]:
main.main()
	D:/workspace/go/demo/testError.go:11 +0x9d

另外,如果panic函数遇到了defer延迟函数,在defer函数中触发了panic函数异常,会将该异常一直往上携带,一直输送到这个协程的起点:

package main

import (
	"fmt"
)

func defer1()  {
	panic("an error occured: stopping")
	fmt.Println("defer1")
}

func defer2()  {
	defer1()
	fmt.Println("defer2")
}

func main() {
	fmt.Println("start....")
	defer defer2()
	fmt.Println("end")

}

输出如下:

start....
end
panic: an error occured: stopping

goroutine 1 [running]:
main.defer1(...)
	D:/workspace/go/demo/testError.go:8
main.defer2()
	D:/workspace/go/demo/testError.go:13 +0x41
main.main()
	D:/workspace/go/demo/testError.go:22 +0xf7

可以看到异常信息一直被带到了main函数中。

那么既然有抛出异常,自然也会有异常捕获,recover就是这样的一个函数。

3. recover

正如名字一样,这个(recover)内建函数被用于从 panic 或 错误场景中恢复 。recover的使用方式是:必须的在defer修饰的方法中使用,不然不生效。原因你应该懂:panic抛出异常,defer具备延迟处理功能,所以最后这种兜底的活只能defer来做。

package main

import (
	"fmt"
	"log"
)

func defer1()  {
	panic("an error occured: stopping")
	fmt.Println("defer1")
}

func defer2()  {
	defer func() {
		if err := recover();err != nil{
			log.Printf("panic: v%",err)
		}
	}()
	defer1()
	fmt.Println("defer2")
}

func main() {
	fmt.Println("start....")
	defer2()
	fmt.Println("end")

}

输出:

start....
end
2019/04/02 00:08:01 panic: v%!(NOVERB)%!(EXTRA string=an error occured: stopping)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
毫米波雷达指的是一种采用毫米波频段(30-300 GHz)进行雷达信号传输和接收的雷达技术。相比于传统的雷达技术,毫米波雷达具有更高的频带和更大的带宽,能够实现更高的分辨率和更精准的目标检测和跟踪。 毫米波雷达在实际应用中,需要处理大量的雷达信号数据,并进行高速的信号处理和数据计算。而传统的处理器往往无法满足这种高速、高效的要求。这时,可采用FPGA(现场可编程门阵列)来进行毫米波雷达的信号处理和计算。 FPGA是一种集成电路器件,具有可编程的逻辑门和内部存储器等资源,可以按照特定需求配置其内部电路,类似于“编程”硬件。相对于固定功能的处理器和ASIC(专用集成电路),FPGA具有强大的灵活性和可重构性,能够根据应用需求实时改变内部电路的功能和结构。 在毫米波雷达领域,FPGA可用于实现高速的信号采集、射频前端控制、信号解调和数字滤波等关键功能。通过FPGA的灵活编程,可以针对不同的毫米波雷达应用需求进行优化设计,提升性能和灵敏度。 同时,FPGA也能够实现复杂的雷达信号处理算法,比如多普勒频移补偿、时域和频域信号处理、自适应波束形成等,这些算法可以进一步提高毫米波雷达的目标探测和跟踪能力。 总的来说,毫米波雷达和FPGA在应用中能够实现更高的分辨率和更灵敏的目标探测能力。FPGA的灵活性和可重构性使其成为实现高速信号处理和复杂算法的理想选择,并为毫米波雷达技术的不断创新提供了支持。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值