直到目前为止,本章都是在独立的程序中展示如何使用Go的并发特性,但是显然地,这些并发特性不仅可以在独立的程序中使用,还可以在Web应用中使用。在这一节中,我们将把注意力放到Go Web应用上,并学习如何使用并发特性去提高GoWeb应用的性能。我们不仅会使用前面已经介绍过的一些基础技术,而且还会了解一些出现在实际Web应用中的并发模式。
在本节中,我们将要创建一个对图片进行马赛克处理,以此来生成马赛克图片的Web应用。对图片进行马赛克(mosaic)处理,指的是将图片分割成多个(通常是大小相同的)矩形截面,然后使用一些被称为瓷砖图片(tile picture)的新图片去代替截面原有的图片。马赛克图片的奇妙之处在于,如果人们从足够远的地方观察,或者以斜视的角度观察,就会看到图片在进行马赛克处理之前的样子;相反,如果人们凑近去观察马赛克图片,就会发现它们其实是由成百上千张尺寸更小的瓷砖图片组成。
这个生成马赛克图片的Web应用的基本想法非常简单:它接收用户上传的目标图片(target picture),然后据此生成相应的马赛克图片。为了让事情保持简单,我们假设瓷砖图片已经事先准备好了,并且它们都已经被裁剪到了合适的大小。