《Go程序设计语言》是一本介绍Go语言基础知识和高级特性的优秀著作。通过深入浅出的讲解,读者可以快速掌握Go语言的核心概念和语法规则。作者通过实例代码和案例分析,帮助读者更好地理解Go语言的设计理念和应用场景,是一本值得推荐的Go语言学习指南。
Go程序设计语言读后感第一篇
比较厉害的go语言书了,第一次看就看了一半,坚持不下去了。后面看了《go语言实战》,想学习下一些库的用法(比如net相关的),发现这本书刚好很适合的 第五和第八章就穿插了net库的用法,看下来,用书中的代码就能实现一个并发的网络爬虫了,并且提到了两种相关的算法(图的深度和广度) 总结就是,需要多啃一下的书
Go程序设计语言读后感第二篇
记住这群人,但凡他们翻译的,一概不买。啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊气死我了啊啊啊啊啊啊啊啊啊啊啊啊,啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊,啊啊啊啊啊,啊啊啊啊啊,啊啊啊啊啊,啊啊啊啊啊,啊啊啊,凑字数
Go程序设计语言读后感第三篇
看这本书的时候,就感觉这本书代码例子相当好,基本上很多概念,文字看不懂的话,多读几遍代码,很容易就能理解了(特别是讲并发的那几章),还有对同一个问题的变化写法。
go语言本身语法在编程语言里算很简单了,即没有动态语言的各种神奇的元编程trick,也没有什么函数式编程,内部dsl,而且面向对象的概念也不是很重,指针还是阉割版的,语法糖也少。基本上这本书过下来就差不多了。
Go程序设计语言读后感第四篇
翻译太辣鸡了, 全篇机翻或者请小学生翻译的吧, 这是怎么节约成本的, 我也是醉了
翻译太辣鸡了, 全篇机翻或者请小学生翻译的吧, 这是怎么节约成本的, 我也是醉了
翻译太辣鸡了, 全篇机翻或者请小学生翻译的吧, 这是怎么节约成本的, 我也是醉了
翻译太辣鸡了, 全篇机翻或者请小学生翻译的吧, 这是怎么节约成本的, 我也是醉了
Go程序设计语言读后感第五篇
本书兼具广度和深度,不愧是K&R之一,每句话都是细节,千万不要囫囵吞枣错过。作者真的尽力用最少的篇幅最具深度的介绍了一门现代语言。原版绝对是最好的go语言教材
翻译版有两个版本:
1. 这本纸质的。前面问题很少,后面三章错字很多,甚至有很多程序的输出也翻译了,这估计是译者之一不认真,很丢脸很不负责任。不过也不太影响理解。
2. 另一个网上版本,叫《go语言圣经》,是golang爱好者翻译的,一般出现错误就一起纠正了,可以说质量超过了纸质翻译版。还可以边用边查,挺好的
如果英文不错,推荐看原版。无论看什么版本,本书都是让你最快窥见golang全貌的最好资料。
Go程序设计语言读后感第六篇
一星是打给翻译的,原著我想打6分。
本来看的中文版,无奈翻译实在是看不懂,只好买了一本英文版。本以为看英文会比较吃力,没想到的是,英文看起来竟然比中文流畅的多。同时也发现一些翻译上的问题,在此记录一下。
这本书的翻译实在是太差了!有很多地方译者根本就没有理解原著想表达的意思!我很怀疑译者有没有好好看一遍自己翻译的东西!
不会翻译的地方直接就整段整段的跳过吗??
new是关键字吗??
垃圾回收器是立即回收吗??
局部变量和包级变量的分配是一样的吗??
什么是地址化的值??
什么是二进制操作符(应该为二元操作符)??
两个变量的类型不携带任何信息它们就具有相同的地址??
什么叫做"不需要调用字符串”?(应该为“不需要调用String函数”)
什么叫做"逃逸的概念使你不需要额外费心来写正确的代码"??
“Named types also make it possible to define new behaviors for values of the type.
These behaviors are expressed as a set of functions associated with type, called the type's methods,
we'll look at methods in detail in Chapter 6 but will give a taste of the mechanism here"
这一段直接全部漏掉了没有翻译。
“Better still, use the golang.org/x/tools/cmd/goimports tool, which automatically inserts and removes packages
from import declaration as necessary; most editors can be configured to run goimports each time you save a file.
Like the gofmt tools, it also pretty-prints Go sources files in the canonical format.”
整段直接就不翻译了??
“我们可以忽略掉整个日志”,应该为:“我们可以忽略掉整个错误”
"进行错误检查之后,检测到失败的情况往往都在成功之前"
应该为:“进行错误检查之后,首先进行错误处理,然后再处理正常的逻辑”
“之后跟着实际的函数体一直到最后”
后面一句漏翻译了 “以最大限度的减少缩进”。
"偶尔, 一个程序必须针对不同各种类的错误采取不同的措施"
应该为
“然而,程序有时候需要根据发生的不同种类的错误采取不同的处理方式”
"而且它们可以赋给 变量或者传递或者从其他函数返回", 应该为:
"而且,它们可以赋值给变量或者传递给其他函数,或者从其他函数返回"
“这样的代码组织给调用者提供了很多的灵活性” 建议改为:
"这样的代码组织给调用者提供了极大的灵活性"
"包级别的初始化在main开始之前进行" 应该为:
“包级别的变量初始化在main函数开始执行之前进行”
“局部变量初始化和声明一样在函数执行期间进行” 应该为:
“局部变量的初始化在函数遇到其声明语句的时候进行”
“短变量声明不需要声明所有在左边的变量” 建议改为:
“短变量声明不需要声明所有在:=左侧的变量”
“如果一些变量在同一个词法块中声明, 那么对于这些变量,短声明的行为等同于赋值” 应改为:
“如果某些变量已经在同一个词法块中声明过了,那么对于这些变量,短声明的行为等同于赋值”
already 没有翻译造成中文意思错误
“变量有时候使用一个地址化的值” 应为:
“变量有时候被描述为可寻址的值”
“这个规则有一个例外:两个变量的类型不携带任何信息且是零值, 例如struct{}或者[0]int,当前的实现里面,它们有相同的地址”
这一段翻译严重错误,英文原文是
“There is one exception to this rule: two variables whose type carries no information and is therefore of size zero, such as struct{} or [0]int, may, depending on the implementation, have the same address.”
应该翻译为:
“这个规则有一个例外:两个变量的类型不携带任何信息,因此其size是0,例如struct{}或者[0]int, 可能具有相同的地址,这取决于具体实现。”
“每次执行声明语句时创建一个新的实体,变量一直生存到它变得不可访问,这时它占用的存储空间被回收” 应该为:
“每次执行声明语句时创建一个新的实例,变量一直生存到它变得不可访问为止,这时它占用的内存可能会被回收”
两字之差,意思就不一样了。一个变量没有被引用了,那么它的生命周期结束了,但是并不一定会被马上回收,可能会有一些延时,这个要看具体的垃圾回收算法是如何实现的。
“即使包含它的循环已经返回,它的存在还可能延续” 应该为:
“即使包含它的函数已经返回,它的存在还可能延续”
“编译器可以选择使用堆或栈上的空间来分配” 翻译错误
原文是
“A compiler may choose to allocate local variables on the heap or on the stack but,...”
也就是说,编译器可以选择在栈上或者堆上分配局部变量,注意是局部变量,并没有提到包级变量,包级变量的生命周期是整个程序的运行期间,空间分配也许跟C/C++一样在静态存储区分配。
“令人惊奇的是,这个选择不是基于使用var或new关键字来声明变量” 翻译错误
在go中,new是一个预定义的函数,并不是关键字,所以在英文原文中,刻意避免了使用keyword这个说法
英文原文:
“this choice is not determined by whether var or new was used to declare the variable.”
应该翻译为:
“这种选择不是根据是否使用了var或new来确定的”
“任何情况下,逃逸的概念使你不需要额外费心来写正确的代码” 翻译错误
原文是
“In any case, the notion of escaping is not something that you need to worry about in order to write correct code”
中文版完全偏离了英文版表达的意思。正确的翻译应该为:
“在任何情况下,你都不需要担心逃逸的概念影响到你写出正确的代码”
“赋值语句用来更新变量所指的值”
什么是变量所指的值?根本没有这种说法,中文让人很迷惑
英文原文是
“the value held by a variable is updated by an assignment statement”
直接翻译成
“赋值语句用来更新变量的值” 更好
“每一个算术和二进制位操作符” 翻译错误
“binary operator”是指二元操作符,没有二进制操作符的说法。
“多重赋值也可以使一个普通的赋值序列变得紧凑”
原文是
“Tuple assignment can also make a sequence of trivial assignments more compact”
trivial意为繁琐的,不知道为什么翻译成普通的,这句话翻译成下面更好
“多重赋值也可以使一系列繁琐的赋值变得更加紧凑”
“这类表达式(例如一个有多个返回值的函数调用)产生多个值” 翻译有问题,
这类是哪一类?前文也没有提到,英文是“certain exxpressions”应该翻译成“某些表达式...”
fmt.Printf("%v\n", c) // "100℃" 不需要调用字符串
应该为不需要调用String函数,不需要调用字符串这种翻译真的是让人彻底无语。。。
f.ReadByte() 写成了 f.Stat()
“成功执行的路径不会变的支离破碎” 应为:
“返回成功的执行路径不会被缩进”
自作聪明,乱翻译
Go程序设计语言读后感第七篇
选书
2019年接触过一段go,一些docker、k18s等容器组件也都用go实现开发,云服务发展普及后,虚拟化、微服务、数据库、消息等中间件越来越多的用go语言实现,可以说已经形成一个比较明显的趋势。
从行业的岗位数量来看,go语言的岗位也是越来越多的,从BAT、TMD等公司的核心服务看,之后重构的方向是两个,商业化相关的还是Java为主,中台、中间件、核心服务越来越多的迁移到go语言上。
从后续个人职业发展的技术栈和市场看,go语言的掌握是必要和有益的。
这本书的厚度适中、介绍了go比较核心的一些语言特性,协程、通道、锁、接口、反射、unsafe和cgo等;书评还不错,翻译中有比较明显的错别字,例如把崩溃翻译成了奔溃,整体来说还算易读。
package main
import (
"fmt"
"os"
)
func main(){
fmt.Println("Hello, 世界")
}
hello的特点:
计算机程序的核心目的是计算数据,故所有的程序结构都是数据的声明、计算逻辑的封装、外加逻辑的调度三个部分。
名称命名规则:以字母或下划线开头,后面可以跟任意数量的字符、数字或下划线。
声明分为四个类型:变量、常量、类型和函数。
文件结构:
变量:
包和文件
整形
浮点数
复数
字符串
常量
数组
map
结构体
json
文本和html
封装