为什么Go中有的自定义error会导致内存溢出

分享一个在go tour上看到的练习题,练习里要求用户自己定义一个错误类型,实现error接口,函数在参数不满足条件的时候返回自定义的错误类型的值。练习中特别提示用户不要在实现的Error方法里直接使用fmt.Sprint(e)以避免造成程序内存溢出。 下面贴一下具体的练习题 Practice 从之前的练习中复制 Sqrt 函数,修改它使其返回 error 值。 Sqrt 接受到一个负数时,应当返回一个非 nil 的错误值。复数同样也不被支持。 创建一个新的类型 type ErrNegative...阅读全文

Segmentfault 2019-10-14 04:32:38 KevinYan

Golang实现统计文件内容的字符,数字,符号数量

废话不多说,直入主题 今天学习了通过Golang语言实现了统计文件内容中的字符,空格,数字,符号的数量, 当然也可以用来统计更多,例如:统计汉字,大写/小写字母等...仅需要更改部分代码即可. 知识点总结 代码实现前的思路分析: 打开一个文件,创建一个reader 每读取一行,就去统计该行有多少个字符,数字,空格等数量 然后将统计的数量储存到一个结构体内 引入的包有:bufio, io,os,fmt 源代码参考 package main import ( "bufio" "fmt" "io" "...阅读全文

简书 2019.10.12 23:47:38 aside section . 等

Debian安装Mariadb记录

安装: sudo apt update sudo apt install mariadb-server sudo systemctl status mariadb 开启远程访问: #注释掉skip-networking开启远程访问. #注释bind-address允许所有远程的机器连接. vi /etc/mysql/my.cnf #进入数据库给账户授权远程访问. use mysql; GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY ...阅读全文

简书 2019.10.12 21:56:38 aside section . 等

为什么你们不喜欢使用switch,而是大量的 if...else if?

作者:熊爸爸的科技工坊请用5秒钟的时间查看下面的代码是否存在bug。 OK,熟练的程序猿应该已经发现Bug所在了,在第8行和第10行下面我没有添加关键字break; 这就导致这段代码的行为逻辑与我的设计初衷不符了。缺点一. 语法正确,逻辑错误这就是第一个理由为什么程序猿很少使用switch来做条件判断,对于新手来说忘记写break实在是再普通不过了,就算是老猿忘记写也是时有发生的事情,而这个语法错误在诸多的语法检查器上没有办法检查出来的,因为从语法角度来说是正确的!可是代码的处理逻辑却是错误的!...阅读全文

简书 2019.10.12 21:59:06 aside section . 等

Golang新手笔记

前言: 最近在学习golang,简单记录归纳了一些常用的语法,希望能够对小白选手有所帮助。 一、25个关键字 break default function interface select case defer go map struct chan else goto package switch const fallthrough if range type continue for import return var 二、变量 var vname type=value //标准定义 var ...阅读全文

简书 2019.10.12 20:19:24 aside section . 等

go panic recover源码解析

panic和recover是golang的两个内置函数。当函数F调用panic,函数F会停止运行,F包裹着的defer函数会全部正常运行,然后返回调用F的函数。如果没有recover,F对于调用方,就像panic。Process继续执行堆栈,直到发生panic的goroutine所有方法返回。panic可以被runtime errors,或者直接调用 panic()函数触发 recover只在defer函数中有效这一部分内容来自Defer, Panic, and Recover翻译 panic例...阅读全文

Segmentfault 2019-10-14 04:32:38 bunnyhuangw

Golang 运行时学习笔记.md

interface // src/runtime/runtime2.go type iface struct { type eface struct { 非空接口类型 iface 结构体包含: tab *itab data unsafe.Pointer 空接口类型(即 interface{} 类型) eface 结构体包含: _type *_type data unsafe.Pointer itab 结构体包含: hash uint32 用于在接口和具体类型转换时判定类型是否相符 inter *...阅读全文

简书 2019.10.12 17:55:30 aside section . 等

ETH-Ubuntu下安装

官方安装指导: https://github.com/ethereum/go-ethereum/wiki/Installation-Instructions-for-Ubuntu 不要在线安装golang,源码进行安装: curl -O https://storage.googleapis.com/golang/go1.9.2.linux-amd64.tar.gz tar -C /usr/local -xzf go1.9.2.linux-amd64.tar.gz mkdir -p ~/go; e...阅读全文

简书 2019.10.12 13:32:05 aside section . 等

golang之反射

反射这个概念绝大多数语言都有,比如Java,PHP之类,golang自然也不例外,反射其实程序能够自描述和自控制的一类机制。 比如,通过PHP的反射,你可以知道一个类有什么成员,有什么方法。而golang,也能够通过官方自带的reflect包来了解各种变量类型及其信息。 下面我们通过一个例子查看反射的基本用法。 话不多说,直接贴代码: package main import ( "fmt" "reflect" ) type Order struct { ordId int customerId ...阅读全文

简书 2019.10.12 15:43:18 aside section . 等

Golang从入门到精通

Golang从入门到精通适用人群大学生、IT从业者以及有意向转入golang开发的广大程序员,对高并发、大用户量的应用系统有着浓厚的兴趣。课程概述Golang从入门到精通,本课程以学习Golang语言开发互联网产品为目标,从基础理论知识入手,详实地讲解Golang语言的开发方法与技巧,并通过大量的线上训练,带领同学们全面掌握服务端高并发、过载保护、水平扩展、服务降级、服务限流以及微服务等主流互联网产品的开发技术栈,快速达到大公司工作两年的技术水平。链接:https://pan.baidu.com...阅读全文

简书 2019.10.12 16:52:03 aside section . 等

《微信小程序云开发-从0打造云音乐全栈小程序【完整无密】》

​微信小程序云开发-从0打造云音乐全栈小程序以小程序最新技术,最新云开发模式,打造一个云音乐全栈小程序,以各种自定义组件开发小程序前端部分,小程序云开发小程序后端部分,并配套一个后台管理系统连接小程序云数据库及云存储,实现对项目数据的管理。在一门课程中,让你吃透小程序开发所有技术点,让你一个人也能实现全栈开发适合人群课程为小程序进阶课程,全面集成了小程各类知识点任何有追求,并符合技术储备要求的人都可以学习技术储备要求HTML /CSS基础知识JavaScript基础知识微信小程序基础知识百度网盘...阅读全文

Go语言中文网 2019-10-12 16:51:49 liudehua

Go语言之性能测试相关(基准测试)

来自公众号:灰子学技术 原文链接:https://mp.weixin.qq.com/s/CmiPafXfvzJjM6UxaFCaCQ在Go语言中,提供了测试函数性能(CPU和Memory)的测试方法,基准测试。基准测试主要用来测试CPU和内存的效率问题,来评估被测代码的性能。测试人员可以根据这些性能指标的反馈,来优化我们的代码,进而提高性能问题。本篇文章主要来介绍,基准测试的使用方法和性能指标的分析。1. 使用规则如下所示:1.基准测试的代码文件必须以_test.go结尾。2.基准测试的函数必须...阅读全文

Go语言中文网 2019-10-12 15:22:32 ZhDavis

国内go get无法使用解决办法

由于我国的政策问题,外网一直是我们渴望而不可求的。在使用go get时我们就可以感觉到,那么我们该怎么解决呢?有VPN代理的绕过本文章就可以了,还有网上说的使用gopm这个工具,类似于Node.js的npm,但是我们从内心还是想用go get,但自己又没有VPN代理怎么办?一个网站解决了我们这个问题——https://goproxy.io/我们可以将go的代理设置为这个网站就可以,具体的教程此网站又明确的步骤,根据你go版本的不同去设置即可——传送门阅读全文

Go语言中文网 2019-10-12 15:09:12 huhailong

使用 Go 完成用户业务逻辑

简介 路由总览 定义 handler 校验参数 加密密码和数据库存储 其他 handler 获取用户列表 更新用户 总结 当前部分的代码 简介 在上一节中, 已经大致学习了如何使用 Gin 读写请求. 这一节就是实践了, 完成一个用户业务逻辑处理. 主要包括以下功能: 创建用户 删除用户 更新用户 查询用户列表 查询指定用户的信息 这一节是核心部分, 因为这个项目的主要功能就是在这部分实现的. 路由总览 这部分的代码改动很大, 毕竟要完成上述的功能会增加很多代码. 首先, 来看下路由, rout...阅读全文

掘金 2019年10月12日 帅气猫咪

kubernetes垃圾回收器GarbageCollector Controller源码分析(二)

kubernetes版本:1.13.2 接上一节:kubernetes垃圾回收器GarbageCollector Controller源码分析(一) 主要步骤 GarbageCollector Controller源码主要分为以下几部分: monitors作为生产者将变化的资源放入graphChanges队列;同时restMapper定期检测集群内资源类型,刷新monitors runProcessGraphChanges从graphChanges队列中取出变化的item,根据情况放入attem...阅读全文

Segmentfault 2019-10-14 04:32:37 小碗汤

12306抢票带来的启示:看我如何用Go实现百万QPS的秒杀系统

本文为开源实验性工程:“github.com/GuoZhaoran/spikeSystem”的配套文章,原作者:“绘你一世倾城”,现为:猎豹移动php开发工程师,感谢原作者的技术分享。 1、引言 Go语言的出现,让开发高性能、高稳定性服务端系统变的容易,与高贵冷艳的Erlang语言不同的是,Go语言简单易学,在高性能服务端架构中的应用越来越广泛。 对于即时通讯(IM系统、消息推送系统等高性能实时通信等)等场景下,Go语言已经被越来越多的用于核心通信模块中。本文内容虽是从秒杀系统谈起,并未直接涉及...阅读全文

Segmentfault 2019-10-14 04:32:37 JackJiang

【设计模式】【golang源码】 单例模式(Singleton Pattern)

单例模式目的:对象初始化成本比较高,防止一个被多次初始化。 var ( confOnce sync.Once // guards init of confVal via initConfVal confVal = &conf{goos: runtime.GOOS} ) // systemConf returns the machine's network configuration. func systemConf() *conf { confOnce.Do(initConfVal) retur...阅读全文

Segmentfault 2019-10-14 04:32:35 山丘