![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Go
文章平均质量分 73
DuanJiaNing_
越努力越幸运
展开
-
使用 Delve 调试远程 Go 应用
使用 Delve 调试远程 Go 应用Delve 是 Go 语言的一个调试器。其目标是为 Go 语言提供一个易用,拥有完整功能的调试工具。安装可以参考这里。用 dlv version 命令验证是否安装成功:$ dlv versionDelve DebuggerVersion: 1.7.1Build: $Id: 3bde2354aafb5a4043fd59838842c4cd4a8b6f0b $构建应用在实际项目中 Delve 可以方便我们在本地调试部署在远程的 Go 应用,但为了使 De原创 2021-09-06 16:15:38 · 611 阅读 · 1 评论 -
减少方法的副作用(Side Effects)
方法的本质是接收一些数据作为输入,进行处理然后产生输出,如果方法内部不会对任何外部状态进行改变(例如改变了某个全局变量的值,数据库数据,或是文件内容等),那么这个方法可以称之为纯净的方法(Pure function)。go 基础库中有许多这样的纯净方法:math/pow.gofunc Pow(x, y float64) float64strings/strings.gofunc Replace(s, old, new string, n int) string下面示例中 generateKe原创 2021-08-18 12:57:27 · 465 阅读 · 0 评论 -
map 原理
本文大部分内容摘抄自 Go Questions.在计算机科学里,被称为相关数组、map、符号表或者字典,是由一组 <key, value> 对组成的抽象数据结构,并且同一个 key 只会出现一次。有两个关键点:是由 key-value 对组成的;key 只会出现一次。哈希查找表用一个哈希函数将 key 分配到不同的桶(bucket,也就是数组的不同 index)。这样,开销主要在哈希函数的计算以及数组的常数访问时间。在很多场景下,哈希查找表的性能很高。哈希查找表一般会存在“碰撞”的问题,原创 2021-06-07 10:31:55 · 688 阅读 · 0 评论 -
使用 google/wire 对 Go 项目进行依赖注入
google/wire 是 Go 语言的编译时依赖注入框架,与 Spring IoC 一样,wire 的目的也是让开发者从对项目中大量依赖的创建和管理中解脱出来,但两者在实现方式上有着很大的不同。Go 中的依赖注入在 Go 中,我们通常采取在构造函数中传入依赖的方式创建对象:func main() { NewUserStore(conf.Load(),db.InitMySQL())}func NewUserStore(cfg *Config, db *mysql.DB) (*UserStore原创 2021-01-20 15:50:33 · 849 阅读 · 0 评论 -
使用 Goroutine 和 Chanel 快速实现并发和排队
问题:某线下营业厅有 10 个业务办理窗口,每个窗口同一时刻只能接待一位客人。用 Goroutine 模拟同时有 12 个客户需要办理业务的过程。思路是这样的:一个 Goroutine 负责将这些任务(也就是例子中的客户)分发到 jobChannel 中,另一个 Goroutine 读取 jobChannel,读到任务后检查是否还有执行器(抽象出来的概念,也就是例子中的业务办理窗口)可以执行该任务,有就创建 Goroutine 进行执行,否则等待,当有可用执行器时继续。这里**“检查是否还有可用执行器”原创 2021-01-04 17:36:13 · 283 阅读 · 0 评论 -
一. Go 为什么快?(译: 五件事让Go变得如此之快)
原文地址: five things that make go fast.本文并非完整翻译,只对原文关键部分进行提取归纳。正文:当人们谈论到为什么做出学习Go的决定时,往往会有不同的回答,但总有三个原因是他们都会谈及的:并发性(Concurrency)易于部署(Ease to deployment)性能(Performance)人们选择Go的一个重要原因是因为它快。Go的众多特性中...翻译 2020-04-28 15:42:12 · 825 阅读 · 0 评论 -
Go 实现简单的请求路由和中间件框架
go 中区分函数和方法,方法依附于对象,需要先创建对象,才能调用对象的方法;而函数是包级的,只要是公开的,那么通过包就可以访问。go 中定义新的类型有两种方式,类型别名和结构体:// 类型别名type Integer inttype Integer1 = int// 结构体type User struct { Name string Age int}此外,类型别...原创 2020-01-06 14:55:44 · 756 阅读 · 0 评论 -
grpc java client, go server 错误 io.grpc.StatusRuntimeException: UNAVAILABLE
java client 获取 channel 的代码如下: public ManagedChannel getChannel() { ManagedChannel channel = ManagedChannelBuilder.forAddress(config.getGrpc().getHost(), config.getGrpc().getPort()) ...原创 2019-11-14 15:30:19 · 9120 阅读 · 0 评论 -
for 循环中取地址引发的错误
在for a,b := range c 遍历中, a 和 b 在内存中只会存在一份,即之后每次循环时遍历到的数据都是以值覆盖的方式赋给 a 和 b,a,b 的内存地址始终不变。以下是错误代码示例: p := []s2.Rect{} var rs []*s2.Rect for _, r := range p.Rect { rs = append(rs, &r) }因为...原创 2019-07-30 17:32:05 · 546 阅读 · 0 评论 -
GoMailer - 用 Go 开发的轻量电子邮件推送服务
GoMailer轻量电子邮件推送服务(A lightly email sending service for Go)通过form提交用户输入的数据,GoMailer会将这些数据填入预先定义好的邮件内容模板中,并帮你把内容投递到指定的邮箱。也可以选择把邮件暂存在GoMailer中,另外选择时间手动触发投递。额外的可选配置:支持开启reCaptcha验证,避免恶意投递配置请求成功或失败时...原创 2020-03-26 00:00:04 · 1565 阅读 · 0 评论