Everything you care about in one place

Follow feeds: blogs, news, RSS and more. An effortless way to read and digest content of your choice.

Get Feeder

coolshell.cn

酷 壳 – CoolShell.cn

Get the latest updates from 酷 壳 – CoolShell.cn directly as they happen.

Follow now 241 followers

Latest posts

Last updated about 1 month ago

Go编程模式 : 泛型编程

about 2 months ago

Go语言的1.17版本发布了,其中开始正式支持泛型了。虽然还有一些限制(比如,不能把泛型函数export),但是,可以体验了。我的这个《Go编程模式》的系列终于有了真正的泛型编程了,再也不需要使用反射或是go generation这些难用的技术了。周末的时候,我把Go 1.17下载下来,然后,体验了一下泛型编程,还是很不错的。下面,就让我们来看一下Go的泛型编程。(注:不过,如果你对泛型编程的重要性还不是很了解的话,你可以先看一下之前的这篇文章《Go编程模式:Go Generation》,然后再读一下《Go编程模式:MapReduce》) 本文是全系列中第10 / 10篇:Go编程模式Go编程模式:切片???接口,时间和性能Go 编程模式:错误处理Go 编程模式:Functional OptionsGo编程模式:委托和反转控制Go编程模式:Map-ReduceGo 编程模式:Go GenerationGo编程模式:修饰器Go编程模式:PipelineGo...

如何做一个有质量的技术分享

3 months ago

分享信息并不难,大多数人都能做到,就算是不善言谈性格内向的技术人员,通过博客或社交媒体,或是不正式的交流,他们都能或多或少的做到。但是如果你想要做一个有质量有高度的分享,这个就难了,所谓的有质量和有高度,我心里面的定义有两点:1)分享内容的保鲜期是很长的,2)会被大范围的传递。我们团队内每周都在做技术分享,虽然分享的主题都很有价值,但是分享的质量参差不齐,所以,想写下这篇文章 。供大家参考。 首先,我们先扪心自问一下,我们自己觉得读到的好的技术文章是什么?我不知道大家的是什么,我个人认为的好的文章是下面这样的: 把复杂的问题讲解的很简单也很清楚。比如我高中时期读到这本1978年出版的《从一到无穷大》,用各种简单通俗通懂的话把各种复杂的科学知识讲的清清楚楚。还有看过的几本很好的书,有一本是《Windows程序设计》,从一个hello world的程序开始一步一步教你Windows下的原生态编程。 有各种各样的推导和方案的比较,让你知其然知其所以然。有了不同方案的比较,才可能让人有全面的认识。这个方面的经典作著是《Effective C++》。 原理、为什么、思路、方法论会让人一通百通。这里面最经典的恐怕就是《十万个为什么》了,在计算机方面也有几本经典书,有《Unix编程艺术》、《设计模式》、《深入理解计算机系统》等书,以及《The C10K Problem》等很多技术论文。 其实,从教科书,到专业书,再到论文,都有上面这些不错的特质。 所以,如果你想做一个好的技术分享的话,下面是我总结出来的方法,供你参考。...

Go 编程模式:k8s Visitor 模式

10 months ago

本篇文章主要想讨论一下,Kubernetes 的 kubectl 命令中的使用到到的一个编程模式 – Visitor(注:其实,kubectl 主要使用到了两个一个是Builder,另一个是Visitor)。本来,Visitor 是面向对象设计模英中一个很重要的设计模款(参看Wikipedia Visitor Pattern词条),这个模式是一种将算法与操作对象的结构分离的一种方法。这种分离的实际结果是能够在不修改结构的情况下向现有对象结构添加新操作,是遵循开放/封闭原则的一种方法。这篇文章我们重点看一下 kubelet 中是怎么使用函数式的方法来实现这个模式的。...

Go编程模式:Pipeline

10 months ago

本篇文章,我们着重介绍Go编程中的Pipeline模式。对于Pipeline用过Unix/Linux命令行的人都不会陌生,他是一种把各种命令拼接起来完成一个更强功能的技术方法。在今天,流式处理,函数式编程,以及应用网关对微服务进行简单的API编排,其实都是受pipeline这种技术方式的影响,Pipeline这种技术在可以很容易的把代码按单一职责的原则拆分成多个高内聚低耦合的小模块,然后可以很方便地拼装起来去完成比较复杂的功能。 本文是全系列中第8 / 8篇:Go编程模式Go编程模式:切片,接口,时间和性能Go 编程模式:错误处理Go 编程模式:Functional OptionsGo编程模式:委托和反转控制Go编程模式:Map-ReduceGo 编程模式:Go GenerationGo编程模式:修饰器Go编程模式:Pipeline« 上一篇文章 HTTP 处理...

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

10 months ago

反转控制IoC – Inversion of Control 是一种软件设计的方法,其主要的思想是把控制逻辑与业务逻辑分享,不要在业务逻辑里写控制逻辑,这样会让控制逻辑依赖于业务逻辑,而是反过来,让业务逻辑依赖控制逻辑。在《IoC/DIP其实是一种管理思想》中的那个开关和电灯的示例一样,开关是控制逻辑,电器是业务逻辑,不要在电器中实现开关,而是把开关抽象成一种协议,让电器都依赖之。这样的编程方式可以有效的降低程序复杂度,并提升代码重用。 本文是全系列中???4 / 8篇:Go编程模式Go编程模式:切片,接口,时间和性能Go 编程模式:错误处理Go 编程模式:Functional OptionsGo编程模式:委托和反转控制Go编程模式:Map-ReduceGo...

Go 编程模式:Go Generation

10 months ago

在本篇文章中,我们将要学习一下Go语言的代码生成的玩法。Go语言代码生成主要还是用来解决编程泛型的问题,泛型编程主要解决的问题是因为静态类型语言有类型,所以,相关的算法或是对数据处理的程序会因为类型不同而需要复制一份,这样导致数据类型和算法功能耦合的问题。泛型编程可以解决这样的问题,就是说,在写代码的时候,不用关心处理数据的类型,只需要关心相当处理逻辑。泛型编程是静态语言中非常非常重要的特征,如果没有泛型,我们很难做到多态,也很难完成抽象,会导致我们的代码冗余量很大。 本文是全系列中第6 / 8篇:Go编程模式Go编程模式:切片,接口,时间和性能Go 编程模式:错误处理Go 编程模式:Functional Options计划: Go编程模式:委托和反转控制Go编程模式:Map-ReduceGo 编程模式:Go GenerationGo编程模式:修饰器计划: Go编程模式:Pipeline« 上一篇文章下一篇文章...

Go编程模式:Map-Reduce

10 months ago

在本篇文章中,我们学习一下函数式编程的中非常重要的Map、Reduce、Filter的三种操作,这三种操作可以让我们非常方便灵活地进行一些数据处理——我们的程序中大多数情况下都是在到倒腾数据,尤其对于一些需要统计的业务场景,Map/Reduce/Filter是非有通用的玩法。下面先来看几个例子: 本文是全系列中第5 / 8篇:Go编程模式Go编程模式:切片,接口,时间和性能Go 编程模式:错误处理Go 编程模式:Functional Options计划: Go编程模式:委托和反转控制Go编程模式:Map-ReduceGo 编程模式:Go GenerationGo编程模式:修饰器计划: Go编程模式:Pipeline« 上一篇文章下一篇文章...

Go 编程模式:Functional Options

10 months ago

在本篇文章中,我们来讨论一下Functional Options这个编程模式。这是一个函数式编程的应用案例,在讨论这个模式之前,我们需要先来看看要解决什么样的问题。 配置选项问题 在我们编程中,我们会经常性的需要对一个对象(或是业务实体)进行相关的配置。比如下面这个业务实体(注意,这仅只是一个示例): type Server struct { Addr     string Port     int...

Go 编程模式:错误处理

10 months ago

注明一下,这会是一个系列性的文章,我们只讨论纯编程,不讨论并发,系统,架构这些东西。在本篇文章中,我们来讨论一下Go语言的出错出处,尤其是那令人抓狂的 if err != nil 。 在正式讨论Go代码里满屏的 if err != nil 怎么办这个事之前,我想先说一说编程中的错误处理。这样可以让大家在更高的层面理解编程中的错误处理。...

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

10 months ago

This is post 2 of 2 in the series “Go编程模式” Go编程模式:修饰器 Go编程模式:切片,接口,时间和性能...

百度为什么掉队了

10 months ago

今天早上看到一篇文章《百度不要用户》这篇文章里的大意是:百度错过了移动互联网,等反应过来的时候,在2013年猛收购了一些公司来追赶对手或是时代,但都不成功,然后又开始后过来走到技术,大力发展AI,可惜,AI又是一个不是很成熟的事,需要没有上限的投入,而且在短期内看不到盈利的事,然而整个KPI又设计在了盈利上,最后导致内部内耗严重,人才和管理层流失,最终离用户越来越远。 文章中有一个段落的标题是【做决策的是技术】,其中有话是这样的—— 在“重技术、轻运营”的百度,产品的主导权和优先权在技术手里,产品和运营的立项话语权相对轻很多。如果是在 PC 时代,这无可厚非,但在移动互联网时代,这就有很大的问题。 这就是中国这个社会的价值观了,整个社会价值观从本质上来说是不待见技术的——平时都说技术不重要,但是当有问题出现的的时候,他们都会把问题都推到技术上。 虽然我同意这篇文章中大多数观点,但是我对“做决策的是技术造成了问题”有很大的不同意,并不是我是技术人员,我只会站在我的角度上思考问题,而且,这个结论就是错的。 要证明这个事,我们就需要找一个反例,这个反例就是Google。其实,文章中所有的因为移动互联网出现而对传统互联网造成挑战的问题,Google其实都遇到了,然而,Google却走了一条完全与百度不一样的路。 当时,Facebook如日中天的时候,Google也有很多人才流失到了Facebook,而Google的所有产品线都受到了来自移动互联网的挑战,人们不再打开电脑了,而且把时间全部放在了手机上,于是,Google的搜索也变得麻烦了,就算Google也做了一个搜索的App,也没人用过。Google还做了Google Plus的社交产品,最终也是以失败告终。除此之外,还有众多的Google产品都在移动互联网下玩完,比如:Google Talk/Hangouts, Google...

程序员如何把控自己的职业

about 1 year ago

这篇文章的主要内容主要是我今年3月份在腾讯做的直播,主要是想让一些技术人员对世界有一个大体的认识,并且在这个认识下能够有一个好的方法成就自己。而不是在一脸蒙圈的状态下随波逐流,而日益迷茫和焦虑。直播完后,腾讯方面把我的直播形成文字的形式发了出来,我觉得我可以再做一个精编版。所以,有了这篇文章,希望对大家有帮助。 对我来说,在我二十多年的工作经历来看,期间经历了很多技术的更新换代,整个技术模式、业务模式也是一直变来变去,我们这群老程序员成长中所经历的技术比今天的程序员玩的还更杂更多。我罗列一下我学过的,而且还被淘汰掉的技术,大家先感受一下。 - MIS应用开发:FoxPro,PowerBuilder,Delphi - OA:Lotus Notes,VBScripts - 微软:ODBC/ADO,COM/DCOM,MFC/ATL,J++ - 服务器:AIX,HP-UX,SCO Unix...