最新 | 最热门 | 最高评价

-1  一个select死锁问题

Tag: Technical | Golang
老王 发于 2021年08月29日 21:12 | 点击: 2058 | 展开摘要
话说前几天我遇到了一个死锁问题,当时想了一些办法糊弄过去了,不过并没有搞明白问题的细节,周末想起来便继续研究了一下,最终便有了这篇文章。

让我们搞一段简单的代码来重现一下当时我遇到的问题:

package main

import "sync"

func main() {
var wg sync.WaitGroup
foo := make(chan int)
bar := make(chan int)
closing := make(chan struct{})

查看全文: http://www.udpwork.com/item/18152.html

+0  实战CGO

Tag: Technical | Golang
老王 发于 2021年07月03日 14:55 | 点击: 626 | 展开摘要
某项目要集成 PDF 文件的 OCR 功能,不过由于此功能技术难度太大,网络上找不到靠谱的开源实现,最终不得不选择 ABBYY FineReader Engine 的付费服务。可惜 ABBYY 只提供了 C++ 和 Java 两种编程语言的 SDK,而我们的项目采用的编程语言是 Golang,此时通常的集成方法是使用 C++ 或 Java 实现一个服务,然后在 Golang 项目里通过 RPC 调用服务,不过如此一来明显增加了系统的复杂度,好在 Golang 支持 CGO,让

查看全文: http://www.udpwork.com/item/18008.html

+0  浅谈pprof

Tag: Technical | Golang
老王 发于 2021年06月06日 15:37 | 点击: 558 | 展开摘要
对于大多数 Gopher 而言,一般平时最主要的工作内容除了实现各种无聊的业务逻辑之外,剩下的就是解决各种琐碎的问题。比如:查询性能瓶颈在哪里?查询内存泄漏在哪里?好在 pprof 是处理此类问题的利器,共有两套标准库,分别适用于不同的场景:

runtime/pprof:采集工具型应用运行数据进行分析

net/http/pprof:采集服务型应用运行时数据进行分析

命令行工具「go test」就包含了 runtime/pprof,相关参数请参考「go help test

查看全文: http://www.udpwork.com/item/17913.html

+0  Go 编程模式:k8s Visitor 模式

Tag: Go 语言 | 程序设计 | 编程语言 | design pattern | Go | golang | Kubernetes | Visitor Pattern
陈皓 发于 2020年12月26日 19:25 | 点击: 775 | 展开摘要
本篇文章主要想讨论一下,Kubernetes 的 kubectl 命令中的使用到到的一个编程模式 – Visitor(注:其实,kubectl 主要使用到了两个一个是Builder,另一个是Visitor)。本来,Visitor 是面向对象设计模英中一个很重要的设计模款(参看Wikipedia Visitor Pattern词条),这个模式是一种将算法与操作对象的结构分离的一种方法。这种分离的实际结果是能够在不修改结构的情况下向现有对象结构添加新操作,是遵循开放/

查看全文: http://www.udpwork.com/item/17487.html

+0  Go编程模式:Pipeline

Tag: Go 语言 | 程序设计 | 编程语言 | channel | Go | golang | pipeline
陈皓 发于 2020年12月26日 17:04 | 点击: 815 | 展开摘要
本篇文章,我们着重介绍Go编程中的Pipeline模式。对于Pipeline用过Unix/Linux命令行的人都不会陌生,他是一种把各种命令拼接起来完成一个更强功能的技术方法。在今天,流式处理,函数式编程,以及应用网关对微服务进行简单的API编排,其实都是受pipeline这种技术方式的影响,Pipeline这种技术在可以很容易的把代码按单一职责的原则拆分成多个高内聚低耦合的小模块,然后可以很方便地拼装起来去完成比较复杂的功能。

本文是全系列中第8 / 9篇:Go编程模式

查看全文: http://www.udpwork.com/item/17488.html

+0  Go编程模式:委托和反转控制

Tag: Go 语言 | 程序设计 | 编程语言 | Go | golang | IoC
陈皓 发于 2020年12月26日 16:57 | 点击: 728 | 展开摘要
图片来源:GopherSource
反转控制IoC – Inversion of Control 是一种软件设计的方法,其主要的思想是把控制逻辑与业务逻辑分享,不要在业务逻辑里写控制逻辑,这样会让控制逻辑依赖于业务逻辑,而是反过来,让业务逻辑依赖控制逻辑。在《IoC/DIP其实是一种管理思想》中的那个开关和电灯的示例一样,开关是控制逻辑,电器是业务逻辑,不要在电器中实现开关,而是把开关抽象成一种协议,让电器都依赖之。这样的编程方式可以有效的降低程序复杂度,并提升代

查看全文: http://www.udpwork.com/item/17489.html

+0  Go 编程模式:Go Generation

Tag: Go 语言 | 程序设计 | 编程语言 | Go | golang | Template
陈皓 发于 2020年12月25日 17:06 | 点击: 780 | 展开摘要
图片来源:GopherSource
在本篇文章中,我们将要学习一下Go语言的代码生成的玩法。Go语言代码生成主要还是用来解决编程泛型的问题,泛型编程主要解决的问题是因为静态类型语言有类型,所以,相关的算法或是对数据处理的程序会因为类型不同而需要复制一份,这样导致数据类型和算法功能耦合的问题。泛型编程可以解决这样的问题,就是说,在写代码的时候,不用关心处理数据的类型,只需要关心相当处理逻辑。泛型编程是静态语言中非常非常重要的特征,如果没有泛型,我们很难做到多态,也很难完成抽象,

查看全文: http://www.udpwork.com/item/17490.html

+0  Go编程模式:Map-Reduce

Tag: Go 语言 | 程序设计 | 编程语言 | functional | functional-programming | Go | golang | MapReduce | 函数式 | 函数式编程
陈皓 发于 2020年12月24日 15:13 | 点击: 737 | 展开摘要
在本篇文章中,我们学习一下函数式编程的中非常重要的Map、Reduce、Filter的三种操作,这三种操作可以让我们非常方便灵活地进行一些数据处理——我们的程序中大多数情况下都是在到倒腾数据,尤其对于一些需要统计的业务场景,Map/Reduce/Filter是非常通用的玩法。下面先来看几个例子:

本文是全系列中第5 / 9篇:Go编程模式
Go编程模式:切片,接口,时间和性能
Go 编程模式:错误处理
Go 编程模式:Functional Options
Go编程模式:委托

查看全文: http://www.udpwork.com/item/17491.html

+0  Go 编程模式:Functional Options

Tag: Go 语言 | 程序设计 | 编程语言 | functional | functional-programming | Go | golang | Pattern | 函数式编程
陈皓 发于 2020年12月22日 23:23 | 点击: 673 | 展开摘要
在本篇文章中,我们来讨论一下Functional Options这个编程模式。这是一个函数式编程的应用案例,编程技巧也很好,是目前在Go语言中最流行的一种编程模式。但是,在我们正式讨论这个模式之前,我们需要先来看看要解决什么样的问题。

本文是全系列中第3 / 9篇:Go编程模式
Go编程模式:切片,接口,时间和性能
Go 编程模式:错误处理
Go 编程模式:Functional Options
Go编程模式:委托和反转控制
Go编程模式:Map-Reduce
Go 编程模式

查看全文: http://www.udpwork.com/item/17492.html

+0  Go 编程模式:错误处理

Tag: Go 语言 | 程序设计 | 编程语言 | Error | Go | golang
陈皓 发于 2020年12月22日 18:19 | 点击: 599 | 展开摘要
错误处理一直以一是编程必需要面对的问题,错误处理如果做的好的话,代码的稳定性会很好。不同的语言有不同的出现处理的方式。Go语言也一样,在本篇文章中,我们来讨论一下Go语言的出错出处,尤其是那令人抓狂的 if err != nil 。

在正式讨论Go代码里满屏的 if err != nil 怎么办这个事之前,我想先说一说编程中的错误处理。这样可以让大家在更高的层面理解编程中的错误处理。

本文是全系列中第2 / 9篇:Go编程模式
Go编程模式:切片,接口,时间和性能
Go

查看全文: http://www.udpwork.com/item/17493.html

+0  Go编程模式:切片,接口,时间和性能

Tag: Go 语言 | 程序设计 | 编程语言 | Go | golang
陈皓 发于 2020年12月18日 15:36 | 点击: 722 | 展开摘要
在本篇文章中,我会对Go语言编程模式的一些基本技术和要点,这样可以让你更容易掌握Go语言编程。其中,主要包括,数组切片的一些小坑,还有接口编程,以及时间和程序运行性能相关的话题。

本文是全系列中第1 / 9篇:Go编程模式
Go编程模式:切片,接口,时间和性能
Go 编程模式:错误处理
Go 编程模式:Functional Options
Go编程模式:委托和反转控制
Go编程模式:Map-Reduce
Go 编程模式:Go Generation
Go编程模式:修饰器
Go

查看全文: http://www.udpwork.com/item/17494.html

+0  实战etcd的服务发现

Tag: Technical | ETCD | Golang
老王 发于 2020年11月17日 21:17 | 点击: 609 | 展开摘要
在云原生的时代,服务发现已经是必不可少的功能,我借着最近迁移 gRPC 服务的机会尝试了一下如何用 etcd 实现服务发现,期间遇到诸多问题,本文逐一记之。

虽然 gRPC 并没有内置 etcd 的服务发现功能,但是它提供了相关接口让我们扩展:

// Builder creates a resolver that will be used to watch name resolution updates.
type Builder interface {
// Buil

查看全文: http://www.udpwork.com/item/17714.html
|<<<123>>>| 一共3页, 34条记录