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 问题”

Golang中的面向对象继承

Golang的面向对象机制与Smalltalk或者Java等传统面向对象的编程语言不同。传统面向对象编程语言的一个重要特性是继承机制。因为继承机制支持在关联对象间进行代码复用和数据共享。继承机制曾在代码复用和数据共享的设计模式占据主导地位,但是目前组合这一古老的技术重新焕发了活力。

继续阅读“Golang中的面向对象继承”

Golang slice 和 PHP 数组比较

Creating

Create an array in PHP

In Go creating the above is a little more verbose and like variable assignment above there’s also multiple ways to create a slice. The most similar way to that of PHP is as follows.

继续阅读“Golang slice 和 PHP 数组比较”

Golang goroutine 基本用法

关于 Golang 的 goroutine 基本用法,先看这段代码:

执行结果是什么都没有打印,为什么?因为 goroutine 还没执行 main 函数已经退出了。

继续阅读“Golang goroutine 基本用法”