觉得很不错的一本书。用golang有一段时间了,一直没不太理解golang的数据结构为什么这么少,甚至连个set都没有,而且err!= nil的写法觉得很丑陋。但在并发方面又很强大,使用者不需要感知低级通信原语,便可实现可靠的并发逻辑。看了这本书后才了解了一些golang的设计思想,simple is better than complex,将复杂性交给语言本身。除此之外,书中介绍的一些编程规范和代码技巧也是相当实用的。
这本书写的比较中肯,逻辑很有条理,技术方面难得的扎实,至少是深入在开发一线,有很多真知灼见,这些只能在项目的实际应用中,或者技术选型,或者技术路线实施中遇到的的问题,作者都深入浅出的讲解各个技术点,很难得。适合开发过程中翻一翻。突然有点怀念侯俊杰的MFC了,那本书前前后后看了几年,突然看懂了,居然是看了think in java。恍如隔世啊!
不过如果是技术小白或者编程初学者,先找一本比如head first之类的书看看,这本书更有代入感。
近一个月的时间,通读了下整本书,并对一些代码进行了实践;整本书还是挺不错的,内容很扎实,还需要实践去消化吸收; 这本书不仅仅讲go基本语法怎么用,以及原理是什么,在什么场景下怎么使用,一步步进行优化;目的就是写出更符合go规范和逻辑的代码; 以目前的了解,对Go最大的感受就是简单、高效、设计、规范; 简单,就是原语少(仅有25个关键字),实现方便,无需耗费过多心智放在垃圾回收(自动gc),异常处理(明确的错误);高效,就是无需过多代码,就可以实现并发(go channel配合);设计,就是利用Go接口特性,很容易写出符合设计原则的代码;规范,就是有强类型描述,保证代码准确性;有了这样的特性,自然对于写出正确、高效、易读、易扩展的代码,变成一件较为轻松的事情; 下边对印象深刻的知识点做下总结 1、项目结构 cmd是可执行目录;pkg是存放cmd依赖的库文件;internal是内部使用的包,无法被外部使用;go.sum module模式下三方包依赖; 2、goroutine与channel 只要程序运行,就首先会有个main goroutine(就像主时间线),之后创建的goroutine,就像创建的时间线分支,与主神圣时间线是独立的;如果两个想要通信,就需要channel;应用的场景:主goroutine,等待分支goroutine退出;主goroutine,通知分支goroutine退出; 3、GPM模型 GPM模型是关于goroutine如何高效调度而提出的模型;G代表goroutine 可以理解为一个执行函数;P表示一个任务队列,G的眼里只有P;M代表真正的执行线程,会执行P中的G; 抢占式调度是指goroutine遇到一个阻塞的任务(网络IO操作、读channel数据,系统调用等),G会和M解绑,并挂起(设置为等待状态),M执行下一个可执行的G,阻塞的G就绪后,根据调度M可以再执行这个处于就绪状态的G; 但有一个情况比较特殊,就是普通文件IO操作,这是会导致G的阻塞会导致M被挂起;P则会找一个可用的M来执行队列中的G,如果没有找到可用的M,则会创建一个M(也就是一个用户线程); 4、interface 隐式实现,接口定义了方法;只要自定义对象实现了方法,就相当于实现了该接口; 接口的几种使用场景:包装函数(接收某接口,返回该接口)、适配器(http.HandlerFunc) 接口的原理:eface(无方法接口)与iface(有方法接口)接口的状态与自定义类型的状态 5、方法 一等公民,可作为变量;功能参数模式,使用可变长参数实现; init方法,defer方法,方法的receiver类型,类型是指针或非指针区别;指针变量具有指针和非指针receiver类型的方法,非指针变量只具有非指针receiver类型的方法; 6、切片、map 底层构成 切片和map 值传递的性能消耗也很少,应该内部是指针;struct和数组的值传递消耗大; 下一步的计划: 目标是什么:用go写出高质量的web程序;需要掌握:go语法、go的项目结构、http相关、gin https://gopher-daily.com/ 没事看看 https://gin-gonic.com/zh-cn/docs/ 学习实践 https://gorm.io/zh_CN/docs/index.html 学习实践
觉得很不错的一本书。用golang有一段时间了,一直没不太理解golang的数据结构为什么这么少,甚至连个set都没有,而且err!= nil的写法觉得很丑陋。但在并发方面又很强大,使用者不需要感知低级通信原语,便可实现可靠的并发逻辑。看了这本书后才了解了一些golang的设计思想,simple is better than complex,将复杂性交给语言本身。除此之外,书中介绍的一些编程规范和代码技巧也是相当实用的。
这本书写的比较中肯,逻辑很有条理,技术方面难得的扎实,至少是深入在开发一线,有很多真知灼见,这些只能在项目的实际应用中,或者技术选型,或者技术路线实施中遇到的的问题,作者都深入浅出的讲解各个技术点,很难得。适合开发过程中翻一翻。突然有点怀念侯俊杰的MFC了,那本书前前后后看了几年,突然看懂了,居然是看了think in java。恍如隔世啊! 不过如果是技术小白或者编程初学者,先找一本比如head first之类的书看看,这本书更有代入感。
用于进阶不错的书,推荐 体会比较深的是接口那一章,很多使用姿势在平时接触框架、业务项目就能接触的到,但是一直只是知其然。 吐槽一下,感觉错误那一章有点水。或者说确实是go不足之处,个人认为除非你不想管错误直接写个_忽略。不然与其搞那么多花哨的,不如直观的写err != nil吧!
2024年从过年放假开始阅读这本书,过完年的两天时间终于看完了。 这本书虽然是从Java代入的,但是对我一个Golang、Java小白来说还是受益匪浅的。 从了解GO语言的设计初衷;编写代码过程中的项目结构、代码风格、标识命名;声明、类型、语句与控制结构;函数与方法;接口的定义、接口与结构的融合;并发编程中goroutine、select与channel结合、sync包的使用、atomic实现并发读取;最后的错误处理。。。这些部分把go的思想解释的很透彻,我虽然还没开始着手go语言编程,但是已经了解到其中的编程思想,牺牲了多样性忠于简单,在使用中确实会比java类看起来简单,等真正着手使用这门语言后应该再对应读读对应章节,可能更能感受到这门语言的魅力。
全面详细
因公司服务由C++转go而使用go语言,当时花了几天时间熟悉基础语法后直接上手,照葫芦画瓢倒也能写出合格代码。 相比于对C++底层原理的深刻了解,虽然go也写了两年,但仍感觉得浮于表面,学习的不够深入和系统。 而这本书正好可以满足我的需求。
写的很牛逼,市面上大部分的techbook要么仅仅停留在api层面,要么太过深入code纸上谈兵。 这本不仅传道了go的设计哲学,而且也提供了很多生产环境下的模板范式。读下来很流畅。唯一不足的是作者似乎不是很喜欢写注释。可能高手是这样的orz
获益良多。方法和技巧是可以积累的,对于一门编程语言而言,只有弄懂它的思想,逻辑,理念,才能真正一窥门径。这本书把这些知识分门别类逐一拆解,在不知不觉中懂得语言层面的大道精华,适合经过了初学阶段后,不知如何提高的gogher,能够少走弯路,尽快提高。 第一册看完花掉了20个小时,还有一本好厚的第二册…加油!
高质量的golang介绍。适合有几年编程经验的人用。 书中对典型知识做了得当的展开,同时高明的避开了口水式的基础语法普及。 书中还有富有经验的上帝视角:各版本的不同和演进;命名字符数的统计,用户反馈的统计分析。 推荐给想要学习golang的同学。
两周内读完卷1,很有收获,接下来计划抽空翻一下卷2。评价为强烈推荐使用Go当主力语言的人来读。本人从应届生开始,纯白纸入坑,写了三年Go,读了10来本Go相关的书籍,而白明大佬这本能排进心中前三,里边的写法,感觉是最接近“Effective Go”标准的书,值得每个gopher学习。
有些地方的文字代码都被遮从头再来了。
很实用的一套书,强烈推荐想要进一步了解golang的gopher上下两册都阅读一下。很适合先过一遍后作为案头书,在个人编码的过程中常对某些点进行翻阅巩固,以此养成良好风格的golang编码习惯,写出golang思维方式的代码。
讲解非常好,内容优质,技术精炼,侃侃而谈,引人入胜。
深浅度适中,读起来还是比较流畅的,适合有一段时间go编程基础的(后一章还没学的知识比如chan就在并发那章大量用了,刚学go的应该会比较懵吧) 写了有两年多go,系统性的巩固一下还是不错的。更深刻的了解了go的思想,多多实践吧