iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > GO >Golang语言该怎么避免空指针引发的panic
  • 373
分享到

Golang语言该怎么避免空指针引发的panic

2023-06-26 03:06:17 373人浏览 独家记忆
摘要

这篇文章将为大家详细讲解有关golang语言该怎么避免空指针引发的panic,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。01、介绍在 Golang 语言项目开发中,变量操作不当就会触发空指

这篇文章将为大家详细讲解有关golang语言该怎么避免空指针引发的panic,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

01、介绍

Golang 语言项目开发中,变量操作不当就会触发空指针引发程序 panic。空指针就是未分配内存的指针类型的变量,变量的值是 nil,因为操作空指针会引发 panic,所以我们在程序开发中要特别小心。

02、结构体指针类型返回值

在调用结构体指针类型返回值的函数或方法时,并且需要操作返回值的字段或方法,此时,我们就需要注意触发空指针引发的 panic。

操作返回值的字段:

func main() { user := GetUser() fmt.Println(user) fmt.Println(user.Id)}func GetUser() (user *User) { return}type User struct { Id   int Name string}

阅读上面这段代码,我们通过调用函数 GetUser() 获取 *User 类型的返回值,因为返回值变量是空指针,当我们访问返回值的字段时,程序引发 panic。

避免此类空指针问题,一是可以在返回值包含指针类型变量的函数或方法中,在函数体开头初始化返回值的指针类型变量;二是在调用结构体指针类型返回值的函数或方法时,在操作返回值的字段或方法时,先判定返回值是否为 nil(空指针)。

func main() { user := GetUser() fmt.Println(user) if user != nil {  fmt.Println(user.Id) }}func GetUser() (user *User) { user = new(User) // user = &User{} return}type User struct { Id   int Name string}

操作返回值的方法:

func main() { user := GetUser() user.Login()}func GetUser() (user *User) { return}type User struct { Id   int Name string}func (u User) Login() {}

阅读上面这段代码,我们通过调用函数 GetUser() 获取 *User 类型的返回值,因为返回值变量是空指针,当我们访问返回值的方法 Login() 时,程序触发空指针引发 panic。

避免此类空指针问题,一是可以在返回值是指针类型变量的函数或方法的函数体中,开头先初始化返回值的指针类型变量;二是类型方法的接收者使用指针类型。

func main() { user := GetUser() user.Login()}func GetUser() (user *User) { user = new(User) // user = &User{} return}type User struct { Id   int Name string}func (u *User) Login() {}

03、结构体指针类型 value 的 Map

在 Golang 语言程序开发中,经常会操作结构体指针类型 value 的 Map,也需要注意触发空指针引发 panic。

func main() { var userData map[int]*User fmt.Println(userData[1].Name)}type User struct { Id   int Name string}

阅读上面这段代码,我们定义 map 类型的变量 userData,key 是 int 类型,value 是结构体指针类型,我们访问 map 的值时,因为值是空指针,所以会引发 panic。

避免此类空指针问题,我们可以使用 ok-idiom 模式判断键值是否存在,如果键值存在(判断键值是否为 nil),我们访问键值的字段,否则不访问。通过这种方式,也可以避免触发空指针引发 panic。

func main() { var userData map[int]*User if val, ok := userData[1]; ok {  fmt.Println(val.Name) }}type User struct { Id   int Name string}

04、defer 延迟调用

关键字 defer 延迟调用函数,虽然被调用函数会延迟调用,但是被调用函数的变量会先被注册。所以,如果被调用函数的变量是空指针,就会引发 panic。

func main() { res, err := Http.Get("http://www.baidu2022.com/robots.txt") // 伪造错误请求 defer res.Body.Close() if err != nil {  log.Fatal(err) } body, err := io.ReadAll(res.Body) if err != nil {  log.Fatal(err) } fmt.Printf("%s", body)}

阅读上面这段代码,使用 defer 延迟调用函数释放资源,因为我们将 defer 放在错误检查之后,所以如果返回值 res 是空指针,就会引发 panic。

避免此类空指针问题,我们可以在使用 defer 调用之前,先做错误检查,并且遇到错误后停止向下执行。

关于Golang语言该怎么避免空指针引发的panic就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

您可能感兴趣的文档:

--结束END--

本文标题: Golang语言该怎么避免空指针引发的panic

本文链接: https://www.lsjlt.com/news/306456.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Golang语言该怎么避免空指针引发的panic
    这篇文章将为大家详细讲解有关Golang语言该怎么避免空指针引发的panic,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。01、介绍在 Golang 语言项目开发中,变量操作不当就会触发空指...
    99+
    2023-06-26
  • Golang语言如何避免空指针引发的panic详解
    目录01、介绍02、结构体指针类型返回值03、结构体指针类型 value 的 Map04、defer 延迟调用05、总结01、介绍 在 Golang 语言项目开发中,变量操作不当就会...
    99+
    2024-04-02
  • java怎么避免空指针异常
    在Java中,可以通过以下方法避免空指针异常:1. 对于可能为null的对象进行null检查。在使用可能为null的对象之前,先要进...
    99+
    2023-08-19
    java
  • c语言怎么避免指针操作中的常见错误
    避免指针操作中的常见错误需要注意以下几点: 空指针:在使用指针之前,应该始终检查指针是否为NULL,避免对空指针进行操作。 ...
    99+
    2024-03-02
    c语言
  • C语言的野指针与空指针是什么
    这篇文章主要介绍“C语言的野指针与空指针是什么”,在日常操作中,相信很多人在C语言的野指针与空指针是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C语言的野指针与空指针是什么”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-25
  • go语言数组指针怎么引用
    在Go语言中,数组是值类型,当数组作为参数传递给函数时,会进行值拷贝。如果需要在函数中修改数组内容并保持修改后的结果,可以使用数组指...
    99+
    2023-10-25
    go语言
  • C++开发注意事项:避免C++代码中的空指针异常
    C++开发中,空指针异常是一种常见的错误,经常出现在指针没有被初始化或被释放后继续使用等情况下。空指针异常不仅会导致程序崩溃,还可能造成安全漏洞,因此需要特别注意。本文将介绍如何避免C++代码中的空指针异常。初始化指针变量C++中的指针必须...
    99+
    2023-11-22
    注意事项 C++编程 空指针异常
  • Java怎么使用Optional实现优雅避免空指针异常
    本文小编为大家详细介绍“Java怎么使用Optional实现优雅避免空指针异常”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java怎么使用Optional实现优雅避免空指针异常”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来...
    99+
    2023-07-05
  • C语言结构体指针怎么引用
    这篇文章主要介绍“C语言结构体指针怎么引用”,在日常操作中,相信很多人在C语言结构体指针怎么引用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C语言结构体指针怎么引用”的疑惑有所帮助!接下来,请跟着小编一起来...
    99+
    2023-06-25
  • GoLang nil与interface的空指针怎么使用
    本篇内容介绍了“GoLang nil与interface的空指针怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!nilGo中...
    99+
    2023-07-04
  • Go语言的指针怎么用
    本篇内容介绍了“Go语言的指针怎么用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、定义结构体1. 语法格式结构体定义需要使用 type ...
    99+
    2023-06-30
  • C语言中的指针怎么使用
    这篇文章主要介绍“C语言中的指针怎么使用”,在日常操作中,相信很多人在C语言中的指针怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C语言中的指针怎么使用”的疑惑有所帮助!接下来,请跟着小编一起来学习吧...
    99+
    2023-06-17
  • C语言中const,指针和引用的关系是什么
    这篇“C语言中const,指针和引用的关系是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C语言中const,指针和引用...
    99+
    2023-06-26
  • 怎么避免在Java代码中写大量的判空语句
    这篇文章主要介绍了怎么避免在Java代码中写大量的判空语句的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么避免在Java代码中写大量的判空语句文章都会有所收获,下面我们一起来看看吧。有人说可以使用 JDK8提...
    99+
    2023-06-27
  • c语言中怎么把数组的值赋给指针
    在C语言中,可以通过以下两种方式将数组的值赋给指针: 使用数组名作为指针: int arr[] = {1, 2, 3, 4, 5...
    99+
    2023-10-25
    c语言
  • C语言指针、地址和数组函数堆空间的关系是什么
    这篇“C语言指针、地址和数组函数堆空间的关系是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C语言指针、地址和数组函数堆...
    99+
    2023-06-30
  • 什么是Javascript引擎和运行时以及单线程与非阻塞和异步以及并发语言分别是怎样的
    这篇文章将为大家详细讲解有关什么是Javascript引擎和运行时以及单线程与非阻塞和异步以及并发语言分别是怎样的,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作