首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

trpc-go/log.With 遇到空指针panic,原因是什么?

在使用 trpc-go/log.With 时,遇到空指针 panic 的原因可能是传入的参数为空指针。trpc-go/log.With 函数用于从一个已有的日志实例创建一个新的实例,并添加一些额外的字段。当传入的参数为空指针时,会导致运行时错误。

为了避免这种情况,可以在调用 trpc-go/log.With 之前检查参数是否为空指针。例如:

代码语言:go
复制
import (
    "github.com/sirupsen/logrus"
    "github.com/smallnest/rpcx/log"
)

func main() {
    logger := logrus.New()
    if logger != nil {
        newLogger := log.With(logger)
        // 使用 newLogger 进行日志记录
    }
}

在这个示例中,我们首先创建一个新的 logrus 实例,然后检查它是否为空指针。如果不是空指针,我们就可以使用 trpc-go/log.With 函数创建一个新的日志实例,并使用它进行日志记录。这样可以避免遇到空指针 panic 的问题。

总之,在使用 trpc-go/log.With 时,确保传入的参数不是空指针,可以避免遇到空指针 panic 的问题。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【Go必知必会】错误和异常、CGO、fallthrough

这篇文章将详解「Go必知必会」的知识点: 错误和异常的对比、发生panic后如何执行代码?会执行到defer代码段吗? CGO是什么?CGO的作用是什么?...switch中的fallthrough 错误&异常 错误指的是可能出现问题的地方出现了问题,比如打开一个文件时失败,这种情况在人们的意料之中 异常指的是不应该出现问题的地方出现了问题,比如引用了指针,...总结 当程序运行时,如果遇到引用指针、下标越界或显式调用panic函数等情况,则先触发panic函数的执行,然后调用延迟函数。...CGO不支持C++语法的根本原因是C++至今为止还没有一个二进制接口规范(ABI)。 CGO只支持C语言中值类型的数据类型,所以我们是无法直接使用C++的引用参数等特性的。...当程序运行时,如果遇到引用指针、下标越界或显式调用panic函数等情况,则先触发panic函数的执行,然后调用延迟函数。

1K31
  • 鹅厂火热开发框架:trpc-go设计理念介绍

    trpc-go 则有些不同,它是一个 rpc 框架。由于客观历史原因,客户端和服务器的直接交互大多还是 http 请求,但是系统内部大量的微服务之间的交互则并不局限于 http 协议。...Encode 和 Decode 的入参是什么,返回什么?...监听配置的端口 acceptLoop 请求处理流程(trpc 为例) getFrame 读取请求帧 调用 Service 的 handler(multiplexing 场景下可以通过配置设置为并发) 创建的...Options) {   o.Filters = append(o.Filters, fs...)  } } 对于 filter 的函数签名,其实 ctx req rsp 都好理解,关键最后这个 f 是什么...内部是一个递归调用的闭包,如果所有 filter 都执行完了,就执行 f,如果后面还有 filter 就执行 filter,并且把自己设置为待执行 filter 的 f 函数…… 这里实现看起来比较绕,主要原因

    4.3K92

    腾讯 tRPC-Go 教学——(5)filter、context 和日志组件

    系列文章 腾讯 tRPC-Go 教学——(1)搭建服务 腾讯 tRPC-Go 教学——(2)trpc HTTP 能力 腾讯 tRPC-Go 教学——(3)微服务间调用 腾讯 tRPC-Go 教学——(4...)tRPC 组件生态和使用 腾讯 tRPC-Go 教学——(5)filter、context 和日志组件 腾讯 tRPC-Go 教学——(6)服务发现 腾讯 tRPC-Go 教学——(7)服务配置和指标上报...ctx, "ela: %v, err: %v", time.Since(start), err) return err } filter.Register 函数所传递的两个 filter 函数均不应为,.../$(filter_name)" 实际的仓库地址为: github.com/trpc-ecosystem/go-filter 其中我们在业务中必备的 filter 是 recovery,防止业务逻辑 panic...如果在业务中遇到了某些导致服务无法运行下去的情况,我们不使用 panic 函数,而是使用 log.Fatal 系列调用,保留足够的现场信息之后再退出服务。

    82581

    腾讯 tRPC-Go 教学——(7)服务配置和指标上报

    系列文章腾讯 tRPC-Go 教学——(1)搭建服务腾讯 tRPC-Go 教学——(2)trpc HTTP 能力腾讯 tRPC-Go 教学——(3)微服务间调用腾讯 tRPC-Go 教学——(4)tRPC...tRPC 框架就会自动调用上一步中 Bind 函数注册的内部工厂类型Bind 函数调用 yaml.Unmarshal 函数解析配置到指定类型的 struct 中如果配置文件解析错误,tRPC 框架会直接 panic...其实配置的获取与前文 plugin 的封装思路很类似,就是将远端的配置数据,与本地代码/服务中的一个 struct 指针相互绑定。...我们的框架功能封装中,主要是利用 Go 在存取指针值时是协程安全的这一特性,当监听到远端配置更新时,在逻辑内部完成数据获取、反序列化、通知等逻辑。...这是什么意思呢?

    55031

    Golang 语言怎么避免引发 panic

    02 指针 任意一种编程语言都会使用函数,我们使用 Golang 编写函数或方法时,经常会用到指针类型的返回值,这时如果执行调用指针指针未初始化或值为 nil),对于新手而言,就很容易引发程序 panic...= nil { fmt.Println("err = ", err) } }() 我一般是在判定指针类型的返回值时,为了避免程序引发 panic,我会加一个且(&&)的判定条件,判定返回值不是...func main() { var m map[string]int // m = make(map[string]int) m["php"] = 80 } 另外,操作映射可能会遇到的更为严重的一个问题是...(int) fmt.Println(a) } 07 总结 本文我们介绍 Golang 语言中容易引发 panic 的场景,尤其是指针操作是最容易踩坑的场景,我们在程序开发中,一定要小心使用指针类型...读者朋友们在程序开发中,还遇到过哪些场景引发 panic,欢迎在留言区和大家分享。

    1.7K20

    Go服务迁到K8s后老抽风重启? 记一次完整的线上问题解决过程

    前言 之前把Go服务都迁到Kubernetes上后有些服务的某个 Pod总是时不时的重启一下,通过查业务日志根本查不到原因,我分析了一下肯定是哪里代码不严谨造成引用指针导致Go发送运行时panic才会挂掉的...但是Go的panic信息是直接写到标准错误的,容器重启后之前的panic错误就没有了,没法排查导致容器崩溃的原因。...针对在Go里实现记录panic到日志文件你可能首先会考虑:在recover里把导致panic的错误记录到文件里,不过引用的第三方包里也有可能panic,这个不现实。...最终方案 关于原因,搜索了一下,幸运的是 Rob Pike有专门对类似问题的解答,是这样说的: image.png 把高层包创建的变量直接赋值到底层的runtime是不行的,我们用syscall.Dup2...其实问题都是指针相关的问题,这些问题我在之前的文章《如何避免用动态语言的思维写Go代码》也提到过,项目一旦复杂起来谁写的代码也不能保证说不会发生指针,不过我们事先做好检查很多都是能够避免的明显错误,

    1.7K10

    Gitlab CICD 实践四:Golang 项目 CICD 流水线配置

    切片包含容量、长度和指向底层数组的指针。数据存放在底层数组。 它和数组的区别是什么?...一个的切片跟的这个map,你去对它去追加元素的时候,它的预期行为是什么? 切片的话 0 值是可用的,你可以直接append。...写已关闭的通道会引发panic: send on closed channel 关闭已关闭的通道会引发panic: close of closed channel 并发 golang 子协程 panic...指针和引用有什么区别? go 的定时器,你知道它的底层的数据结构以及它的算法吗? 生产环境中你的 crash 了,你的调试手段是什么呢?...信号、消息队列、管道、socket、共享内存(工作中有遇到,高性能传递文件,减少 IO) IO 多路复用模型有哪三种?

    19110

    Go面经

    前段时间一直在找工作,将自己的Go总结分享出来,期待大家交流~ 目录 1.time.Now()返回的是什么时间?这样做的决定因素是什么?...判断 x 是否为,若为,则尝试从 l.shared 的头部 pop 一个对象出来,同时赋值给 x。...注意点:两个strings.Builder禁止在写入之后拷贝,写入之前可以拷贝,如下例子,主要原因是写入会触发copyCheck检查。...21.panic和recover panic 函数可以被连续多次调用,它们之间通过 link 可以组成链表,内部包含:argp 是指向 defer 调用时参数的指针;arg 是调用 panic 时传入的参数..._defer 结构体并执行; 如果调用延迟执行函数时遇到了 runtime.gorecover 就会将 _panic.recovered 标记成 true 并返回 panic 的参数;在这次调用结束之后

    36220

    听GPT 讲Rust源代码--librarypanic_unwind

    但在某些情况下,如果想在编译时禁用panic,使得程序在遇到错误时不会直接退出,而是按照用户指定的方式处理错误,可以在编译时启用panic=abort功能,这时候就不会包含panic的实现代码。...总结来说,dummy.rs文件的作用是为了提供一个的占位函数,使得在禁用panic时能够编译通过,从而实现了一个在Rust未启用panic时的占位符实现文件。...当程序遇到不可恢复的错误时,如数组越界、指针解引用等,它会触发 panic 操作,终止程序的执行,并通过栈展开(unwind)来寻找 panic 的处理器。...在Rust中,异常处理机制主要涉及到两个关键组件:panic和unwind。panic是指当程序遇到不可恢复的错误情况时,会执行一系列的操作,例如打印错误信息、清理资源等,然后终止程序的执行。...TypeInfo: TypeInfo结构体用于描述Rust所有可能的panic类型。它包含了类型的ID和一个指向类型相关信息的指针。该指针指向内存中特定Rust类型所需的信息结构。

    14010

    牛客网_Go语言相关练习_判断&选择题(4)

    错误指的是可能出现问题的地方出现了问题,比如打开一个文件时失败,这种情况在人们的意料之中;而异常指的是不应该出现问题的地方出现了问题,比如引用了指针,这种情况在人们的意料之外。...当程序运行时,如果遇到引用指针、下标越界或显式调用panic函数等情况,则先触发panic函数的执行,然后调用延迟函数。...错误和异常从Golang机制上讲,就是error和panic的区别。很多其他语言也一样,比如C++/Java,没有error但有errno,没有panic但有throw。...号(因为->是用于通道的操作符,所以Go语言中指针不支持->操作符),并且Go语言足够智能,能够自动解引用,但智能也是有限的,只能解一次引用,指针指针还得自己动手解引用。...error是对象数据类型,是一个指针,不是常量,所以C错误。

    78920

    探究 Go 源码中 panic & recover 有哪些坑?

    本文使用的go的源码1.17.3 前言 写这一篇文章的原因是最近在工作中有位小伙伴在写代码的时候直接用 Go 关键字起了一个 Goroutine,然后发生了指针的问题,由于没有 recover 导致了整个程序宕掉的问题...was aborted goexit bool } argp 是指向 defer 调用时参数的指针; arg 是我们调用 panic 时传入的参数; link 指向的是更早调用 runtime..._defer 结构体中取出程序计数器pc和栈指针sp并调用runtime.recovery函数恢复程序。...这里其实是很奇怪的,我以前是做 java 的,用 hashmap 遇到并发的竟态问题的时候也只是抛了个异常,并不会导致程序 crash。...指针异常 func foo(){ defer func() { if r := recover(); r !

    1.2K10

    27.Go异常处理-panic函数

    27.Go异常处理-panic函数 前言 上一章节,我们学习了使用 error 接口来处理错误,下面继续来学习 panic 函数。...2 panic函数 error返回的是一般性的错误,但是panic函数返回的是让程序崩溃的错误。...也就是当遇到不可恢复的错误状态的时候,如数组访问越界、指针引用等,这些运行时错误会引起painc异常,在一般情况下,我们不应通过调用panic函数来报告普通的错误,而应该只把它作为报告致命错误的一种方式...当然,如果直接调用内置的panic函数也会引发panic异常;panic函数接受任何值作为参数。 调用panic函数的基本方式 下面给大家演示一下,直接调用panic函数,是否会导致程序的崩溃。...( )函数,但是当我们编程的程序遇到致命错误时,系统会自动调用该函数来终止整个程序的运行,也就是系统内置了panic函数。

    37920

    《Go 语言程序设计》读书笔记(四)接口

    调用一个接口值上的任意方法都会产生panic: w.Write([]byte("hello")) // panic: nil pointer dereference 第二个语句将一个*os.File类型的值赋给变量...\n")) // panic: nil pointer dereference } 当main函数调用函数f时,它给f函数的out参数赋了一个 *bytes.Buffer的指针,所以out的动值是nil...然而,它的动态类型是 *bytes.Buffer,意思就是out变量是一个包含指针值的非接口(如图7.5),所以防御性检查out!=nil的结果依然是true。 ?...特别是这个调用违反了 (*bytes.Buffer).Write方法的接收者非的隐含先觉条件,所以将nil指针赋给这个接口是错误的。...(io.ReadWriter) // panic: *ByteCounter has no Read method 如果断言操作的对象是一个nil接口值,那么不论被断言的类型是什么这个类型断言都会失败。

    37820
    领券