Go 实战丨微信公众号接入及用户消息处理

使用 Go 语言的 Web 框架 Gin 进行微信公众号接入,并实现对微信消息的接收以及回复处理。 同时借助 nginx 代理服务器对代理的端口号以及 URI 进行优化处理。 在文章末尾给出该 Demo 的项目地址。 目录 公众号接入 消息接收 消息回复 使用 ngxin 代理服务器 小结 公众号接入 这里使用微信公众平台提供的接口测试号用于开发使用,接口测试号申请。 公众号的接入主要有两个步骤,微信公众平台接入指南: 填写服务器配置 验证服务器地址的有效性 第一步需要配置服务器的 URL 地址...阅读全文

掘金 2020年04月04日 ColeLie

【Go语言踩坑系列(七)】Goroutine(上)

声明 本系列文章并不会停留在Go语言的语法层面,更关注语言特性、学习和使用中出现的问题以及引起的一些思考。 进程,线程到协程的发展 计算机发展至今有几个至关重要的时期: 1. 单任务时代 这个时代主要标志为批处理。我们都知道早期的计算机就是穿孔打卡来运行的,需要人工去做输入输出的处理工作,计算机只进行了计算,而且每次都只能执行一个流程,然后循环往复,这个大流程下计算机很大程度上是没有执行的,所以。为了解决这个问题,出现了批处理,它把之前一次执行的任务聚合起来,统一传输给计算机处理,计算机做统一的...阅读全文

Segmentfault 2020-04-07 10:32:32 NoSay

Go 自定义日期时间格式解析解决方案 - 解决 `parsing time xx as xx: cannot parse xx as xx` 错误

最近在解析 Go 的日期数据格式时(mysql 的 datetime 类型)时遇到个问题,在网上搜了很多方案都试了以后发现不可行,于是自己尝试解决后将解决方案发布出来。 Go 自身的 time.Time 类型默认解析的日期格式是 RFC3339 标准,也就是 2006-01-02T15:04:05Z07:00 的格式。如果我们想要在 Gin 的 shouldBindJSON 方法中,传入 YYYY-MM-DD hh:mm:ss 格式的日期格式作为 time.Time 类型的值,就会引发类似于 p...阅读全文

掘金 2020年04月04日 晒兜斯

Go 自定义日期时间格式解析解决方案 - 解决 `parsing time xx as xx` 错误

最近在解析 Go 的日期数据格式时(mysql 的 datetime 类型)时遇到个问题,在网上搜了很多方案都试了以后发现不可行,于是自己尝试解决后将解决方案发布出来。 Go 自身的 time.Time 类型默认解析的日期格式是 RFC3339 标准,也就是 2006-01-02T15:04:05Z07:00 的格式。如果我们想要在 Gin 的 shouldBindJSON 方法中,传入 YYYY-MM-DD hh:mm:ss 格式的日期格式作为 time.Time 类型的值,就会引发类似于 p...阅读全文

Segmentfault 2020-04-07 09:32:35 晒兜斯

每天一点Go语言——变量、常量、运算符解析

每天一点Go语言——变量、常量、运算符解析 前言 ​ 前面简单说过有关Go语言的基础语法及其数据类型,大致上了解了Go语言程序的组成,而本文将讲述近乎所有编程语言都涉及的变量、常量以及运算符相关内容。 一、变量 何为变量? ​ 对该专业名词解释:计算机语言中能储存计算结果或能表示值抽象概念。变量可以通过变量名访问。Go语言中的变量由字母、数字、下划线组成,首字母不可以为数字。耳熟能详了哈~ ​ 笔者的理解:我编写程序的时候需要使用一个值,并且我一直想要重复使用,而且有时候这个值会发生变化等等,所...阅读全文

51CTO博客 2020-04-04 14:58:52 wx5d8a17c45cb5b

链式调用 | 我的代码没有else

嗯,我的代码没有else系列,一个设计模式业务真实使用的golang系列。 前言 本系列主要分享,如何在我们的真实业务场景中使用设计模式。 本系列文章主要采用如下结构: 什么是「XX设计模式」? 什么真实业务场景可以使用「XX设计模式」? 怎么用「XX设计模式」? 本文主要介绍「责任链模式」如何在真实业务场景中使用。 什么是「责任链模式」? 首先把一系列业务按职责划分成不同的对象,接着把这一系列对象构成一个链,然后在这一系列对象中传递请求对象,直到被处理为止。 我们从概念中可以看出责任链模式有如...阅读全文

掘金 2020年04月04日 TIGERB

leetcode_394

Golang: 思路:搬我的题解过来了 第一次没有看到类似"[[]]"的嵌套结构,因此写了一版只含一层的"[]"的字符串解析 于是后面看到了双层"[]"的嵌套结构后,想到了递归实现,同时想到了栈 但这里不需要栈,只需要记录与"["符号相对应的"]"出现的位置即可 于是就有了下面的这种解法 代码如下: func decodeString(s string) string { var res strings.Builder for i:=0;i<len(s);i++{ if s[i]<'0'||s[...阅读全文

简书 2020-04-04 14:32:51 淳属虚构

不同语言在函数内部定义函数

在 LeetCode 刷题的时候,题解有的大佬给出的答案很优秀,是 python 的,想抄作业发现有的功能函数都定义在答案函数的内部,主要是闭包操作外部变量方便。不同语言在函数内部定义函数稍有不同,于是记录下自己可能用到的语言在函数中定义函数的方式。 python python 定义内部函数加个 def 就行,和使用变量差别不大,可以在参数列表后跟->指定返回值。 def outerFunc() -> None: a: int = 1 def innerFunc(b: int) -> int: ...阅读全文

简书 2020-04-04 14:32:51 玖零儛

leetcode_384

Golang: 思路:实现不难,这里注意,go提供了库函数可以打乱数组,但这里依然使用了手写来实现 代码如下: type Solution struct { src []int } func Constructor(nums []int) Solution { return Solution{src:nums} } /** Resets the array to its original configuration and return it. */ func (this *Solution) ...阅读全文

简书 2020-04-04 14:32:51 淳属虚构

leetcode_917

Golang: 思路:简单题翻车,因为条件句少写个()。。。 代码如下: func reverseOnlyLetters(S string) string { bytes:=[]byte(S) pt1,pt2:=0,len(S)-1 for pt1<pt2{ if ((bytes[pt1]>='A'&&bytes[pt1]<='Z')||(bytes[pt1]>='a'&&bytes[pt1]<='z'))&&((bytes[pt2]>='A'&&bytes[pt2]<='Z')||(bytes...阅读全文

简书 2020-04-04 14:32:50 淳属虚构

golang context提前退出

golang中context包实现提前退出 以前不知道怎么写的,一直无法退出,还以为程序就是无法提前退出。。 下面的程序,request休眠100s,然后在另外一个goroutine中,3s后退出所有context import ( "context" "log" "sync" "time" ) func request() { time.Sleep(100 * time.Second) } var wg sync.WaitGroup func do(ctx context.Context,wg...阅读全文

简书 2020-04-04 14:32:50 darcyaf

VsCode配置Golang开发环境,基于Go Modules

本文参考 从零开始搭建Go语言开发环境 之前都是使用 LiteIDE 开发Go,在IDE里就能设置任意 GOPATH 目录,挺方便。后来看到 VsCode 这么强大,也打算折腾一下。折腾一两个小时发现其实不算太麻烦。 Go语言1.14版本之后推荐使用Go Modules管理,所以我们可以在任何目录里建立Go项目。 总共三步: 安装 Golang 配置代理 安装 VsCode 插件 1. 安装Golang 建议去官网下载安装,Homebrew 有时候很好用,不过有可能更新不及时,或者它自己无法更新...阅读全文

简书 2020-04-04 14:32:50 看着我别说话

python3从零学习-python哲学

python哲学python设计哲学思想可以从python留的彩蛋里面一窥究竟。打开Python控制台,这个我下一节会讲怎么打开python控制台,然后输入import this,就会出现以下内容:>>> import thisThe Zen of Python, by Tim PetersBeautiful is better than ugly.Explicit is better than implicit.Simple is better than complex.Complex is ...阅读全文

简书 2020-04-04 14:32:49 山海皆可平z

3.变量和常量

Go语言基础之变量和常量 | Golang 变量和常量是编程中必不可少的部分,也是很好理解的一部分。 标识符与关键字 标识符 在编程语言中标识符就是程序员定义的具有特殊意义的词,比如变量名、常量名、函数名等等。 Go语言中标识符由字母数字和_(下划线)组成,并且只能以字母和_开头。 举几个例子:abc, _, _123, a123。 关键字 关键字是指编程语言中预先定义好的具有特殊含义的标识符。 关键字和保留字都不建议用作变量名。 Go语言中有25个关键字: break default func...阅读全文

简书 2020-04-04 09:32:48 雪上霜

如何使用Sqlmock对GORM应用进行单元测试

概述 对DB交互代码进行单元测试并不容易,当涉及到诸如GORM之类的ORM库时,这将变得更加困难。 从理论上讲,我们可以使用强大的模拟工具GoMock)来模拟 database/sql/driver 的所有接口(例如Conn和Driver)。但是,即使在GoMock的帮助下,我们仍然需要大量的手工工作来完成这种测试。 好消息是Sqlmock可以解决上述问题。正如其官方网站所宣布的那样,它是一个“用于golang的SQL模拟驱动程序,用于测试数据库交互。” 本文将向您展示如何使用Sqlmock对一...阅读全文

Segmentfault 2020-04-07 09:32:35 如来神掌

Go笔记1--安装

下载 到这https://golang.org/doc/install下载你所需的安装文件,接下来以linux为例子说明该安装过程。 我这里选择了go1.10.2.linux-amd64.tar.gz这个安装包。 安装 将下载的安装包解压到 /usr/local,命令如下 tar -C /usr/local -xzf go1.10.2.linux-amd64.tar.gz 配置环境变量 go.png 解压后会出现一个go文件夹,go文件夹下有一bin文件夹,接下来把/usr/local/go/b...阅读全文

简书 2020-04-03 20:33:00 穷人黄六

golang-操作不同状态的chan会引起状态总结

panic: 向已经关闭的通道写数据会导致panic。 重复关闭通道会导致panic 死锁 fatal error: all goroutines are asleep - deadlock! 无缓冲通道:需要同时有提供者(chan <- ) 和消费者(<-chan),假如有一方不同时存在,就会死锁. 有缓冲通道:通道缓冲区已满,并且还有goroutine向通道写(chan <- ),但是没有goroutine 读通道(<-chan)到导致死锁. 有缓冲通道:通道内无数据,并且没有gorouti...阅读全文

简书 2020-04-03 20:32:59 崔天浩

2.安装

安装Go语言及搭建Go语言开发环境 注意:Go语言1.14版本之后推荐使用go modules管理以来,也不再需要把代码写在GOPATH目录下了,之前旧版本的教程戳这个链接。 下载 下载地址 Go官网下载地址:https://golang.org/dl/ Go官方镜像站(推荐):https://golang.google.cn/dl/ 版本的选择 Windows平台和Mac平台推荐下载可执行文件版,Linux平台下载压缩文件版。 下图中的版本号可能并不是最新的,但总体来说安装教程是类似的。Go语...阅读全文

简书 2020-04-03 20:32:58 雪上霜