使用 VS Code 断点调试 golang 项目

在 golang 开发中进行调试,调试手段除了打印输出、打印日志、单元测试之外,还可以通过 IDE 进行断点调试,这是一个更加直观的方式,这里简单介绍 Visual Studio Code 调试 Golang 项目。

准备工作

如果没有安装 delve 插件,会报错:

Failded to continue:”Cannot find Delve debugger. Install from https://github.com/derekparker/delve & ensure it is in your “GOPATH/bin” or “PATH”
继续阅读“使用 VS Code 断点调试 golang 项目”

Golang 让 for 循环运行一段时间超时自动退出

如何控制 for 循环一段时间超时自动退出呢?思路很简单,就是在 for 循环中使用 select 监听 channel,代码如下:

继续阅读“Golang 让 for 循环运行一段时间超时自动退出”

Golang 中”泛型”的支持

Golang不支持一般的类似java中的标记式泛型。很多人因此而十分不满,认为没有泛型增加了很多工作量。而目前由于泛型支持的复杂性,Golang的设计和实现者并没有把这个泛型支持作为紧急需要增加的特性。但是,如果真的没有泛型,就一定不行了么?答案当然是否定的。没有泛型也可以,而且我觉得代码更简单,直接,有趣(个人观点,勿喷)。

我们这里打算以一些例子来讲解Golang中如何处理这个问题。

首先,我们看一个冒泡排序的问题。针对整型数组切片的排序。

继续阅读“Golang 中”泛型”的支持”

Golang 解析 json 数据

使用 Golang 解析 json 数据,这种 json 格式是对象的数组,官方文档有一个示例:

继续阅读“Golang 解析 json 数据”

defer使用规则

在golang当中,defer代码块会在函数调用链表中增加一个函数调用。这个函数调用不是普通的函数调用,而是会在函数正常返回,也就是return之后添加一个函数调用。因此,defer通常用来释放函数内部变量。

为了更好的学习defer的行为,我们首先来看下面一段代码:

继续阅读“defer使用规则”

Golang 遍历一个月写法

Golang 遍历一个月每天写法:

使用 goroutine 并发写 map 问题

使用 goroutine 并发写 map 是一个非线程安全的方式,要避免对一个全局变量在 goroutine 中进行写操作,这会导致并发写问题。

以下例子可以触发此类错误:

对于 const 常量和只读全局变量,是线程安全的,但不能并发写。

继续阅读“使用 goroutine 并发写 map 问题”