• 使用 Go 重构 - Goroutine 并发

    很意外,我这些天开始写 Go 了! 最近,我发现了一些使用简单的并发解决方案的代码。鉴于我已经使用过类似的模式,我得到的结论是,它应该是受基本 Goroutines 示例代码的启发。 ## 场景 假设你希望运行特定数量的任务,而这些任务很容易并行化 ( 没有副作用,没有外部依赖等等 ),并且希望存储每个任务的结果。Go 的解决方案就是使用多个 Goroutine。 我重构的真实代码是:通过调用 100 次 `net.LookupHost` 来计算系统中的平均 DNS 延迟...

  • Go 编译器 nil 指针检查

    ## 简介 我在思考编译器是如何保护我们写的代码。无效的内存访问检查是编译器添加到代码中的一种安全检查。我们可能会认为这种“额外的代码”会损耗程序的性能,甚至可能需要数十亿的迭代操作。但是,这些检查可以防止代码对正在运行的系统造成损害。编译器本质上是指出和查找错误,使我们编写的代码在运行时更安全。 基于上述考虑,同时 Go 语言想要达成更快的编译速度,如果硬件可以解决这些问题,那么 Go 语言编译器就会使用硬件来解决问题。其中一种情况是检测无效的内存访问。有时编译器会在代码中添加 n...

  • Go 语言的内存管理

    这篇博客是我在维尔纽斯的 [Go Meetup](https://www.meetup.com/Vilnius-Golang/events/249897910/) 演讲的总结。如果你在维尔纽斯并且喜欢 Go 语言,欢迎加入我们并考虑作演讲 在这篇博文中我们将要探索 Go 语言的内存管理,首先让我们来思考以下的这个小程序: ```go func main() { http.HandleFunc("/bar", func(w http.ResponseWriter, r *h...

  • 120
    与 Jupyter 交互的 Go 编程

    ![](https://raw.githubusercontent.com/studygolang/gctt-images/master/jupyte/go_jupyter_1.jpeg) 最近几年,Go 语言变得非常流行。我是 Python 的狂热粉丝,三年前我的第一个业余项目也是用 Python 实现的。而现在我开始使用 Go 语言来取代 Python,因为不管是业余爱好的小项目还是公司里的大项目,Go 语言能让我的编码效率更高。 与此同时,随着机器学习和数据科学(data sc...