golang nil 空指针 panic

Golang语言如何避免空指针引发的panic详解

2022-01-05
目录 01.介绍 02.结构体指针类型返回值 03.结构体指针类型 value 的 Map 04.defer 延迟调用 05.总结 01.介绍 在 Golang 语言项目开发中,变量操作不当就会触发空指针引发程序 panic.空指针就是未分配内存的指针类型的变量,变量的值是 nil,因为操作空指针会引发 panic,所以我们在程序开发中要特别小心. 02.结构体指针类型返回值 在调用结构体指针类型返回值的函数或方法时,并且需要操作返回值的字段或方法,此时,我们就需要注意触发空指针引发的 pani

一个简单的Golang实现的HTTP Proxy方法

2019-08-19
最近因为换了Mac,以前的Linux基本上不再使用了,但是我的SS代理还得用.SS代理大家都了解,一个很NB的socks代理工具,但是就是因为他是Socks的,想用HTTP代理的时候很不方便. 以前在Linux下的时候,会安装一个Privoxy把socks代理转换为HTTP代理,开机启动,也比较方便.但是Mac下使用Brew安装的Privoxy就很难用,再加上以前一个有个想法,一个软件搞定socks和HTTP代理,这样就不用安装一个单独的软件做转换了. 想着就开始做吧,以前基本上没有搞过太多的网

golang日志框架之logrus的使用

2019-08-26
golang日志库 golang标准库的日志框架非常简单,仅仅提供了print,panic和fatal三个函数对于更精细的日志级别.日志文件分割以及日志分发等方面并没有提供支持.所以催生了很多第三方的日志库,但是在golang的世界里,没有一个日志库像slf4j那样在Java中具有绝对统治地位.golang中,流行的日志框架包括logrus.zap.zerolog.seelog等. logrus是目前Github上star数量最多的日志库,目前(2018.08,下同)star数量为8119,fo

go的websocket实现原理与用法详解

2016-07-24
本文实例讲述了go的websocket实现原理与用法.分享给大家供大家参考,具体如下: websocket分为握手和数据传输阶段,即进行了HTTP握手 + 双工的TCP连接 RFC协议文档在:http://tools.ietf.org/html/rfc6455 握手阶段 握手阶段就是普通的HTTP 客户端发送消息: GET /chat HTTP/1.1 Host: server.example.com Upgrade: websocket Connection: Upgrade Sec-WebS

Objective-C中NSArray的基本用法示例

2015-09-21
NSArray的排序 复制代码 代码如下: + (id)studentWithFirstName:(NSString *)firstName lastName:(NSString *)lastName{            Student *stu = [[Student alloc] init];            stu.firstName = firstName;      stu.lastName = lastName;            return stu;  }    +

docker 容器上编译 go 程序提示找不到文件问题

2018-05-23
dockerfile [root@SZB-L0010091 zxg]# cat Dockerfile FROM scratch COPY webdemo / EXPOSE 9999 CMD ["/webdemo"] docker run 报错信息: [root@zxg]# docker run --rm -it -p 9999:9999 web:1.0 panic: standard_init_linux.go:178: exec user process caused "n

Golang捕获panic堆栈信息的讲解

2019-03-31
golang当中panic的时候如果启动的goroutine比较多,刷的信息满屏都是,在终端工具上因为刷的信息太多,找不到前边的信息,因此很有必要程序自己捕获panic,并且将错误信息输出到文件当中,以便定位排查问题. Golang捕获panic堆栈信息 func PanicTrace(kb int) []byte { s := []byte("/src/runtime/panic.go") e := []byte("\ngoroutine ") line := [

golang中defer的关键特性示例详解

2017-08-07
前言 大家都知道golang的defer关键字,它可以在函数返回前执行一些操作,最常用的就是打开一个资源(例如一个文件.数据库连接等)时就用defer延迟关闭改资源,以免引起内存泄漏.本文主要给大家介绍了关于golang中defer的关键特性,分享出来供大家参考学习,下面话不多说,来一起看看详细的介绍: 一.defer 的作用和执行时机 go 的 defer 语句是用来延迟执行函数的,而且延迟发生在调用函数 return 之后,比如 func a() int { defer b() return

golang两种调用rpc的方法

2016-07-25
本文实例讲述了golang两种调用rpc的方法.分享给大家供大家参考,具体如下: golang的rpc有两种方法进行调用,一种是rpc例子中给的: 复制代码 代码如下: package main import (         "net/rpc"         "net/http"         "log"         "net"         "time" ) type Args struct

Golang中如何使用lua进行扩展详解

2017-10-15
前言 最近在项目中需要使用lua进行扩展,发现github上有一个用golang编写的lua虚拟机,名字叫做gopher-lua.使用后发现还不错,借此分享给大家,下面话不多说了,来一起看看详细的介绍吧. 数据类型 lua中的数据类型与golang中的数据类型对应关系作者已经在文档中说明,值得注意的是类型是以L开头的,类型的名称是以LT开头的. golang中的数据转换为lua中的数据就必须转换为L开头的类型: str := "hello" num := 10 L.LString(st

利用Golang实现TCP连接的双向拷贝详解

2017-09-26
前言 本文主要给大家介绍了关于Golang实现TCP连接的双向拷贝的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 最简单的实现 每次来一个Server的连接,就新开一个Client的连接.用一个goroutine从server拷贝到client,再用另外一个goroutine从client拷贝到server.任何一方断开连接,双向都断开连接. func main() { runtime.GOMAXPROCS(1) listener, err := net.Liste

Golang中数据结构Queue的实现方法详解

2017-09-19
前言 本文主要给大家介绍了关于Golang中数据结构Queue实现的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 需求 队列的特性较为单一,基本操作即初始化.获取大小.添加元素.移除元素等.最重要的特性就是满足先进先出. 实现 接下来还是按照以前的套路,一步一步来分析如何利用Go的语法特性实现Queue这种数据结构. 定义 首先定义每个节点Node结构体,照例Value的值类型可以是任意类型,节点的前后指针域指针类型为node type node struct {

利用golang实现封装trycatch异常处理实例代码

2017-07-05
前言 社区不少人在谈论 golang 为毛不用trycatch模式,而采用苛刻的recovery.panic.defer组合-.    从网上整了一个trycatch包,感觉不错,拿出来分享下-下面话不多说,来一起看看详细的介绍. 示例代码 package main import ( "reflect" ) type TryCatch struct { errChan chan interface{} catches map[reflect.Type]func(err error) d

Golang开发中常用的代码片段汇总

2017-07-01
本文主要总结的是我在编写golang应用时使用到的代码片段,提供出来以备以后使用,也给需要的朋友们以参考学习,下面话不多说,来看看详细介绍: 一.通过http package发送user:passwd信息 发送类似于 curl -u 的请求 client := &http.Client{} req, err := http.NewRequest("GET", <url>, nil) req.SetBasicAuth(<username>, <use

golang基于websocket实现的简易聊天室程序

2016-07-19
本文实例讲述了golang基于websocket实现的简易聊天室.分享给大家供大家参考,具体如下: 先说点无关的,最近忙于工作没有更新博客,今天休息顺便把golang websocket研究了一下,挺好玩的,写了一个聊天室,分享给大家. websocket包 : code.google.com/p/go.net/websocket 文档 : http://go.pkgdoc.org/code.google.com/p/go.net/websocket 首先安装websocket包 复制代码 代码

Golang巧用defer进行错误处理的方法

2017-05-20
本文主要跟大家介绍了Golang巧用defer进行错误处理的相关内容,分享出来供大家参考学习,下面来看看详细的介绍: 问题引入 毫无疑问,错误处理是程序的重要组成部分,有效且优雅的处理错误是大多数程序员的追求.很多程序员都有C/C++的编程背景,Golang的程序员也不例外,他们处理错误有意无意的带着C/C++的烙印. 我们看看下面的例子,就有一种似曾相识的赶脚,代码如下: func deferDemo() error { err := createResource1() if err != n

Golang实现的聊天程序服务端和客户端代码分享

2014-10-27
实现逻辑 1.Golang 版本  1.3 2.实现原理: 1.主进程建立TCP监听服务,并且初始化一个变量 talkChan := make(map[int]chan string) 2.当主进程ACCEPT连接请求后,利用go 启动一个协程A去维持和客户端的连接,把taokChan带入到协程里 3.和客户端建立连接的协程A,发送消息给客户端,使其发送自己的用户信息. 4.协程A在收到客户端发送的用户信息后,建立一个此用户对应的管道 talkChan[uid] = make(chan stri

Golang加密解密之RSA(附带php)

2016-08-02
RSA加密算法简史 RSA是1977年由罗纳德·李维斯特(Ron Rivest).阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的.当时他们三人都在麻省理工学院工作.RSA就是他们三人姓氏开头字母拼在一起组成的. RSA加密算法原理 学过算法的朋友都知道,计算机中的算法其实就是数学运算.所以,再讲解RSA加密算法之前,有必要了解一下一些必备的数学知识.我们就从数学知识开始讲解. 必备数学知识 RSA加密算法中,只用到素数.互质数.指数运算.模运算等

golang简单读写文件示例

2016-07-21
本文实例讲述了golang简单读写文件的方法.分享给大家供大家参考,具体如下: 这里演示golang读写文件的方法: 复制代码 代码如下: package main import (     "fmt"     "os" ) func main() {     f, err := os.OpenFile("file2.txt", os.O_RDWR | os.O_CREATE | os.O_APPEND, 0x644)     if err !=

golang实现通过smtp发送电子邮件的方法

2016-07-20
本文实例讲述了golang实现通过smtp发送电子邮件的方法.分享给大家供大家参考,具体如下: 今天写了一个公司的邮件发送后台服务,php只需要把邮件存入数据库,然后golang写的mailservice就会吧邮件发送出去.这个公司的代码就不发出来的,以为带有公司的业务逻辑,我把代码整理了一下发布出来供大家参考.呵呵 复制代码 代码如下: package main import (     "fmt"     "net/mail"     "net/smt

golang image图片处理示例

2016-07-20
本文实例讲述了golang image图片处理方法.分享给大家供大家参考,具体如下: golang处理图片挺简单的,我是过功能挺简单的,没有过一个缩略图方法. 复制代码 代码如下: package main import (     "fmt"     "os"     "image"     "image/color"     "image/draw"     "image/jpeg"