本次每周快照包含time、os和text/template包的更新。time和os包的变更具有重大意义且相互关联。使用time包、text/template包或os.FileInfo类型的代码需要相应调整。
在time包中,现在仅用time.Time单一类型表示时间。请注意time.Time应作为值类型使用,这与以往通常使用*time.Time(大型结构体指针)的旧代码不同。(请删除*号)所有此前接受*time.Time、1970年以来秒数的int64或1970年以来纳秒数的int64的函数,现在都应接受time.Time。特别当需要替代int64参数时,该类型能清晰体现数值含义。
无论您之前调用的是time.Seconds、time.Nanoseconds、time.LocalTime还是time.UTC,现在都应使用新的time.Now函数。
若此前代码形如:
t0 := time.Nanoseconds()
myFunction()
t1 := time.Nanoseconds()
delta := t1 - t0
fmt.Printf("耗时 %.2f 秒\n", float64(t1-t0)/1e9)
现在可改写为:
t0 := time.Now()
myFunction()
t1 := time.Now()
delta := t1.Sub(t0)
fmt.Printf("耗时 %s\n", delta)
此代码中delta变量属于新类型time.Duration,它替代了各种表示纳秒计数的int64参数(但非1970年以来的时间戳)。
gofix可完成上述转换及其他部分调整,但不会将显式int64类型重写为time.Time。运行gofix后,您很可能需要手动修改程序中的相关类型。建议始终通过版本控制系统的差异比对功能检查gofix所做的更改。
详情请参见:http://weekly.golang.org/pkg/time/
在os包中,FileInfo结构体被替换为FileInfo接口,允许操作系统之外的代码实现该接口。引用*os.FileInfo(旧结构体指针)的代码应改为引用os.FileInfo(新接口)。该接口仅包含以下方法:
type FileInfo interface {
Name() string // 文件基础名称
Size() int64 // 文件大小(字节)
Mode() FileMode // 文件模式位
ModTime() time.Time // 修改时间
IsDir() bool // Mode().IsDir()的简写
}
若需访问操作系统内核提供的底层stat_t结构,可将FileInfo对象断言为*os.FileStat类型,并通过其Sys字段获取*syscall.Stat_t:
dev := fi.(*os.FileStat).Sys.(*syscall.Stat_t).Dev
当然,这种实现不具备跨操作系统可移植性。
gofix将自动把*os.FileInfo重写为os.FileInfo,并将fi.Name等表达式转换为fi.Name()方法调用。
详情请参见:http://weekly.golang.org/pkg/os/#FileInfo模板包(template package)已更新为导出全新的简化API。Set类型已被移除。现在模板通过一起解析(parsing together)自动关联;嵌套定义会隐式创建关联。只有相互关联的模板才能互相调用。这种方式显著缩小了构建API的覆盖范围。html/template包也已同步更新。针对旧版API最简单常见的用法,提供了gofix工具进行自动转换;未使用Set类型的代码运行gofix后通常可直接工作,而使用Set的代码则需要手动更新。模板定义语言本身保持不变。
详情请见:http://weekly.golang.org/pkg/text/template/
其他变更:
* cgo:新增动态库回调支持
* codereview:对非src/目录文件进行gofmt检查(感谢David Crawshaw)
* crypto/openpgp/packet:修复私钥校验和问题
* crypto/tls:新增OpenBSD根证书路径,不再依赖map迭代顺序
* crypto/x509, crypto/tls:支持PKCS#8私钥格式
* dashboard:开始用Go语言重新实现以支持App Engine
* encoding/xml:修复拷贝bug
* exp/gui:将exp/gui和exp/gui/x11迁移至http://code.google.com/p/x-go-binding
* exp/ssh:多项改进(感谢Dave Cheney和Gustav Paul)
* filepath/path:修复Rel函数缓冲区大小问题(感谢Gustavo Niemeyer)
* gc:修复Nconv bug(感谢Rémy Oudompheng)及其他修正
* go/printer, gofmt:性能优化
* gofix:测试并修复错误排序的重命名
* goinstall:新增-fix标志用于构建失败时对包运行gofix,改进错误报告,仅在需要检出或更新时访问网络,支持Google Code子仓库
* html:解析器改进(感谢Andrew Balholm)
* http:修复导致短写入的嗅探bug
* json:加速编码过程,缓存reflect调用
* ld:对齐ELF数据段
* math/big:修复目标值泄漏到结果值的问题(感谢Roger Peppe),采用递归细分法显著提升速度
* math:更快的Cbrt和Sincos实现(感谢Charles L. Dorian)
* misc/osx:新增OS X打包和磁盘映像脚本(感谢Scott Lawrence)
* os:Windows系统下调用Open("")时现在会返回错误(感谢Alex Brainman)
* runtime:确保系统调用时栈保持16字节对齐(感谢Alex Brainman)
* spec, gc:允许string与命名类型[]byte、[]rune直接转换
* sql:新增Tx.Stmt方法以在事务中使用现有预编译语句,补充驱动文档和测试;无功能性变更
* strings:新增ContainsAny和ContainsRune函数(感谢Scott Lawrence)
* syscall:新增SUSv3标准的RLIMIT/RUSAGE常量(感谢Sébastien Paolacci),修复OpenBSD系统sysctl主机名/域名的变通方案,实现Syscall15函数(感谢Alex Brainman)
* time:修复Timer停止功能
2011-11-18
此快照包含部分语言变更。
根据Go 1计划,现在禁止对Map和函数值进行比较(与nil比较除外)。函数相等性在某些场景下存在问题,而map相等性比较的是指针而非内容。
作为实验性功能,现在允许复制包含未导出字段的结构体。这使得包能在其API中返回不透明值。其他变更:
* 6a, 8a:允许 `$(-1)` 以与 `$1`、`$(1)`、`$-1` 保持一致。
* 6l:代码生成修复(感谢 Michał Derkacz)。
* build:修复在 Fedora 上对 selinux allow_execstack 的检查(感谢 Bobby Powers)。
* builtin:完善 `delete` 的文档。
* cgo:在遇到未声明的枚举/结构体时不再恐慌(感谢 Rémy Oudompheng),修复 g0 栈保护。
* crypto/tls:修复握手消息测试。
* crypto:更新了对 Cipher 接口的错误引用;应为 Block。
* doc:清理、补充并修复了多个文档。
* doc/install:添加了 openbsd(感谢 Joel Sing!)。
* doc:添加了《Go 之旅》中文翻译的链接。
* encoding/json:添加 marshal/unmarshal 基准测试,将 `[]` 解码为空切片(slice)而非 nil 切片,使 BenchmarkSkipValue 更一致。
* env.bash:检查 make/gmake 是否存在(感谢 Scott Lawrence)。
* exp/sql:`NumInput()` 允许 -1 以忽略检查(感谢 Yasuhiro Matsumoto),添加 `DB.Close`,修复错误,移除 Driver 上的 Execer(仅保留 Conn),文档说明对于驱动程序而言 `io.EOF` 表示没有更多行,添加对客户端公钥认证的支持(感谢 Dave Cheney),添加 direct-tcpip 客户端支持(感谢 Dave Cheney),更改测试监听地址,并在失败时退出测试,其他修复和改进(感谢 Dave Cheney)。
* exp/terminal:将 shell 重命名为 terminal 并添加 `SetSize`。
* fcgi:修复服务器能力发现。
* fmt:在 `%#v` 中区分空切片/映射与 nil 切片/映射。
* gc:改进错误信息、类型检查及诸多修复,移除 `m[k] = x, false` 语法(请改用 `delete(m, k)`),支持使用 Plan 9 yacc 构建(感谢 Anthony Martin)。
* go/printer:使 `//line` 格式化具有幂等性。
* godefs:已删除,由 `cgo -godefs` 替代。
* godoc:完善 `-templates` 标志的文档,修复远程搜索,提供扁平(非缩进)目录列表模式。
* gosym:从 `gofmt` 的输出中移除 `//line` 注释(感谢 Rémy Oudompheng)。
* gosym:修复了影响 godoc 和其他工具的索引问题。
* html/template:在打印前对顶层值进行间接引用。
* html:更多解析器改进(感谢 Andrew Balholm)。
* http:修复使用 `http.ServeFile` 从当前工作目录提供服务的问题,使 `Dir("")` 等同于 `Dir(".")`。
* ld:修复 ldpe 的 `.bss` 部分(感谢 Wei Guangjing)。
* math/big:将 `nat{}` 替换为 `nat(nil)`。
* math:更快的 `Lgamma`(感谢 Charles L. Dorian)。
* mime:为 windows 实现 `TypeByExtension`。
* misc/bbedit:错误和 rune 支持(感谢 Anthony Starks)。
* misc/benchcmp:基准测试比较脚本。
* misc/emacs:添加 `delete` 内置函数(感谢 Bobby Powers)。
* misc/kate:添加 error 和 rune 支持(感谢 Evan Shaw)。
* misc/notepadplus:错误和 rune 支持(感谢 Anthony Starks)。
* misc/windows:MSI 格式的 Windows 安装程序(感谢 Joe Poirier)。
* net, io/ioutil:移除 `os.Time` 的使用(感谢 Anthony Martin)。
* net/http:修复响应体 EOF 处理(感谢 Gustavo Niemeyer),修复使用 `ReadFrom` 时的嗅探,在测试中从备用 goroutine 使用 `t.Errorf`。
* os:移除未文档化的 `Envs`(请改用 `os.Environ`)。
* reflect:空切片/映射与 nil 不 DeepEqual,使 `Value` 成为不透明结构体。
* runtime, syscall:从 godefs 转换为 cgo。
* runtime:为 Plan 9 添加 `nanotime`(感谢 Anthony Martin),添加计时器支持,用于 time 包,避免对 `make([]T, 0)` 进行分配。
* strconv:添加 Ftoa 基准测试,使 Ftoa 更快。
* syscall:删除 `syscall.Sleep`,接管环境变量实现,使用 error。
* testing:在消息中添加 file:line 时间戳,将结果打印到标准输出。
* text/template:重构 set 解析。
* time:为 Time 添加 `ISOWeek` 方法(感谢 Volker Dobler)。
* 多处:避免函数比较,减少对 `os.EINVAL` 等的过度使用。
2011-11-09
此每周快照根据 Go 1 计划重命名了多个 Go 包。
客户端代码中的导入语句可以使用 gofix 自动更新。
变更如下:
asn1 -> encoding/asn1
big -> math/big
cmath -> math/cmplx
csv -> encoding/csv
exec -> os/exec
exp/template/html -> html/template
gob -> encoding/gob
http -> net/http
http/cgi -> net/http/cgi
http/fcgi -> net/http/fcgi
http/httptest -> net/http/httptest
http/pprof -> net/http/pprof
json -> encoding/json
mail -> net/mail
rpc -> net/rpc
rpc/jsonrpc -> net/rpc/jsonrpc
scanner -> text/scanner
smtp -> net/smtp
syslog -> log/syslog
tabwriter -> text/tabwriter
template -> text/template
template/parse -> text/template/parse
rand -> math/rand
url -> net/url
utf16 -> unicode/utf16
utf8 -> unicode/utf8
xml -> encoding/xml
2011-11-08
此每周快照包含一些包变更。
为准备 Go 1 的包重组,多个包的源代码已被移动,但导入路径保持不变。这种不一致性导致此快照的 goinstall 无法正常工作。如果您使用 goinstall,请保持同步到上一个每周快照,直到下一个快照被标记。
html、bzip2 和 sql 包中返回 error 值的 Error 方法已重命名为 Err。
http 包中的一些非核心部分已移至 net/http/httputil。Dump* 和 NewChunked* 函数以及 ClientConn、ServerConn 和 ReverseProxy 类型已从 http 移至 httputil。
html/template 的 API 现在是 template API 的直接副本,而不是暴露单个 Escape 函数。对于 HTML 模板,请像使用 template 包一样使用 html/template 包。其他变更:
* 所有包:在非代码上下文中将 `os.EOF` 重命名为 `io.EOF`(感谢 Vincent Vanackere),使用 gofix 排序导入。
* archive/zip:关闭通过 `OpenReader` 打开的文件(感谢 Dmitry Chestnykh)。
* bufio:如文档所述,在错误时从 `ReadLine` 返回 `nil` 行。
* builtin:为基本类型和内置 error 类型添加文档。
* bytes:添加 `Contains` 函数。
* exp/sql:完成事务实现,完善类型和文档。
* exp/ssh:改进的客户端认证支持(感谢 Dave Cheney)。
* gc:改进对非接收通道进行 range 操作时的错误信息;修复错误和清理;检测未使用的类型开关变量;修复符号名中包路径的转义;提供在指针的指针上进行方法调用时的有用错误信息;可移植地读取归档头(感谢 Ron Minnich)。
* gob:修复多次注册相同类型时的错误。
* gofix:避免在 netudpgroup 中无函数体的函数上出现 panic;按日期隐式确定修复顺序。
* gofmt, gofix:排序导入。
* goinstall:支持 launchpad.net/~user 分支(感谢 Jani Monoses)。
* gopack:不在非 Go 对象中查找 Go 元数据。
* gotest:不运行没有预期输出的示例。
* html:解析器错误修复活动继续(感谢 Andrew Balholm)。
* http:修复嗅探器中的空白字符处理;在 `ParseForm` 中仅识别 `application/x-www-form-urlencoded`;在 `ReadRequest` 中支持 Trailer。
* lib9:添加 `ctime`。
* math:更快的 Gamma 函数(感谢 Charles L. Dorian);提高 Tan 函数的精度(感谢 Charles L. Dorian);改进 Cos、Sin 和 Tan 的大角度测试(感谢 Charles L. Dorian)。
* net:为 Windows 实现 `LookupTXT`(感谢 Alex Brainman)。
* os, text, unicode:重命名。
* runtime/cgo:将数据声明修复为 extern。
* runtime:为 FreeBSD 添加 timespec 定义;添加 Windows 回调测试(感谢 Alex Brainman);修复 OpenBSD `thrsleep` 的原型;修复 set and not used 问题;统一跨操作系统的 mutex 代码;Windows_386 的 sighandler 使用正确的 g(感谢 Alex Brainman)。
* template:格式化带有指针接收者的错误;使模板集中的模板重定义更一致。
* test:从源文件中清除执行位(感谢 Mikio Hara);使 `closedchan.go` 在失败时以失败状态退出。
* time:更快的 `Nanoseconds` 调用。
* websocket:对错误的 websocket 请求返回错误的 HTTP 响应。
* xml:允许解析 `<_> `。(感谢 David Crawshaw)。
2011-11-02 (新的 error 类型)
此快照引入了内置 error 类型,其定义为
type error interface {
Error() string
}
error 类型取代了 `os.Error`。请注意,方法名已从 `String` 更改为 `Error`。
包 `fmt` 的 Print 格式化同时支持 Stringer 和 error:通常无需同时实现 `String` 和 `Error` 方法。
Gofix 可以更新大部分代码。如果你的包分布在多个文件中,使用 `-force=error` 命令行选项可能会有所帮助,它会强制 gofix 应用 error 修复,即使没有明确迹象表明某个特定文件需要它。
一如既往,在将 gofix 所做的更改提交到版本控制系统之前,阅读和测试这些更改是个好主意。
2011-11-01
* 6l:移除对 -e 标志的提及——它不执行任何操作。
* cc:将 `cas` 更改为 `newcase`(感谢 Ron Minnich)。
* crypto/openpgp/error:在错误实现类型的名称中使用 `Error`。
* crypto/rsa:将公钥指数从 3 更改为 65537。
* crypto/tls:为 alert 添加 `Error` 方法。
* doc:添加日语版 A Tour of Go 的链接;添加 'all' make 规则以构建所有文档;引用 tour.golang.org 而非 go-tour.appspot.com。
* exp/norm:修复了在迁移到新正则表达式时引入的错误。
* exp/ssh:修复长度头泄漏到通道数据中的问题(感谢 Dave Cheney)。
* fmt:显式处理 `os.Error` 值(与 Stringer 区分)。
* gc:清理打印输出;修复 `[568]g -V` 崩溃(感谢 Mikio Hara);测试并修复逃逸分析错误。
* go/build:在测试中避免使用 `os.Error`。
* go/doc:移除 `os.NewError` 反启发式。
* go/parser:测试并修复 `:=` 作用域错误。
* gob:拆分 `gobError` 的使用,移除不必要的嵌入。
* gofix:测试导入的插入和删除。
* goinstall:针对常见站点进行智能版本控制系统选择(感谢 Julian Phillips)。
* gopack:将归档文件名长度改回 16。
* html:修复测试中的打印参数;更多解析器改进(感谢 Andrew Balholm)。
* json:正确处理 nil 切片(感谢 Alexander Reece)。
* math:提高 Sin 和 Cos 的精度(感谢 Charles L. Dorian)。
* misc/emacs:修复 gofmt 后窗口的恢复(感谢 Jan Newmarch)。
* misc/vim:添加 rune 关键字(感谢 Jongmin Kim)。
* misc/windows:可用于 amd64(感谢 Alex Brainman)。
* net:记录为什么在 Windows 上不使用 SO_REUSEADDR(感谢 Alex Brainman)。
* os:不要将长度为 0 的读取解释为 EOF。
* pkg:从一些打印参数中移除 `.String()`。
* rpc:避免输入错误时的无限循环。
* runtime/pprof:记录 OS X 存在问题。
* runtime:在 init 期间将主 goroutine 锁定到主操作系统线程。
* spec:定义初始化是顺序的。
* strconv:使用比 `os.EINVAL`、`os.ERANGE` 更好的错误。
* syscall:修复 Plan 9 上的 Await 消息(感谢 Andrey Mirtchovski)。
* template:不将 error 用作 stringer;修复执行时未解析的错误检查(感谢 Scott Lawrence)。
* test/alias.go:附加测试。
* test:错误相关的修复。
* textproto:防止 HTTP 头部的长行导致 HTTP 400 响应。
* time:添加带有时区的 RFC1123 格式(感谢 Scott Lawrence)。
2011-10-26 (新的 rune 类型)
此快照引入了 `rune` 类型,它是 `int` 的别名,应用于 Unicode 码点。
Go 的未来版本(Go 1 之后)将把 `rune` 从 `int` 的别名更改为 `int32` 的别名。持续使用 `rune` 是使你的代码在此更改前后都能编译的方法。
要测试你的代码是否对 rune 安全,你可以用
GOEXPERIMENT=rune32 ./all.bash
此命令将构建一个编译器,其中 `rune` 是 `int32` 的别名,而非 `int`。
此外,请在你的代码上运行 `govet` 来识别可能需要更新其签名的方法。
2011-10-25
* big:使 `SetString` 在发生错误时返回 `nil`;
新增 `Rat.Inv` 方法;
无需显式初始化即可使用零值 `Rat`。
* codereview:在 `hg p` 中显示 LGTM。
* crypto/x509:修复证书生成中的名称错误。
* exp/ssh:新增实验性 SSH 客户端;
引入 `Session` 以替代 `Cmd` 用于交互式命令;
服务器清理(感谢 Dave Cheney)。
* exp/types:修复 `parseBasicType` 在遇到未知类型时的崩溃问题。
* fmt:格式化 `nil` 接口时不再恐慌(感谢 Gustavo Niemeyer)。
* go/ast, go/token:实际运行测试;修复 go/ast 测试。
* gotest:明确使用 `-help` 标志,像 make 一样使用 `$GCFLAGS`。
* govet:检查规范的动态方法签名。
* html:改进解析(感谢 Andrew Balholm);
解析 `
2011-10-18
本周快照包含一些可能需要你修改代码的语言和包变更。请仔细阅读这些说明,因为变更较多,你的代码很可能受到影响。
映射(map)删除的语法已更改。类似这样的代码:
m[x] = 0, false
现在应写为:
delete(m, x)
目前编译器仍然接受 `m[x] = 0, false`;尽管如此,你可以使用 `gofix` 将此类赋值重写为 `delete(m, x)`。
当任何一个结果变量被隐藏(shadow)时,Go 编译器将拒绝没有参数的 `return` 语句。因这项更改而被拒绝的代码很可能存在缺陷。
只读通道 (`<-chan T`) 不能被关闭。
编译器将诊断此类尝试。
映射(map)遍历的第一个元素是随机选择的。依赖于遍历顺序的代码需要进行更新。
在程序初始化期间可能会运行 Goroutine。
现在可以将字符串附加(append)到字节切片(byte slice)。以下代码现在是合法的:
var b []byte
var s string
b = append(b, s...)
`gotry` 命令及其关联的 `try` 包已被删除。
这是一个有趣的实验,但最终未能持续下去。
`gotype` 工具已移至 `exp/gotype`,其关联的 `go/types` 包已移至 `exp/types`。已弃用的 `go/typechecker` 包已被删除。
`enbflint` 工具已移至 `pkg/exp/ebnflint`,其关联的 `ebnf` 包已移至 `pkg/exp/ebnf`。
`netchan` 包已移至 `old/netchan`。
`http/spdy` 包已移至 `exp/spdy`。
`exp/datafmt` 包已被删除。
`container/vector` 包已被删除。切片(slice)更好用:
http://code.google.com/p/go-wiki/wiki/SliceTricks其他变更:
* 5l/6l/8l:修复ELFRESERVE诊断问题(感谢Anthony Martin)。
* 6l/8l:支持OS X代码签名(感谢Mikkel Krautz)。
* asn1:接受UTF-8字符串作为ASN.1 ANY类型的值。
* big:正确处理Rat.SetFrac的别名问题。
* build:添加缺失的nuke目标(感谢Anthony Martin);
防止未来意外依赖exp或old包;
更稳健地检测gold 2.20版本(感谢Christopher Wedgwood);
将$GCFLAGS传递给编译器;
在deps.bash失败时停止构建。
* crypto/tls:添加3DES密码套件;
增加服务端SNI支持;
从Windows证书库获取根CA证书(感谢Mikkel Krautz);
使用Mac OS API获取根证书(感谢Mikkel Krautz);
修复Windows根CA获取器中的循环代码错误(感谢Mikkel Krautz);
增加Unix系统根证书存储位置。
* crypto/x509:添加处理PKIX公钥的代码;
保留原始Subject和Issuer字段。
* csv:修复过度激进的TrimLeadingSpace行为。
* exp/ssh:客户端支持全面清理(感谢Dave Cheney)。
* exp/template/html:修复cssEscaper中的错误。
* exp/terminal:从exp/ssh分离终端处理逻辑。
* exp/winfsnotify:Windows文件系统监视器(感谢Hector Chu)。
* fmt:修复依赖map迭代顺序的测试。
* gc:为内联准备修改导出格式;
向runtime.new传递FlagNoPointers标志;
在错误信息和导入数据中保留uint8和byte的区别;
更严格的多赋值规则及测试;
将uintptr视为可能包含指针的类型。
* go/scanner:移除AllowIllegalChars模式。
* go/token:记录反序列化属性。
* gob:避免每条消息写入时的复制操作。
* godefs:添加枚举/常量测试数据(感谢Dave Cheney)。
* godoc:在模板中生成包目录(替代JavaScript方式);
执行"godoc builtin"时显示未导出声明;
使用-path参数时显示正确的源文件名。
* gofix:明确修复顺序,添加mapdelete功能。
* gofmt:修复//line处理;
禁止对不完整程序进行重写。
* gotest:避免与被测包名冲突(感谢Esko Luontola);
测试示例代码。
* goyacc:清理units相关代码(感谢Anthony Martin);
提高与gofmt的兼容性。
* html:添加Render函数,多项错误修复和改进;
解析器改进(感谢Andrew Balholm)。
* http:DoS防护:限制非Handler的Request.Body读取量;
RoundTripper不应修改Request;
避免nil URL导致的panic(感谢Anthony Martin);
修复读取超时和关闭问题;
移除Request.RawURL字段。
* image/tiff:实现PackBits解码(感谢Benny Siegert)。
* ld:修复"cannot create 8.out.exe"错误(感谢Jaroslavas Počepko)。
* misc/emacs:添加类似M-x man的"godoc"命令(感谢Evan Martin)。
* misc/swig:删除二进制文件(感谢Anthony Martin)。
* misc/windows:自动化工具链打包器(感谢Joe Poirier)。
* net/windows:实现IP协议名称到数字的解析器(感谢Alex Brainman)。
* net:为IPConn添加File方法(感谢Mikio Hara);
允许在非标准DNS名称上执行LookupSRV;
修复WriteToUDP的"unexpected socket family"错误(感谢Albert Strasheim);
修复Dial失败时的套接字泄漏(感谢Chris Farmiloe);
移除Dial中的重复错误信息(感谢Andrey Mirtchovski);
CloseRead和CloseWrite返回错误(感谢Albert Strasheim);
在Windows上也跳过非root用户的ICMP测试。
* reflect:禁止通过未导出名称获得的Value调用Interface方法;
使SliceHeader的unsafe使用对GC友好。
* rpc:写入错误时不panic。
* runtime:优化字符串处理速度;
修复用户设置MemProfileRate=0时的崩溃;
修复GC期间系统调用返回时的崩溃(感谢Hector Chu);
修复并行垃圾回收器的内存泄漏。
* scanner:无标记时使scanner.Position无效化。
* spec:定义多赋值的执行顺序。
* syscall/windows:DLL函数加载和调用变更(感谢Alex Brainman)。
* syscall:添加#ifdef以修复ztypes_linux_arm.go中的手动修正(感谢Dave Cheney);
调整Mount以适应更严格的文件系统实现。
* testing:修复失败测试的报告时间。
* utf8:添加Valid和ValidString函数。
* websocket:调整hybi ReadHandshake以支持Firefox(感谢Luca Greco)。
* xml:使Unmarshal匹配Marshal的XMLName行为(感谢Chris Farmiloe)。
2011-10-06
本周快照包含io、image和math包的变更,这些变更可能需要修改客户端代码。
io包的Copyn函数已重命名为CopyN。
math包的Fabs、Fdim、Fmax、Fmin和Fmod函数已分别重命名为Abs、Dim、Max、Min和Mod。
image包的部分内容已移至新的image/color包。这次拆分重命名了一些类型。新名称更为简洁:
image.Color -> color.Color
image.ColorModel -> color.Model
image.ColorModelFunc -> color.ModelFunc
image.PalettedColorModel -> color.Palette
image.RGBAColor -> color.RGBA
image.RGBAColorModel -> color.RGBAModel
image.RGBA64Color -> color.RGBA64
image.RGBA64ColorModel -> color.RGBA64Model
(类似适用于NRGBAColor、GrayColorModel等)
image.ColorImage类型保留在image包中,但重命名为:
image.ColorImage -> image.Uniform
image.Image的实现(image.RGBA、image.RGBA64、image.NRGBA、image.Alpha等)名称保持不变,并建立了良好的对称关系:
image.RGBA是color.RGBA的图像,依此类推。
image.Black、image.Opaque等统一图像保持不变(尽管其类型从image.ColorImage重命名为image.Uniform)。
对应的color类型(color.Black、color.Opaque等)是新添加的。
image/ycbcr包中的内容尚未重命名。ycbcr.YCbCrColor和ycbcr.YCbCrImage类型将在后续迁移至color.YCbCr和image.YCbCr。* 5g/6g/8g: 修复循环查找错误,修复 -f(),重新对变量进行寄存器分配。
* 5l/6l/8l: 为动态 ELF 二进制文件添加 DT_DEBUG 动态标签。
* archive/zip: 读写 Unix 文件模式(感谢 Gustavo Niemeyer)。
* build: 清除源文件中的执行位(感谢 Mikio Hara)。
* bytes: 新增 EqualFold。
* cgo: 允许在标志指令中使用 Windows 路径字符(感谢 Joe Poirier),
支持 mingw-w64 4.5.1 及更高版本(感谢 Wei Guangjing)。
* codereview: 附加的仓库健全性检查,
修复 Mercurial 1.9.2 的问题,
修复 Windows 控制台中的 hg change(感谢 Yasuhiro Matsumoto)。
* crypto/elliptic: 在错误打印中统一使用 %x。
* doc/spec: 移除关于 gccgo 限制的注释,现已修复。
* doc: 添加“使用 GDB 调试 Go 代码”教程,
修复内存模型读取可见性错误。
* encoding/binary: PutX 函数要求缓冲区大小足够,
增加了基准测试,支持 varint 编码。
* exec: 新增 Command.ExtraFiles。
* exp/sql{,/driver}: 新的数据库包。
* exp/ssh: 将通用代码移至 common.go(感谢 Dave Cheney)。
* exp/template/html: 持续开发中。
* fmt: 用切片替换通道缓存。
* gc: 根据 ncpu 限制辅助线程数。
* go/doc, godoc, gotest: 支持读取示例文档。
* go: 新命令的文档和框架实现。
* gob: 防止无效的消息长度,
允许在同一个输入流上使用顺序解码器。
* hgpatch: 不使用 hg 退出状态(感谢 Yasuhiro Matsumoto)。
* http: 为 Response 添加 Location 方法,
在客户端关闭后不发送 400 Bad Request。
* index/suffixarray: 索引序列化(到内存)速度提升 4.5 倍。
* io/ioutil: 添加关于 devNull 是 ReaderFrom 的注释。
* json: 使用 strings.EqualFold 代替 strings.ToLower。
* misc/emacs: 修复缩进错误。
* net: 添加 shutdown: TCPConn.CloseWrite 和 CloseRead。
* net: 使用 AF_UNSPEC 代替各个地址族(感谢 Mikio Hara)。
* path/filepath: 新增 Rel 作为 Abs 的补充(感谢 Gustavo Niemeyer)。
* pkg/syscall: 为 Linux 平台添加 Mkfifo。
* regexp: 移至 old/regexp,用 exp/regexp 替换,速度提升。
* runtime/gdb: 修复通道的 pretty printing,
优雅处理无法找到类型的情况。
* runtime: 在 select 的 syncsend 情况下检查空值指针,
更快的终结器,
修复 malloc 采样错误,
修复 map 内存泄漏,
修复虚假的死锁报告,
修复 linux/386 上的 usleep 并重新启用并行 GC(感谢 Hector Chu),
并行化垃圾回收器的标记和清除。
* strconv: 常见情况下更快的 Unquote。
* strings: 新增 EqualFold, Replacer, NewReplacer。
* suffixarray: 为构造添加基准测试(感谢 Eric Eisner)。
* syscall: 为 openbsd 添加 GetsockoptByte, SetsockoptByte(感谢 Mikio Hara),
为 Linux 添加 IPv4 辅助数据(感谢 Mikio Hara),
将 stdin, stdout, stderr 标记为子进程不可继承(感谢 Alex Brainman),
mksyscall_windows.pl 创建非系统调用包(感谢 Jaroslavas Počepko),
更新组播套接字选项(感谢 Mikio Hara)。
* testing: 支持并行运行测试(感谢 Miki Tebeka)。
* time: 使月份/日期名称比较不区分大小写。
* unicode: 修复 make 表。
* vim: 将 GoFmt 错误发送到位置列表(感谢 Paul Sbarra)。
* websocket: 添加 hybi-13 支持,添加互斥锁以使 websocket 全双工。
2011-09-21
本周的快照包含了一些改进、错误修复和新包。
* archive/tar: 文档化 Header 字段和 Type 标志(感谢 Mike Rosset)。
* bytes: 修复 Replace 以使其确实复制(感谢 Gustavo Niemeyer)。
* cgo: 使用来自环境的 GOARCH(感谢 Jaroslavas Počepko)。
* codereview: 将 CL 消息保存到 $(hg root)/last-change。
* crypto/bcrypt: 新包(感谢 Jeff Hodges)。
* crypto/blowfish: 暴露 blowfish 密钥调度(感谢 Jeff Hodges)。
* doc: 链接到 golang-france。
* doc: 为 gccgo 配置 gold 时,使用 --enable-gold=default。
* exp/norm: 更改 trie 以生成更小的表。
* exp/ssh: 新包,
将 halfConnection 重构为 transport(感谢 Dave Cheney)。
* exp/template/html: 更多修复和改进。
* filepath: 修复 Glob 以便在模式不匹配时不返回错误。
* gc: 禁止无效的 map 键,
处理复杂的 CONVNOP。
* gob: 分配修复。
* godoc: 简化内部 FileSystem 接口。
* http/cgi: 清理环境(感谢 Yasuhiro Matsumoto)。
* http: 始终包含 Content-Length 头,即使为 0(感谢 Dave Grijalva),
检查显式错误的 Request.ContentLength 值,
修复 TLS 握手阻塞服务器 accept 循环,
防止 DumpRequest 添加隐式头。
* httptest: 新增 NewUnstartedServer。
* json: 更清晰的 Unmarshal 文档,
在 UnmarshalJSON 中跳过 nil,并在(为对称)MarshalJSON 中也跳过。
* net: 查找 IP 地址时首先使用 /etc/hosts(感谢 Andrey Mirtchovski)。
* reflect: 添加关于 Value.String 双重语义的注释。
* runtime: 实现 Windows 的 pprof 支持(感谢 Hector Chu),
增加 windows/amd64 的栈系统空间(感谢 Hector Chu)。
* suffixarray: 在构造期间生成更少的垃圾(感谢 Eric Eisner),
改进了序列化代码,使用 gob 代替 encoding/binary。
* sync/atomic: 用 LOCK XADD 替换 MFENCE。
2011-09-16
本周的快照包括对 image、path/filepath 和 time 包的更改。使用这些包的代码可能需要更新。
image 包的 NewX 函数(NewRGBA、NewNRGBA 等)已更改为接受一个 Rectangle 参数,而不是宽度和高度。
Gofix 可以自动进行这些更改。
path/filepath 包的 Walk 函数已更改为接受一个 WalkFunc 函数值,而不是一个 Visitor 接口值。WalkFunc 类似于 Visitor 的 VisitDir 和 VisitFile 方法,但它同时处理文件和目录:
func(path string, info *os.FileInfo, err os.Error) os.Error
要跳过遍历目录(类似于从 VisitDir 返回 false),WalkFunc 必须返回 SkipDir。time 包中 Time 结构体的 Weekday 字段已变更为一个方法。该值按需计算,无需再对程序构建的 Time 值进行重新解析即可获取正确的星期信息。
对于 filepath 和 time 的 API 变更,目前没有 gofix 工具支持,但编译器会捕捉到旧 API 的使用。Weekday 的更新可手动轻松完成。Walk 的修改可能需要更多考虑,但需要修复的实例较少。
* build:为核心包添加构建注释。
* codereview:修复 Mercurial 1.9 中 hg diff @nnn 的问题。
* crypto/tls:更稳健地处理非 TLS 连接,支持 SSLv3。
* debug/elf:在测试中允许另一种 SHT_NOBITS 段重叠情况。
* exp/template/html:对这个自动转义 HTML 模板包进行了更多开发。
* exp/norm:为标准 Unicode 测试集添加了回归测试工具。
* exp/regexp/syntax:修复无效输入导致的解析器崩溃问题,导入所有 RE2 解析测试并修复缺陷。
* exp/regexp:添加 MustCompilePOSIX、CompilePOSIX 函数及最左最长匹配支持。
* flag:使零值 FlagSet 可用。
* gc:清理 if 语法。
* go/build:处理 cgo 和 // +build 注释。
* go/printer:使用 panic/defer 代替 goroutine 来处理错误。
* go/token:支持序列化文件集。
* godoc、suffixarray:切换到 exp/regexp。
* godoc:在顶部显示匹配查询的包,支持完整索引序列化,使用 go/build 查找包内文件。
* gofmt:接受标准输入的程序片段,添加 else 语句测试。
* http/cgi:添加 openbsd 环境配置。
* http:文档说明 Response.Body 非 nil。
* image/png:不使用 goroutine 解码,以允许在 init 阶段进行解码。
* json:若字段标签为 "-",则在编码和解码时忽略该字段。
* ld:按需增长 dwarf includestack。
* net、syscall:实现 SetsockoptIPMReq(),并将多播支持移至 winsock v2.2(感谢 Paul Lalonde)。
* net:添加 LookupTXT 函数。
* os:os.RemoveAll 在 Windows 上检查两个错误码(感谢 Jaroslavas Počepko)。
* path/filepath:修复 Visitor 文档(感谢 Gustavo Niemeyer),使 UNC 文件名生效(感谢 Yasuhiro Matsumoto)。
* runtime:优化 Windows 上的 channel 实现(感谢 Hector Chu),为 windows/386 的 syscall 返回 AX 和 DX(感谢 Alex Brainman)。
* sync/atomic:添加 64 位 Load 和 Store 操作。
* syscall:为 linux 添加路由标志(感谢 Mikio Hara)。
* test:添加从匿名字段继承私有方法的测试。
* websocket:修复 Addr.String() 中的无限递归问题(感谢 Tarmigan Casebolt),将 websocket.WebSocketAddr 重命名为 *websocket.Addr。
2011-09-07
本次每周快照包含改进和错误修复,包括修复由 gc 编译器中逃逸分析变更引入的问题。
* build:从 Go 文件中清除执行权限位(感谢 Mike Rosset),若 sudo.bash /usr/local/bin 有问题则报错(感谢 Mike Rosset)。
* exp/norm:添加 Reader 和 Writer,优化 quickSpan 的性能。
* exp/regexp:缺陷修复及 RE2 测试。
* exp/template/html:字符串替换重构,调整 js{,_test}.go 文件。
* gc:添加 -p 标志以更早发现导入循环,修复标签递归缺陷,修复零长度结构体求值问题,将栈分配的切片底层数组归零。
* gc、ld:修复 Windows 文件路径问题(感谢 Hector Chu)。
* go/parser:接受签名语法的边界情况。
* gobuilder:查找文档时忽略 _test.go 文件,增加日志记录。
* godoc:为 App Engine 使用进行微调。
* gofix:不转换字段名中的 url(感谢 Gustavo Niemeyer)。
* gofmt:缩进多行签名。
* gopprof:正则表达式修复(感谢 Hector Chu)。
* image/png:在 Decode 期间检查 zlib 校验和。
* libmach:修复不正确的 memset 使用(感谢 Dave Cheney)。
* misc/goplay:修复模板输出。
* net:ParseCIDR 返回 IPNet 而非 IPMask(感谢 Mikio Hara),同步 CIDRMask 代码和文档。
* os:在 Windows 上使用 GetFileAttributesEx 实现 Stat(感谢 Alex Brainman)。
* runtime:修复 openbsd 386 的 raisesigpipe 问题,在 windows/amd64 上实现异常处理(感谢 Hector Chu),添加 channel 并发消费者测试(感谢 Christopher Wedgwood)。
* sort:使用堆排序作为快速排序的后备方案(感谢 Ziad Hatahet)。
* sync/atomic:添加 LoadUintptr 函数,添加 Store 系列函数。
* syscall:更新路由消息属性处理(感谢 Mikio Hara)。
* template:修复死锁问题,必要时间接或解引用函数参数,略微简化参数可赋值性测试。
* url:在 ParseQuery 中处理分号。
* websocket:修复 govet 发现的不正确打印语句(感谢 Robert Hencke)。
2011-09-01
本次更新包含性能改进和缺陷修复。
gc 编译器现已引入逃逸分析,通过在安全的情况下将变量置于调用栈而非堆上,从而提升程序性能。
container/vector 包已被弃用,并将在未来某个版本中移除。其他变更:
* archive/tar:支持符号链接。(感谢 Mike Rosset)
* big:修复 nat.scan 缺陷。(感谢 Evan Shaw)
* bufio:处理跨缓冲区边界出现的 "\r\n"。
添加 openbsd 支持。
避免冗余的 bss 声明。
修复未使用参数的问题。
使用最新 mingw-w64 修复 windows/amd64 构建。(感谢 Hector Chu)
* bytes:澄清 NewBuffer 并非供初学者使用。
* cgo:解释如何释放资源。
修复 GoBytes。(感谢 Gustavo Niemeyer)
修复 windows amd64 的回调。(感谢 Wei Guangjing)
注明 CString 结果必须被释放。(感谢 Gustavo Niemeyer)
* cov:移除冗余的 #define 定义。(感谢 Lucio De Re)
* dashboard:又一次 utf-8 修复。
* doc/codelab/wiki:修复 Makefile。
* doc/progs:修复 windows/amd64。(感谢 Jaroslavas Počepko)
* doc/tmpltohtml:更新到新的 template 包。
* doc:强调环境变量是可选的。
* effective_go:转换为使用 tmpltohtml。
* exp/norm:通过在组合时重用空间,将 reorderBuffer 使用的字节缓冲区大小减半。
为 norm 的实现添加了一些小修复。
为 []byte 版本的方法添加了实现。
* exp/template/html:添加了针对 ">" 属性的一些测试。
添加了对 URL 属性的处理。
区分 URL 值属性(如 href)。
重构了 escapeText 以识别属性边界。
* exp/wingui:实现与 windows/amd64 兼容。(感谢 Jaroslavas Počepko)
* flag:添加 Parsed 函数,恢复 Usage 函数。
* gc:添加 openbsd 支持。
逃逸分析。
修复 Plan 9 构建。(感谢 Lucio De Re)
修复 div 缺陷。
修复 pc/line 表。(感谢 Julian Phillips)
修复一些虚假的泄漏。
使静态初始化更加静态。
移除 JCXZ;添加 JCXZW、JCXZL 和 JCXZQ 指令。(感谢 Jaroslavas Počepko)
调整 #includes 顺序。
简化逃逸分析递归。
调整并启用逃逸分析。
* go/ast 清理:基于 FilterFile/FilterPackage 代码构建 File/PackageExports。
调整过滤函数。
修复 ast.MergePackageFiles 以收集有关导入的信息。(感谢 Sebastien Binet)
泛化 ast.FilterFile。
* go/build:添加测试支持并在 gotest 中使用。
扫描时分离测试导入。(感谢 Gustavo Niemeyer)
* go/parser:修复类型开关作用域。
修复类型开关作用域。
* gob:说明除非编译时包含 Debug,否则它不起作用。
* gobuilder:增加日志限制。
* godashboard:修复用户名中的 utf-8 问题。
* godoc:减少索引大小的第一步。
添加虚拟的 playground.js 以消除启动时的 godoc 警告。
为索引 goroutine 添加了系统性限流。
修复 zip.go 中的缺陷。
支持读写(拆分后的)索引文件。
生成包摘要时使用虚拟文件系统。
* gofix:忘记重命名 URL 类型。
osopen:在更改 O_CREAT 时设置 fixed=true。(感谢 Tarmigan Casebolt)
* goinstall:对以 '/' 结尾的路径报错。(感谢 Tarmigan Casebolt)
出错时报告缺少 $GOPATH。(感谢 Gustavo Niemeyer)
选择最接近 runtime.Version 的标签。
* gotry:添加缺失的 $。(感谢 Tarmigan Casebolt)
* http:添加 MaxBytesReader 以限制请求正文大小。
添加文件协议传输。
为更大的 suse 缓冲区调整测试阈值。
删除错误处理临时方案。
对于无效请求,发送 400 响应。
当请求正文过大时返回 413 而非 400。(感谢 Dave Cheney)
支持设置 Transport 的 TLS 客户端配置。
* image/tiff:添加解码基准测试。(感谢 Benny Siegert)
解码器优化。(感谢 Benny Siegert)
* image:添加 PalettedImage 接口,并使 image/png 能识别它。(感谢 Jaroslavas Počepko)
* io:添加 TeeReader。(感谢 Hector Chu)
* json:添加结构体标签选项以将字面量包装在字符串中。
正确计算 Indent 的 Offset。(感谢 Jeff Hodges)
修复带有 ,opts 的结构体标签名被忽略的解码缺陷。
* ld:处理 Plan 9 ar 格式。(感谢 Lucio De Re)
移除重复的 bss 定义。
* libmach:支持为 nm 从 Windows .exe 读取符号。(感谢 Mateusz Czapliński)
* math:修复 Pow10 循环。(感谢 Volker Dobler)
* mime:ParseMediaType 现在返回 os.Error,而非 nil map。
媒体类型格式化器。(感谢 Pascal S. de Kloe)
文本字符集默认值。(感谢 Pascal S. de Kloe)
* misc/dashboard:移除 json 包列表的限制。
* misc/emacs:改进标签检测。
* net:添加 ParseMAC 函数。(感谢 Paul Borman)
更改 IPv4 的 IPMask 内部形式。(感谢 Mikio Hara)
在 openbsd 上禁用 "tcp" 测试。
修复 windows 构建。(感谢 Alex Brainman)
在特定接口上加入和离开 IPv6 组地址。(感谢 Mikio Hara)
使用 IPv4len、IPv6len。(感谢 Mikio Hara)
将内部字符串操作例程移至 parse.go。(感谢 Mikio Hara)
* os:在 OpenBSD 上禁用 Hostname 测试。
修复 WNOHANG Waitmsg。(感谢 Gustavo Niemeyer)
* reflect:添加 Value.Bytes、Value.SetBytes 方法。
* rpc:添加异步 rpc 调用的基准测试。
* runtime:添加 openbsd 386 defs.h。
添加 openbsd 386 的运行时支持。
为 showframe 添加 runtime· 前缀。
windows amd64 的 ctrlhandler。(感谢 Wei Guangjing)
修复 windows/amd64 上的栈清理。(感谢 Hector Chu)
修复 void 警告。
go 接口到 cdecl 回调。(感谢 Jaroslavas Počepko)
在 goc2c 中处理字符串和字符字面量。
使 arm 在 Ubuntu Natty qemu 上工作。
openbsd 线程调整。
简化栈跟踪。
加速 cgo 调用。(感谢 Alex Brainman)
使用 cgo 运行时函数调用 windows 系统调用。(感谢 Alex Brainman)
修复 windows/amd64 回调并修复系统调用以允许在回调中使用。(感谢 Jaroslavas Počepko)
* strconv:将 decimal 放在栈上。
* spec:更新实现差异章节。
* syscall:在 winsock2 中 SOMAXCONN 应为 0x7fffffff。(感谢 Yasuhiro Matsumoto)
添加 openbsd 386。
在 Linux 的 ParseNetlinkRouteAttr 中处理 RTM_NEWROUTE。(感谢 Albert Strasheim)
在 BSD 变体的 ParseRoutingSockaddr 中处理路由条目。(感谢 Mikio Hara)
openbsd amd64 系统调用支持。
在 linux x86 上使用 vdso 页面进行更快的系统调用,而非 int $0x80。(感谢 Yuval Pavel Zholkover)
* template/parse:为 if、range 和 with 提供通用表示形式。
* template:修复模板文档的语法。(感谢 Bill Neubauer)
遍历 channel。
从公共视图中移除 else 和 end 节点。
* test:在 run 中将 GOROOT/bin 置于所有其他路径之前。
* time:修复 Plan 9 构建。(感谢 Fazlul Shahriar)
修复 windows 测试期间的时区问题。
* type switches:针对病态情况的测试。
* version.bash:如果已存在则在 -save 时更新 VERSION。(感谢 Gustavo Niemeyer)
* websocket:实现了新版本的 WebSocket 协议。(感谢 Fumitoshi Ukai)
* windows/386:系统调用后清理栈。(感谢 Jaroslavas Počepko)
* xml:正确序列化 "parent>child" 标签。(感谢 Ross Light)
本周版本包含一些包结构调整。http 和 template 包的用户可能会受到影响。
本周版本用 exp/template 包替换了原 template 包。
原 template 包仍可作为 old/template 包使用。
old/template 包已被弃用,将在未来某个时间点移除。Go 源码树已更新以使用新的 template 包。
我们鼓励旧 template 包的用户切换到新包。
使用 template 或 exp/template 的代码需要分别将其导入行改为 "old/template" 或 "template"。
http 包的 URL 解析和查询转义代码(如 ParseURL 和 URLEscape)已移至新的 url 包,并对名称进行了若干简化。
客户端代码可通过 gofix 工具自动更新。
* asn1:支持反序列化包含 int32 成员的结构体(感谢 Dave Cheney)。
* 构建:允许在没有 cgo 或 hg 的情况下进行构建;支持无 hg 的版本管理(感谢 Gustavo Niemeyer)。
* builtin:为内置函数添加文档。
* cgo:在 writeDefs 中省略重复符号(感谢 Julian Phillips)。
* 杂项:添加对 OpenBSD 的支持。
* doc/codewalk:新增马尔可夫链代码走查。
* exp/norm:添加了 trie 查找代码及相关测试;在 triegen.go 中生成 trie 结构体以实现更好的封装;实现了分解和组合功能。
* exp/template/html:新增用于自动转义 HTML 模板的实验性包。
* exp/template:对 nil 接口进行 range 操作时不再 panic;为清晰起见重命名了 Parse*File 和 Parse*Files 函数;支持 map 的字段语法(感谢 Gustavo Niemeyer)以及许多其他修复和更改。
* gc:实现 nil channel 和 nil map 的支持。
* go/parser:修复 range 子句和类型字面量的问题。
* godoc:为(伪)builtin 包显示所有顶层声明。
* goinstall:真正报告所有新安装的公共包。
* html:解析更多畸形标签。
* http:修复 MultipartReader 出错后的 ParseMultipartForm 问题;修复 DefaultTransport 的 RoundTrip 方法中的副作用(感谢 Dave Grijalva)。
* json:修复 []unmarshaler 情况。
* ld:将 addaddrplus4 设为静态(感谢 Lucio De Re)。
* syscall:将多播地址处理移至 net 包。
* net:Plan 9 支持(感谢 Fazlul Shahriar);为 Listener 接口添加 SetTimeout 方法(感谢 Aleksandar Dezelin);为 OpenBSD 添加多播存根;为接受的 TCP 连接返回正确的本地地址(感谢 Mikio Hara)。
* reflect:在无效接口调用时 panic(感谢 Gustavo Niemeyer)。
* rpc:实现 ServeRequest 以同步处理单个请求;将 Server.Mutex 设为未导出。
* runtime:改进 syscall.NewCallback 参数的检查(感谢 Alex Brainman);在回调期间正确安装 SEH(感谢 Alex Brainman);修复 GC 位图损坏;修复某些 select 中的伪随机性问题(感谢 Gustavo Niemeyer)。
* syscall:将 LazyDLL/LazyProc.Mutex 设为未导出。
* 测试:允许 errchk 使用多个模式;新的 nil 语义。
* time:即使格式字符串中没有,也能解析小数秒。
* url:新增包。
* utf8:重命名一些内部常量以移除前导下划线。
* xml:在 xml.Marshal 中转义字符串 chardata。
2011-08-10
本周版本包含性能改进和错误修复。
没有面向外部的变更,但旧式 container/vector 包的导入也已从核心库中移除(感谢 John Asmuth, Kyle Consalus)。
其他变更:
* 5g:修复 "set but not used" 错误(感谢 Dave Cheney)。
* cmd/ld:更正了不匹配的打印格式和变量(感谢 Lucio De Re)。
* errchk:添加 -0 标志。
* exp/norm:通过添加测试占位符修复构建问题;maketables 工具用于生成规范化所需的表。
* exp/template:错误修复;确保即使出错也能返回有效的 Set(感谢 Roger Peppe);当键不存在时,对 map 的索引操作返回零值(感谢 Roger Peppe);将解析树拆分为单独的包 exp/template/parse;添加 url 查询格式化过滤器。
* faq:进行了许多小调整并增加了几个新讨论主题,如变体类型、联合体。
* fmt:在 malloc 计数器中调用 UpdateMemStats。
* go/build:为 GOROOT 使用 GOBIN 作为二进制路径。
* gob:在 malloc 计数器中添加 UpdateMemStats 调用;避免一些初始化时的内存分配;不调用零值的 GobEncoder。
* gofmt:更新测试脚本以使 'make test' 通过。
* html:解析 doctype 标记;合并相邻文本节点。
* http:在嗅探器中添加更多 MPEG-4 MIME 类型,并禁用 MP4 嗅探;添加测试以在 index.html 中提供服务内容(感谢 Yasuhiro Matsumoto);可配置且默认的请求头大小限制;在测试中打印错误时更正格式标志(感谢 Alex Brainman);更正服务 index.html 的路径(感谢 Yasuhiro Matsumoto)。
* ld:在 pe 中添加一个空符号以使 dumpbin 工作正常(感谢 Wei Guangjing);如果顶级包不是 main 则链接失败。
* 杂项/vim:godoc 命令(感谢 Yasuhiro Matsumoto)。
* net:添加对 OpenBSD 的支持(感谢 Joel Sing);修复 linux 上 /proc/net/igmp,igmp6 的读取错误(感谢 Mikio Hara);实现 Windows 的 LookupMX 和 LookupAddr(感谢 Mikio Hara);在 LookupSRV 返回前对 SRV 记录排序(感谢 Alex Brainman)。
* os:添加对 OpenBSD 的支持(感谢 Joel Sing)。
* runtime:添加更多专用类型算法;更正 Note 文档;在 Linux/FreeBSD/Plan9 上更快地创建 channel;OpenBSD amd64 运行时支持(感谢 Joel Sing);移除不必要的锁(感谢 Hector Chu)。
* scanner:更正非法 UTF-8 编码的错误位置。
* syscall:在 Windows 上延迟加载 dll 函数(感谢 Alex Brainman);移动 BSD mmap 系统调用(感谢 Joel Sing);更新 BSD 变体的路由消息支持(感谢 Mikio Hara)。
* test/bench:在最近改进锁和运行时后的注意事项变更。
* time:在 Time 结构体中添加纳秒字段;解析和格式化小数秒。
2011-07-29
本周更新包含性能改进和大量缺陷修复。
* 6l: 添加 OpenBSD 支持。
* archive/zip: 处理包含超过 65535 个文件的 zip 文件,提升 reader 效率并修复缺陷。
* big: 改进 printf 格式化并优化字符串转换。
* build: 针对 mingw-w64 的修复(感谢 Wei Guangjing),及其他杂项修复。
* cgo: 添加 GoBytes 函数,修复 gmp 示例。
* exp/norm: 为规范化库添加 API。
* exp/regexp: 使用 exp/regexp/syntax 实现 regexp API。
* exp/template: 进行更多微调和修复,将树结构转换为使用 exp/template。
* fmt: 以标准方式处理精度为 0 的格式化字符串。
* gc: 一系列缺陷修复。
* go/parser: 在 ':' 处报告非法标签声明。
* gob: 发送空但非 nil 的 map。
* godoc: 允许文本文件中的换页符,应用引擎配置及更新的文档。
* goinstall: 当使用任何 URL 方案(不仅是 'http://')时中止并发出警告;在各自 GOPATH 下写入 goinstall.log。
* html: 处理不含分号的字符实体(感谢 Andrew Balholm),根据 HTML5 规范解析格式标签嵌套错误问题,同步 html/testdata/webkit 与上游 WebKit。
* http: 内容类型嗅探,使 serveFile 重定向变为相对路径(感谢 Andrew Balholm),其他修复。
* image/tiff: 当缺少 RowsPerStrip 时不再 panic(感谢 Benny Siegert)。
* io/ioutil: 提升 ioutil.Discard 性能(感谢 Mike Solomon)。
* ld: 检测所有导入循环,ldpe 修复(感谢 Wei Guangjing),移除 cseekend 并重做 PE 文件写入(感谢 Alex Brainman),移除动态二进制文件中 ELF 段的重叠(感谢 Gustavo Niemeyer)。
* net/textproto: 在 ReadLine 和 ReadContinuedLine 中避免一次拷贝。
* net: 修复 Windows 上 *netFD.ReadFrom 的内存损坏问题(感谢 Alex Brainman)。
* runtime: 加快 entersyscall/exitsyscall,修复调度器竞态条件(感谢 Hector Chu),提高 goroutine 参数限制,优化并行性能相关代码并修复相关缺陷(感谢 Quan Yong Zhai)。
* sort: 修复 Float64Slice 排序;将 NaN 视为最小值(感谢 Florian Uekermann)。
* src: 移除部分 container/vector 的使用(感谢 John Asmuth)。
* sync: 改进 Once 的快速路径。
* unicode: 修复罗马数字的大小写映射。
2011-07-19
本次每周快照包含一项语言变更和一项 image 包的变更,这些变更可能需要修改客户端代码。
语言变更是:现在 "else" 代码块必须使用花括号,除非 "else" 的主体是另一个 "if"。由于 gofmt 总是自动添加花括号,除非代码包含 "else for"、"else switch" 或 "else select",否则程序不会受到影响。请运行 gofmt 来修复任何此类程序。
image 包中 image.RGBA 和 image.NRGBA 等结构体类型的 Pix 字段发生了重大变化。然而,image.Image 接口类型并未改变,因此如果您没有显式引用 Pix 字段,则无需修改代码。例如,如果您使用 image/jpeg 包解码若干图像,使用 image/draw 进行合成,然后使用 image/png 编码结果,那么您的代码应仍能正常运行。
如果您确实显式引用了 Pix 字段,则有两个变化。首先,Pix[0] 现在指向 Bounds().Min 位置的像素,而不是 (0, 0) 位置的像素。其次,Pix 切片的元素类型现在是 uint8,而不是 image.FooColor。例如,对于 image.RGBA,通道值将按 R, G, B, A, R, G, B, A 等顺序打包。对于每通道 16 位的颜色类型,像素数据将存储为大端字节序的 uint8 值。
大多数 Pix 字段类型已更改,因此如果您的代码在此更改后仍能编译通过,那么您可能无需进行任何进一步修改(除非您使用了 image.Paletted 的 Pix 字段)。如果您遇到编译错误,以前类似这样的代码:
// 获取像素 (x, y) 的 R, G, B, A 值。
var m *image.RGBA = loadAnImage()
c := m.Pix[y*m.Stride + x]
r, g, b, a := c.R, c.G, c.B, c.A
现在应改为:
// 获取像素 (x, y) 的 R, G, B, A 值。
var m *image.RGBA = loadAnImage()
i := (y-m.Rect.Min.Y)*m.Stride + (x-m.Rect.Min.X)*4
r := m.Pix[i+0]
g := m.Pix[i+1]
b := m.Pix[i+2]
a := m.Pix[i+3]
此 image 包变更无法由 gofix 自动修复:如何最好地将代码转换为高效且符合习惯的形式取决于上下文,难以自动化。有关如何处理的示例,请参见 http://codereview.appspot.com/4675076/ 中 image/draw/draw.go 的变更。
**其他变更:**
* 6l:在 Windows 上将默认输出文件名改为 6.out.exe(感谢 Alex Brainman)。
* archive/zip:添加了 `Writer`;添加了 `Mtime_ns` 函数,以合理格式获取修改时间。
* cc, ld, gc:修复了 Plan 9 构建问题(感谢 Lucio De Re)。
* cgi:完成后关闭标准输出读取管道。
* cgo:修复了生成的结构体中缺少分号的问题;完成了 Windows amd64 平台移植(感谢 Wei Guangjing)。
* codereview:修复了与 Mercurial 1.9 的兼容性问题。
* dashboard:以滚动计数方式列出“本周安装最多”列表。
* debug/elf:读取 ELF 程序头(感谢 Matthew Horsnell)。
* debug/pe:修复了 Win64 的 ImportedSymbols 问题(感谢 Wei Guangjing)。
* debug/proc:移除了未使用的包。
* doc/talks/io2010:使用 gofix 更新并处理了错误。
* exp/eval, exp/ogle:移除了 eval 和 ogle 包。
* exp/regexp/syntax:添加了 `Prog.NumCap`。
* exp/template:API 变更、错误修复和调整。
* flag:改进了 `-help` 的输出。
* fmt:修复了 `Scan(&int)` 对单独数字的处理错误。
* gc:修复了闭包 bug;修复了使用 clang 构建的问题(感谢 Dave Cheney);将 `struct{}` 和 `[0]byte` 的大小设为 0 字节(感谢 Robert Hencke);对调试信息打印进行了一些增强。
* gif:修复了局部颜色表和坐标问题。
* go/build:修复了 Windows 相关问题(感谢 Alex Brainman);包含了对 cgo 包中 `.c` 文件的处理(感谢 Alex Brainman);在未找到 GOROOT 时降低了失败的激进性。
* go/printer:将最大连续换行数从 3 改为 2。
* gob:注册了更多切片类型(感谢 Bobby Powers)。
* godoc:支持存储在 `.zip` 文件中的文件系统。
* goinstall, dashboard:Google Code 现在支持 Git(感谢 Tarmigan Casebolt)。
* hash/crc32:添加了 SSE4.2 支持。
* html:将注释中的章节引用更新到最新的 HTML5 规范。
* http:在 `TestHandlerPanic` 中排空管道输出以避免日志死锁;修复了文件扩展名的 Content-Type 问题(感谢 Yasuhiro Matsumoto);为 zip 文件实现了 `http.FileSystem`;当路径不以斜杠开头时,使 `FileServer` 正常工作;支持 `ReverseProxy` 中的定期刷新。
* image/draw:添加了性能基准测试。
* json:添加了 `omitempty` 结构体标签选项;允许使用 `'$'` 和 `'-'` 作为结构体字段的标签(感谢 Mikio Hara);将字符串中的 `\r` 和 `\n` 编码为例如 `"\n"`,而不是 `"\u000A"`(感谢 Evan Martin);为了防止 XSS,对任何 JSON 字符串中的 `<` 和 `>` 进行转义。
* ld:允许在写缓冲区内进行 seek 操作;为 PHDR 添加了一个 PT_LOAD PHDR 条目(感谢 David Anderson)。
* net:完成了 Windows amd64 平台移植(感谢 Wei Guangjing)。
* os (plan9):添加了 `Process.Signal` 作为发送 note 的方式(感谢 Yuval Pavel Zholkover)。
* os:在成功的 `Wait` 之后不允许调用 `Process.Signal`。
* path/filepath:修复了 Windows 路径相关问题(感谢 Alex Brainman)。
* reflect:添加了 `Value.NumMethod`;当方法索引超出类型范围时引发 panic。
* runtime:加快了 `entersyscall` 和 `exitsyscall` 的速度;修复了 `make(chan [0]byte)` 导致的 panic;修复了一个细微的 select bug(感谢 Hector Chu);使 `goc2c` 能在 Plan 9 上构建(感谢 Lucio De Re);使 `TestSideEffectOrder` 测试能够通过两次;多项与并行相关的优化和修复;为 Win64 的 stdcall_raw 栈进行了 16 字节对齐(感谢 Wei Guangjing);字符串相关的优化(感谢 Quan Yong Zhai);跟踪正在运行的 goroutine 数量。
* strconv:在 `atof` 中处理 `[-+]Infinity`。
* sync:为 `WaitGroup` 添加了快速路径;改进了 `RWMutex` 的性能。
* syscall:在 Linux 上添加了 `Flock`;解析和编码 `SCM_RIGHTS` 和 `SCM_CREDENTIALS`(感谢 Albert Strasheim)。
本次周快照包含对 strings、http、reflect、json 和 xml 包的变更。使用这些包的代码需要进行修改。其中大多数更改可以通过 gofix 自动完成。
strings 包的 `Split` 函数本身已被拆分为 `Split` 和 `SplitN`。`SplitN` 与旧的 `Split` 相同。新的 `Split` 等同于 `SplitN` 最后一个参数为 -1 的情况。
http 包有一个新的 `FileSystem` 接口,用于提供对文件的访问。`FileServer` 辅助函数现在接受一个 `FileSystem` 参数,而不是一个显式的文件系统根路径。通过实现你自己的 `FileSystem`,你可以使用 `FileServer` 来提供任意数据。
reflect 包支持一种新的结构体标签方案,该方案支持在多个包之间共享结构体标签。
在此方案中,标签必须采用以下格式:
key:"value" key2:"value2"
`reflect.StructField` 的 `Tag` 字段现在类型为 `StructTag`(一个字符串类型),它有一个方法 `Get(key string) string` 返回关联的值。
json 和 xml 的客户端需要更新。如下代码:
type T struct {
X int "name"
}
应该改为:
type T struct {
X int `json:"name"` // 或者 `xml:"name"`
}
使用 govet 来识别需要更改以使用新语法的结构体标签。**其他变更:**
* 5l, 6l, 8l:在构建过程中移除了对 ed 的使用。
* asn1:支持 T61 和 UTF8 字符串。
* bufio:不再缓存读取错误(感谢 Graham Miller)。
* build:使 version.bash 能够感知分支。
* cgi:测试不再依赖 CGI.pm。
* codereview:使 --ignore_hgpatch_failure 再次生效,将同步限制在默认分支。
* crypto/openpgp:增加了重新序列化密钥的能力,修复了错误(感谢 Gideon Jan-Wessel Redelinghuys)。
* crypto/tls:修复了 generate_cert.go。
* crypto/x509:在 Verify 中防止证书链循环。
* csv:新增包。
* doc:从 apt-get 包列表中移除了 ed。
* docs:将 makehtml 中的 prog.sh 脚本逻辑整合到 htmlgen 自身。
* ebnflint:改进了对标准输入的处理。
* exp/regexp/syntax:新增基于 RE2 的实验性正则表达式实现。
* exp/template:一个新的实验性模板包。
* fmt:在 fmt 的 ScanState 接口中添加了 SkipSpace。
* fmt:为了文档一致性,将 errno 和 error 重命名为 err。
* gc:在错误消息中避免包名歧义,修复包名引号逻辑,针对 Plan 9 的修复(感谢 Lucio De Re)。
* go/build:在比较路径与 GOPATH 之前评估符号链接。
* gob:在包文档中使用结构体的导出字段。
* godoc:忽略以 '.' 开头的目录,在 GOPATH 中搜索文档。
* gofix:os/signal、path/filepath 和 sort 的修复(感谢 Robert Hencke)。
* goinstall:增加了对通用主机的支持(感谢 Julian Phillips),仅向仪表板报告成功安装的包,尝试通过 https 访问(感谢 Yasuhiro Matsumoto)。
* gotest:添加了 -test.benchtime 和 -test.cpu 标志。
* html:修复与改进(感谢 Yasuhiro Matsumoto)。
* http/cgi:添加了 Handler.Dir 以指定工作目录(感谢 Yasuhiro Matsumoto)。
* http:添加了 StripPrefix 处理器包装器,在 GET 请求中假设 ContentLength 为 0,更好地处理长度为 0 的 Request.Body,在复制 TLS 状态之前显式执行 TLS 握手,在文档中说明 ServerConn 和 ClientConn 是底层的,使 NewChunkedReader 公开(感谢 Andrew Balholm),尊重处理器在响应中设置 Connection: close。
* image:更多测试,Paletted.Opaque 优化。
* io.WriteString:如果对象具有 WriteString 方法,则使用它(感谢 Evan Shaw)。
* ld:使用 -s 时省略 Go 符号表(感谢 Anthony Martin)。
* ld:通过移除段重叠来修复 ELF strip(感谢 Gustavo Niemeyer)。
* mime/multipart:解析 LF 分隔的消息,而不仅仅是 CRLF。
* mime:允许小写的媒体类型参数(感谢 Pascal S. de Kloe)。
* misc/dashboard:新功能和改进(尚未部署)。
* misc/emacs:更新内置函数列表(感谢 Quan Yong Zhai)。
* misc/vim:仅允许 UTF-8 作为文件编码(感谢 Yasuhiro Matsumoto)。
* os:修复 FileInfo.Name 的文档,简化 WriteString,在 mkunixsignals.sh 中使用与 syscall 不同的符号。
* path/filepath:使 TestWalk 能够在 Windows 上运行(感谢 Alex Brainman)。
* reflect:添加了 MethodByName,允许在 String 值上使用 Len。
* regexp:在文档中说明 Regexp 是线程安全的。
* runtime/cgo:检查 pthread_create 的错误(感谢 Albert Strasheim)。
* runtime:添加了 Semacquire/Semrelease 基准测试,改进了 Semacquire/Semrelease 实现,windows/amd64 移植(感谢 Wei Guangjing)。
* sync:为 Once 添加了快速路径,改进了 Mutex 以允许连续获取,新的和改进的基准测试。
* syscall:为 darwin/linux/freebsd 重新生成 zerrors,在 StartProcess 中支持 tty 选项(感谢 Ken Rockot)。
* testing:使 ResetTimer 不启动/停止计时器,必要时将基准精度缩放到 0.01ns。
* time:两位数年份补零。
* unicode/maketables:更新调试数据。
* windows:定义并使用 syscall.Handle(感谢 Wei Guangjing)。
* xml:添加了 Marshal 和 MarshalIndent。
2011-06-23
此快照包含一项限制 `goto` 使用的语言变更。
本质上,一个在代码块之外的 `goto` 语句不能跳转到该代码块内部的标签。如果你的代码使用了 `goto`,可能需要进行修改。
此变更集展示了新规则如何影响 Go 源码树:
http://code.google.com/p/go/source/detail?r=dc6d3cf9279d
`os.ErrorString` 类型已被隐藏。如果你的代码使用了 `os.ErrorString`,则必须进行更改。大多数 `os.ErrorString` 的使用可以用 `os.NewError` 替换。
其他变更:
* 5c:不使用 R9 和 R10。
* 8l:更多针对 Plan 9 的修复(感谢 Lucio De Re)。
* build: Make.ccmd:链接 mach 库(感谢 Joe Poirier)。
* build:排除在 Plan 9 上失败的包(感谢 Anthony Martin)。
* cc:小问题:消除注释警告(感谢 Dave Cheney)。
* codereview.py:指出 `hg change -d` 会放弃一个变更列表(感谢 Robert Hencke)。
* crypto/openpgp:添加 ElGamal 支持。
* doc/faq:添加关于将 `[]T` 转换为 `[]interface{}` 的问题。
* doc: Effective Go:修复可变参数函数示例(感谢 Ben Lynn)。
* exec:LookPath 不应在 %PATH% 中搜索类似 c:cmd.exe 的文件(感谢 Alex Brainman),
添加对 Plan 9 的支持(感谢 Anthony Martin),
改进 windows LookPath 的错误信息(感谢 Alex Brainman)。
* fmt:捕获调用 String 等方法时的 panic。
* gc:对 nil 指针调用值方法(nil pointer -> value method call)的描述性 panic,
实现 goto 限制,
unsafe.Alignof、unsafe.Offsetof、unsafe.Sizeof 现在返回 uintptr。
* go/build:在 Script Inputs 中包含 Import 对象。
* godefs:基础测试(感谢 Robert Hencke)。
* goinstall:重构并泛化仓库处理代码(感谢 Julian Phillips),
暂时默认使用 Makefiles(可用 -make=false 覆盖)。
* gopprof:更新内存分配器列表。
* http:添加 Server.ListenAndServeTLS,
缓冲 request.Write,
修复在同一头部中包含 cookies 时的 req.Cookie(name),
允许处理器明确移除 Date 头,
写入具有空值的 Header 键。
* image:针对每颜色通道 16 位类型的基础测试。
* io:澄清 Read、ReadAt、Copy、Copyn 的 EOF 行为。
* ld:不尝试不必要地构建动态段(感谢 Gustavo Niemeyer)。
* libmach:修复 FCMOVcc 和 FCOMI 的反汇编(感谢 Anthony Martin),
修复 linux 上的追踪(用于 cov)(感谢 Anthony Martin)。
* mime:修复 RFC 引用(感谢 Pascal S. de Kloe)。
* misc/godashboard:接受 goinstall 报告的子目录(感谢 Yasuhiro Matsumoto)。
* nacl、tiny:移除残余代码(感谢 Robert Hencke)。
* net、syscall:Windows 接口(感谢 Yasuhiro Matsumoto)。
* os:将 Waitmsg String 方法更改为使用指针接收器(感谢 Graham Miller)。
* runtime:在 grsec 类内核上不使用双倍内存(感谢 Gustavo Niemeyer),
* spec:禁止 goto 跳转到代码块内。
* sync:在基准测试期间恢复 GOMAXPROCS。
* syscall:为 linux 添加 LSF 支持(感谢 Mikio Hara),
为 darwin、freebsd、linux 添加套接字控制消息支持(感谢 Mikio Hara),
为 StartProcess 添加 tty 支持(感谢 Ken Rockot),
修复 Sizeof 更改的构建。
* test:goto 限制的测试。
* time:添加对 Plan 9 的支持(感谢 Anthony Martin)。
2011-06-16
此快照包含对 sort 和 image/draw 包的更改,这些更改要求客户端代码进行修改。
sort.IntArray 类型已重命名为 IntSlice,StringArray 和 Float64Array 同理。
image/draw 包的 Draw 函数现在需要一个额外的参数,即合成操作符。如有疑问,请使用 draw.Over。
其他变更:
* build:为 Plan 9 修复头文件(感谢 Lucio De Re)。
* cgo:处理来自 Xcode 4.2 的基于 LLVM 的新 Apple gcc。
* crypto/openpgp:添加消息加密和签名功能。
* doc/gopher:为 App Engine 添加戴护目镜的 gopher 徽标。
* doc:更新 3 天 Go 课程的笔记。
* exec:在 Windows 上未设置 PATHEXT 变量时使 LookPath 正常工作(感谢 Alex Brainman)。
* exp/regexp/syntax:语法数据结构、解析器、转义、字符类。
* exp/template:新模板包的词法扫描器。
* fmt:字符的调试格式:%+q %#U。
* gc:arm 的帧压缩,
处理 go print() 和 go println(),
解决 goto 错误。
* go/build:修复,自包含测试。
* go/printer、gofmt:将 "select {}" 打印在一行上。
* godoc:用 FileSystem 接口替换 OS 文件系统访问。
* gofix:修复帮助输出中不一致的缩进(感谢 Scott Lawrence)。
* goinstall:使用 go/build 包扫描和构建包。
* http/spdy:改进错误处理(感谢 William Chan)。
* http:使用 runtime/debug.Stack() 在 panic 时转储堆栈跟踪。
* ld:dwarf 在 debug_line 头中发出文件名,而不是作为扩展操作码,
修复链接 Windows PE __declspec(dllimport) 符号(感谢 Wei Guangjing),
使 .rodata 段只读(感谢 Gustavo Niemeyer)。
* mail:解码 RFC 2047 "B" 编码。
* mime/multipart:在 Windows 上测试后移除临时文件(感谢 Alex Brainman)。
* net:导出 Interface 中的所有字段(感谢 Mikio Hara),
重新排列源代码以在 Windows 上运行更多测试(感谢 Alex Brainman),
win32 的 sendfile(感谢 Yasuhiro Matsumoto)。
* os:Plan 9,修复 OpenFile 和 Chmod,添加 Process.Kill(感谢 Yuval Pavel Zholkover)。
* runtime:修复 Plan 9 “持续 goroutine 的 bug”(感谢 Yuval Pavel Zholkover)。
* spec:澄清 append 规则、:= 的作用域规则,
指定常量转换,
unsafe.Alignof/Offsetof/Sizeof 返回 uintptr。
* syscall、os、exec:向 os.ProcAttr 和 exec.Cmd 添加 *syscall.SysProcAttr 字段。
* syscall:为 darwin 添加 ptrace(感谢 Jeff Hodges),
mksyscall_windows.pl 应输出 unix 换行符(感谢 Yasuhiro Matsumoto)。
更新 BSD 变体的 BPF 支持(感谢 Mikio Hara),
在 perl 脚本中使用 strict(感谢 Yasuhiro Matsumoto)。
* xml:处理非字符串属性字段(感谢 Maxim Ushakov)。
此快照包含对 strconv、http 和 exp/draw 包的更改。
使用 http 或 exp/draw 包的客户端代码需要进行更改,
使用 strconv 或 fmt 的 "%q" 格式化指令的代码值得检查。**翻译内容:**
`strconv` 包的 `Quote` 函数现在仅转义那些未被 `unicode.IsPrint` 归类为可打印的 Unicode 码点。此前 `Quote` 会转义所有非 ASCII 字符。这也影响了 `fmt` 包的 `"%q"` 格式化指令。之前的引用行为仍可通过 `strconv` 新增的 `QuoteToASCII` 函数获得。
`http` 包中大多数 `map[string][]string` 类型的实例已被新的 `Values` 类型替代。`http.Values` 类型提供了 `Get`、`Set`、`Add` 和 `Del` 辅助方法,使得处理查询参数和表单值更为便捷。
`exp/draw` 包已被拆分为 `image/draw` 和 `exp/gui` 两个包。
**其他更改:**
* `8l`, `ld`: 为 Plan 9 原生编译 `8l` 进行了初步调整(感谢 Lucio De Re)。
* `arm`: 浮点改进(感谢 Fan Hongjian)。
* `big`: 提升了 `nat` 转换为字符串的速度(感谢 Michael T. Jones),
`Rat` 的 `FloatString` 方法现在输出请求的精度(感谢 Graham Miller),
支持 `big.Rat` 的 gob 序列化。
* `cgo`: 支持非 Intel 的 gcc 机器标志(感谢 Dave Cheney)。
* `compress/lzw`: 不使用后台 goroutine,
解码器缓冲区大小从 3*4096 减少到 2*4096。
* `crypto/twofish`: 修复了 `Reset` 索引溢出错误。
* `crypto`: 重组、清理并添加了生成 CRL 的函数。
* `exec`: 在 `Cmd` 中导出底层的 `*os.Process`。
* `gc`: 启用在 clang/2.9 下构建(感谢 Dave Cheney),
进行了逃逸分析的准备工作,压缩了栈帧。
* `go/build`: 新增用于构建 Go 程序的非完整包。
* `godefs`: 不假设前向类型引用是枚举(感谢 Robert Hencke)。
* `gofix`, `gofmt`: 修复了由 `exec` 更改引起的 diff 回归问题。
* `html`: 改进属性解析,注明包状态。
* `http`: 在 `accept` 达到 `EMFILE` 时不再失败,
修复了处理长度为 0 的 HTTP 请求的问题。
* `image/draw`: 修复了当 `r.Min` 移动时 `sp/mp` 未相应移动的裁剪错误。
* `image/gif`: 修复了图形扩展中的小错误。
* `image/tiff`: 支持 8 位以外的位深(感谢 Benny Siegert)。
* `ld`: 修复并简化了 ELF 符号生成(感谢 Anthony Martin)。
* `libmach`: 使用标准化的指定初始化器格式(感谢 Jeff Hodges)。
* `mail`: 地址列表解析。
* `net`: 添加了网络接口识别 API(感谢 Mikio Hara),
修复了 `net.Interfaces` 中的错误:正确处理可变的 `sdl_data` 大小(感谢 Mikio Hara)。
* `netchan`: 为导入器添加了 `drain` 方法(感谢 David Jakob Fritz)。
* `os`: 添加了 `Process.Kill` 和 `Process.Signal`(感谢 Evan Shaw),
修复了 Plan 9 的 `Getenv`(感谢 Yuval Pavel Zholkover)。
* `runtime`: 通过检查内存重叠改进了 `memmove`(感谢 Quan Yong Zhai),
支持 Linux grsecurity 系统(感谢 Jonathan Mark)。
* `spec`: 处理移位的一个边缘情况。
* `testing`: 检查测试和基准测试不影响 `GOMAXPROCS`(感谢 Dmitriy Vyukov)。
* `unicode`: 添加了 `IsPrint` 及相关属性、通用类别。
---
**2011-06-02**
此快照包含对 `exec` 包的更改,这需要对客户端代码进行相应修改。
`exec` 包已采用更便捷、简洁的 API 重新设计。
以下代码:
```go
args := []string{"diff", "-u", "file1.txt", "file2.txt"}
p, err := exec.Run("/usr/bin/diff", args, os.Environ(), "",
exec.DevNull, exec.Pipe, exec.DevNull)
if err != nil {
return nil, err
}
var buf bytes.Buffer
io.Copy(&buf, p.Stdout)
w, err := p.Wait(0)
p.Close()
if err != nil {
return nil, err
}
return buf.Bytes(), err
```
可以重写为:
```go
return exec.Command("diff", "-u", "file1.txt", "file2.txt").Output()
```
详情请参阅 `exec` 包文档(`godoc exec`)。
通过设置 `GOPATH` 环境变量,您可以使用 `goinstall` 在 Go 源码树之外构建和安装自己的代码以及外部库(并避免编写 Makefile)。
详情请参阅 `goinstall` 命令文档(`godoc goinstall`)。其他变更:
* 5g:对齐修复。
* 6l, 8l:修复使用大量动态库的Mach-O二进制文件。
* 8l:在Windows PE中添加资源(.rsrc)。(感谢 Wei Guangjing)
* asn1:修复空可选RawValues的序列化问题。(感谢 Mikkel Krautz)
* big:使Int和Rat实现fmt.Scanner接口。(感谢 Evan Shaw)
数字扫描速度提升约8倍,移除一些不必要的转换。
* cgo:限制#cgo指令以防止shell扩展。(感谢 Gustavo Niemeyer)
支持通过pkg-config获取编译和链接标志。(感谢 Gustavo Niemeyer)
* compress/flate:修复Huffman树错误,避免使用后台协程。
* crypto/openpgp:添加对称加密文件支持。
* crypto/tls/generate_cert.go:修复O_CREATE拼写错误。
* dashboard:构建失败时发送通知邮件。
* doc:在Effective Go中提及go/printer而非container/vector,在'Documentation'页面添加版本发布历史链接,在'Contributing'页面添加每周快照历史链接。
* encoding/base64:新增DecodeString和EncodeToString函数。
* encoding/binary:为Read操作添加非反射快速路径,为Write操作添加非反射快速路径。
* encoding/hex:新增十六进制转储功能。
* encoding/line:删除该包。其功能现已迁移至bufio。
* filepath:Abs函数必须始终返回规范路径。(感谢 Gustavo Niemeyer)
* fmt:修复UnreadRune中的错误,使%q适用于整数(输出带引号的字符字面量),Scan*函数在输入不足时返回EOF。
* gc:检查接口字段中的参数声明(感谢 Anthony Martin),禁止在类型转换中使用...(感谢 Anthony Martin),闭包引用外部变量时不强制堆分配,修复m[x], _ = y.(T)问题,实现新的移位规则,修补y.tab.c以支持Bison 2.5构建,放宽方法接收者的可赋值性(感谢 Anthony Martin),遍历前对整棵语法树进行类型检查。
* go/scanner:禁止将"0x"和"0X"作为整数解析。(感谢 Evan Shaw)
* gobuilder:Windows平台修复。(感谢 Alex Brainman)
* godoc:为本地应用引擎模拟器运行godoc进行基础设置,在包列表页面展示包管理控制台广告。
* goinstall:Windows平台修复(感谢 Alex Brainman),使用-v参数时提供更详细的日志输出。
* gotest, pkg/exec:在Windows平台使用bash运行shell脚本。(感谢 Alex Brainman)
* http/spdy:重构接口,完善实现与帧类型。(感谢 William Chan)
* http:传输层钩子用于注册非http(s)协议,新增客户端与服务器端基准测试,捕获Handler协程的panic错误,修复Set-Cookie日期解析,让客户端尽可能设置Content-Length,允许传输层使用自定义net.Dial函数,在反向代理中传递Set-Cookie头,当设置Content-Encoding时ServeFile不应发送Content-Length头。
* image:新增SubImage方法。
* image/gif:简化blockReader.Read实现。
* image/png:修复非(0,0)起始图像的编码问题。
* io, net, http:支持sendfile。
* io:新增ByteScanner和RuneScanner接口。
* ld:新增-w选项禁用DWARF调试信息,使错误信息明确来自DWARF。
* mail:新增包。
* mime/multipart:代码和文档杂项修复。
* misc/cgo:移除对'destroy'函数的引用。
* misc/emacs:gofmt后不选中标记。(感谢 Eric Eisner)
* misc/gophertool:用于辅助Go开发的Chrome扩展程序。
* misc/vim:将Fmt命令限制在Go缓冲区中。(感谢 Yasuhiro Matsumoto)
* net:停止轮询时移除套接字的所有待处理事件,更新IP多播套接字选项。(感谢 Mikio Hara)
* os:修复Solaris系统测试,修复Readdir(0)在EOF时的行为,修复Readdir和Readdirnames(感谢 Yuval Pavel Zholkover),修复使用反斜杠路径分隔符的os.MkdirAll(感谢 Yasuhiro Matsumoto),在Windows上正确处理OpenFile标志参数。(感谢 Alex Brainman)
* path/filepath:移除字符串常量。
* pkg:拼写修正(I-Z部分)。(感谢 Robert Hencke)
* quietgcc:修复拼写错误,尊重$TMPDIR环境变量。
* runtime:禁止垃圾回收Windows回调函数(感谢 Alex Brainman),修复Linux系统mmap错误返回(感谢 Dmitry Chestnykh),测试期间重置GOMAXPROCS,在Windows SEH处理器中保存cdecl寄存器(感谢 Alexey Borzenkov)。
* spec:精确使用非正式省略号和Go记号,明确移位规则。
* strconv:新增QuoteRune函数(功能类似Quote但适用于符文而非字符串)。
* strings:实现UnreadByte和UnreadRune方法。
* sync:在Cond.Signal时始终唤醒休眠的协程。(感谢 Gustavo Niemeyer)
* sync/atomic:修复check64。
* syscall:新增ProcAttr字段用于在Windows上传递未转义的命令行(感谢 Vincent Vanackere),为Linux和BSD添加路由消息支持。(感谢 Mikio Hara)
* template:修复与清理。(感谢 Gustavo Niemeyer)
* time:修复Format错误:午夜/正午应为12AM/PM而非0AM/PM。
* unicode:精简表格数据。
2011-05-22
本次快照包含对http包的变更,客户端代码需相应调整。
Client.Get方法的finalURL返回值已被移除。该值现可通过http.Response的新Request字段获取。例如以下代码:
res, finalURL, err := http.Get(...)
应改写为:
res, err := http.Get(...)
if err != nil {
// ...
}
finalURL := res.Request.URL.String()
将finalURL赋值给_的http.Get调用可通过gofix工具自动重写。
本次快照还包含对append函数的优化,在典型使用场景中速度提升2至5倍。
其他变更:
* 5a, 6a, 8a, cc: 移除旧环境变量。
* 5c, 5g: 修复在过度智能的gcc下的构建问题。
* 5l, 8l: 为二进制文件添加ELF符号表。
* 5l: 删除ARMv4之前的指令实现,以及其他修复。
* 6l, 8l: 像其他平台一样发射windows dwarf段(感谢Alex Brainman)。
* 6l: 修复发射windows dwarf段的问题(感谢Wei Guangjing)。
* 8g: 修复从float到uint64的转换(感谢Anthony Martin)。
* Make.cmd: 必要时创建TARGDIR(感谢Gustavo Niemeyer)。
* asn1: 添加大数支持。
* big: 添加Int方法以操作编号位(感谢Roger Peppe),更好地支持字符串转换,支持%v和#修饰符,更好地处理未知格式。
* cgi: 导出RequestFromMap(感谢Evan Shaw),为子进程设置Request.TLS和Request.RemoteAddr。
* cgo: 使用打包结构体以修复Windows行为。
* codereview: 添加发布分支支持,使用JSON API获取元数据而非XML抓取,处理rietveld json中的'null as missing field'。
* compress/lzw: 静默丢弃过大的隐含代码。
* compress/zlib: 在NewWriterDict中实际使用提供的字典。
* crypto/openpgp: 添加密钥生成支持,更改PublicKey.Serialize以包含头部。
* crypto/rand: 添加数字生成的实用函数(感谢Anthony Martin)。
* crypto/tls: 导出已验证的链。
* crypto/x509/crl: 添加包。
* crypto/x509: 导出原始SubjectPublicKeyInfo,在X.509证书中支持DSA公钥,支持解析和验证DSA签名(感谢Jonathan Allie)。
* doc/roadmap: 将“App Engine支持”置于“已完成”下。
* doc: 在talks/、docs.html和首页添加I/O 2011演讲。
* effective go: 在String()示例中解释值/指针,更新为新的Open签名。
* exp/draw: 为将YCbCr或NRGBA绘制到RGBA上提供快速路径。
* filepath: 使EvalSymlinks在Windows上工作(感谢Alex Brainman)。
* flag: 允许不同的标志集。
* gc: 修复无效情况下的类型开关错误消息(感谢Lorenzo Stoakes),修复unsafe.Sizeof,为错误保留原始表达式。
* go/ast, go/doc, godoc: 在过滤AST时考虑结构体字段和接口方法。
* go/ast: 在过滤AST时考虑匿名字段并设置Incomplete位,正确维护包全局导入的映射。
* go/doc, godoc: 在为godoc过滤时,不删除声明的元素。
* go/parser: 在select语句中接受带括号的接收操作,在声明标识符时始终引入一个ast.Object。
* go/printer, gofmt: 修复const/var声明中“=”的对齐,修复表达式列表的格式(缺少空行)。
* go/printer: 添加简单的性能基准,使测试遵循语法限制,为不完整的结构体/接口提供更准确的注释。
* go/token: 更快的FileSet.Position实现。
* go/types: 类型检查器API + 测试基础设施。
* godoc: 添加-index标志以启用/禁用搜索索引,如果没有搜索框,则不运行相应的JS代码。
* gofmt: 更新test.sh(排除语法不正确的文件)。
* html: 解析空的、未加引号的和单引号的属性值。
* http/cgi: 正确设置请求Content-Type(感谢Evan Shaw),为IRIX和Solaris传递环境变量。
* http/pprof: 修复POST读取错误。
* http/spdy: 新的不完整包(感谢Ross Light)。
* http: Client.Do应遵循GET和HEAD的重定向,添加Header.Write方法(感谢Evan Shaw),添加Request.SetBasicAuth方法,添加Transport.ProxySelector,添加http.SetCookie(ResponseWriter, *Cookie),不在相对重定向中清理查询字符串,修复缺少multipart表单时FormFile nil指针解引用,用更简单的版本修复竞态条件测试,修复两个Transport gzip+persist崩溃,在请求中包含Host头,使HEAD客户端请求遵循重定向(感谢Eivind Uggedal)。更新cookie文档以引用新的RFC 6265,根据RFC 6265编写cookie(感谢Christian Himpel)。
* image/bmp: 实现BMP解码器。
* image/gif: 新的包提供GIF解码器。
* image/jpeg: 解码灰度图像,而不仅仅是彩色图像。优化和调整。
* image/png: 编码带有alpha通道的调色板图像(感谢Dmitry Chestnykh),加速不透明RGBA编码。
* image/tiff: 实现解码器(感谢Benny Siegert)。
* image: 添加特定类型的Set方法并在解码PNG时使用它们,使AlphaColor.Set符合通常的签名(感谢Roger Peppe),png & jpeg编码基准。
* ld: 不要发射名为""的动态库的引用,修复Plan 9上rodata段的对齐(感谢Anthony Martin),使没有共享库依赖的ELF二进制文件成为静态二进制文件。
* make.bash: 在Windows上移除旧的bash版本的gotest(感谢Alex Brainman)。
* make: 为C命令和库添加nuke目标(感谢Anthony Martin)。
* mime/multipart: 在Part上添加FileName访问器,添加Writer,在Reader EOF时返回错误,而不是(nil, nil)。
* misc/cgo/test: 运行测试。
* misc/emacs: 在作为子进程调用gofmt时使用UTF-8(感谢Sameer Ajmani)。
* misc/vim: 新的Vim缩进脚本。
* net, http: 添加并使用IP地址范围识别API(感谢Mikio Hara)。
* net: 在TestICMP中默认使用127.0.0.1而不是localhost,不要在意外的DNS SRV响应上崩溃,在BSD变体上启用SO_REUSEPORT(感谢Mikio Hara),协议族自适应地址族选择(感谢Mikio Hara),重新启用通配符监听(感谢Mikio Hara),对LookupSRV返回的记录进行排序(感谢Gary Burd)。
* os: 使Readdir & Readdirnames在结束时返回os.EOF,使Setenv更新C环境变量。
* reflect: 允许Value.MapIndex中的未导出键。
* runtime, sync/atomic: 修复arm cas。
* runtime: 在“finalizer already set”错误中添加换行符(感谢Albert Strasheim),在Linux上优雅地处理线程耗尽(感谢Albert Strasheim),修复ARM上未检查函数参数警告(感谢Dave Cheney),使StackSystem成为StackGuard的一部分(感谢Alexey Borzenkov),可能修复cgo setenv CL导致的Windows构建损坏。
* spec: 澄清整数除法的语义,澄清range子句的语义,修复产生式语法中的错误,限制表达式和select语句的语法,换行不能用于字符或""字符串字面量中,受限表达式仍可加括号。
* strings: 使Reader.Read使用copy而不是显式循环。
* syscall: 添加Windows文件映射函数和常量(感谢Evan Shaw),添加IPv6作用域区域ID支持(感谢Mikio Hara),为linux/386、linux/amd64、linux/arm添加netlink支持(感谢Mikio Hara),添加Sendfile,正确调整freebsd syscalls.master URL(感谢Mikio Hara),更改Overlapped.HEvent类型,它是一个句柄(感谢Alex Brainman)。
* syslog: 修复跳过网络测试的问题(感谢Gustavo Niemeyer)。
* template: 支持字符串、整数和浮点字面量(感谢Gustavo Niemeyer)。
* xml: 修复reflect错误。
本次快照包含对 reflect 包的修订以提升其效率,此前每周发布的版本已进行过重大 API 更新。如果你的代码使用了 reflect 包,可能需要进一步修改,并非所有改动都能通过 gofix 自动完成。完整的变更详情请参阅:
http://codereview.appspot.com/4435042
此外,Typeof 和 NewValue 函数已重命名为 TypeOf 和 ValueOf。
其他变更:
* 5c:调整对齐规则以匹配 5g,就像 6c 匹配 6g 一样。
* 8g, 8l:修复 “set but not used” gcc 错误(感谢 Fazlul Shahriar)。
* all-qemu.bash:移除 DISABLE_NET_TESTS。
* build:移除 DISABLE_NET_TESTS。
* builder:并行构建多个目标。
* cgo:避免 “incompatible pointer type” 警告(感谢 Albert Strasheim)。
* codereview:添加 'hg undo' 命令,及其他多项修复。
* compress/flate:字典支持。
* compress/zlib:在 Reader/Writer 中添加 FDICT 标志(感谢 Ross Light)。
* container/heap:修复测试中的循环依赖问题。
* crypto/openpgp:改进密钥环处理。
* crypto/rsa:支持超过 3 个质数。
* crypto/tls:添加服务器端 OCSP 装订支持。
* crypto/x509:缓存链构建过程。
* crypto:将证书验证移至 x509 包。
* dashboard:优先构建最新修订版本。
* doc:在 install.html 中提及 make 版本。
* expvar:为返回 JSON 可序列化值的函数添加 Func 类型。
* fmt:减少测试递归深度以便在 gccgo 下运行,调整 %U 的文档说明。
* gc:允许复杂类型作为接收器类型(感谢 Robert Hencke),正确处理嵌入接口中的未导出方法名,解释无效接收器类型为何无效,修复 copy([]int, string) 错误信息(感谢 Quan Yong Zhai),修复 “invalid recursive type” 错误(感谢 Lorenzo Stoakes),多项错误修复。
* go spec:尝试澄清关于 "append" 的语言描述,对 map 类型提及索引操作。
* go/types:适配导出数据格式变更。
* gob:修复 GobDecoders 的间接接收器处理,修复 map 序列化中的简单错误,确保 errorf 始终在消息前添加 "gob: " 前缀,为指向大字段的间接引用添加测试用例,使用 reflect 包的新 Implements 和 AssignableTo 方法,解码字符串时分配字符串而非 []byte。
* gobuilder:允许 goos-goarch-foo 形式的构建器,若提供则遵循 MAKEFLAGS(感谢 Dave Cheney)。
* godoc:搜索框使用 "search" 输入类型(感谢 Dmitry Chestnykh)。
* gofix:添加对 reflect 重命名的支持。
* gofmt:添加 -d(差异比较)功能(感谢 David Crawshaw),重写 AST 中 nil 接口时不再崩溃,排除无法无错误编译的测试用例,修复 gofmt 测试工具错误。
* goinstall:支持 GOPATH;在 Go 树外构建和安装,支持构建可执行命令。
* gopack:修复前缀错误,未向归档添加 unsafe 对象时保留 safe 标志。
* gotest:添加计时功能,遵循 $GOARCH,生成符合 gofmt 规范的代码。
* http/cgi:复制部分 PATH 环境变量到子进程,改进 Location 响应处理,传递部分默认环境变量。
* http/fcgi:新增包(感谢 Evan Shaw)。
* http:添加 NewRequest 辅助函数,向 Request 添加 MultipartForm、ParseMultipartForm 和 FormFile,连接代理失败时给出明确提示,错误修复及新测试,在回复前消耗请求正文,不为 Set-Cookie 的 Domain 和 Path 添加引号(感谢 Petar Maymounkov),修复 TestServerTimeouts 中的 IP 混淆问题,处理器超时支持,ServerConn、ClientConn:添加真正的 Close 方法(感谢 Petar Maymounkov),可配置客户端重定向策略,限制 POST 大小,反向代理处理器。
* image/jpeg:添加编码器,解码为 YCbCr 图像而非 RGBA 图像。
* ioutil:添加 Discard。
* json:在 SyntaxError 中跟踪错误偏移量。
* ld:防御损坏的目标文件,不生成空的 dwarf pe 节区(感谢 Alex Brainman),修复 Mac 上的 6l -d 问题,诊断 -d 的无效使用,修复 Plan 9 符号表(感谢 Anthony Martin),移除 MachoLoad 限制。
* make:防止 rm 引发 “text file busy” 错误(感谢 Lorenzo Stoakes)。
* mime/multipart:添加 ReadForm 用于解析 multipart 表单,限制行长度以防滥用。
* mime:RFC 2231 续行/非 ASCII 支持,更多测试,少量解析修复。
* misc/goplay:修复 Firefox 中的 Tab 和 Shift+Enter 问题(感谢 Dmitry Chestnykh)。
* net:禁用另一项外部网络测试,修复 freebsd 上的 EAI_BADFLAGS 错误(感谢 Mikio Hara),修复 ParseIP(感谢 Quan Yong Zhai),修复 dialgoogle_test.go(感谢 Quan Yong Zhai),加载 DNS 配置前先尝试 /etc/hosts(感谢 Dmitry Chestnykh),在 FreeBSD、Linux、OS X / amd64、386 上使用 C 库解析器。
* os/user:新增用户查询包。
* os:在 Windows 上使用 O_APPEND|O_CREATE 打开文件以实现追加(感谢 Alex Brainman),修复 Windows 上 ReadAt/WriteAt 的竞态条件(感谢 Alex Brainman),将 EPIPE 退出转为 panic。
* rc/env.bash:修复在 msys 下的 Windows 构建问题(感谢 Joe Poirier)。
* reflect:允许数组的 Slice 操作,修复数组的 Copy 操作(感谢 Gustavo Niemeyer),要求包限定符在接口检查时匹配,添加 Type.Implements、Type.AssignableTo、Value.CallSlice,使 Set 匹配 Go 行为。
* rpc:允许方法的第一个参数为值而非指针,同时在 HTTP 和直接网络连接上运行基准测试。
* run.bash:移除冗余的重新构建。
* runtime/plan9:Plan 9 的警告修复(感谢 Lucio De Re)。
* runtime:多项错误修复,修复 GOMAXPROCS 与垃圾回收的错误(感谢 Dmitriy Vyukov),修复 mkversion 以输出有效的路径分隔符(感谢 Peter Mundy),更优雅的内存耗尽崩溃处理,要求包限定符在接口检查时匹配,构建源码行表时跳过无行号的函数,将 “too many EPIPE” 转为真正的 SIGPIPE。
* src/pkg:使包文档注释一致地以 "Package foo" 开头。
* syscall:Linux 上的 Madvise 和 Mprotect(感谢 Albert Strasheim),Linux 上的 Mlock、Munlock、Mlockall、Munlockall(感谢 Albert Strasheim),为 darwin/386、darwin/amd64 添加 BPF 支持(感谢 Mikio Hara),更正 Windows CreateProcess 输入参数(感谢 Alex Brainman),修复 linux/arm5 下的 Ftruncate(感谢 Dave Cheney),允许 StartProcess 在 Windows 上隐藏执行的程序(感谢 Vincent Vanackere)。
* test/bench:更新计时结果;迁移至新机器。
* time:支持 Irix 6 的 zoneinfo 文件位置。
* tutorial:现代化 Open 的定义和用法,在筛法程序中将无限循环替换为有限计数。
* websocket:在 websocket.Conn 中包含 *http.Request。
* xml:解析器钩子用于非 UTF-8 字符集转换。2011-04-13
weekly.2011-04-13
本周快照包含了对 reflect 包和 os.Open 函数的重大更改。使用 reflect 或 os.Open 的代码将需要进行更新,可以使用 gofix 工具自动完成。
reflect 包的 Type 和 Value 类型已更改。Type 现在是一个实现了所有可能的类型方法的接口。不再对 reflect.Type t 进行类型开关判断,而是改为对 t.Kind() 进行判断。Value 现在是一个实现了所有可能的值方法的结构体值。不再对 reflect.Value v 进行类型开关判断,而是改为对 v.Kind() 进行判断。完整详情请参见变更:
http://code.google.com/p/go/source/detail?r=843855f3c026
os 包的 Open 函数已被替换为三个函数:
OpenFile(name, flag, perm) // 等同于旧的 Open
Open(name) // 等同于旧的 Open(name, O_RDONLY, 0)
Create(name) // 等同于旧的 Open(name, O_RDWR|O_TRUNC|O_CREAT, 0666)
要将您的代码更新为使用新的 API,请运行 "gofix path/to/code"。Gofix 无法完美处理所有情况,因此在提交之前请阅读并测试它所做的更改。
其他更改:
* archive/zip:添加 OpenReader 函数、ReadCloser 类型(感谢 Dmitry Chestnykh)。
* asn1:实现长度字节的正确序列化(感谢 Luit van Drongelen)。
* big:打印 nil 整数时不再崩溃。
* bufio:添加 ReadLine 函数,以替代 encoding/line。
* build:使构建更快、更安静。
* codereview:自动将旧 diff 移植到新版本,
在 self-clpatch 时删除 Author: 行,
识别不带尾部斜杠的代码 URL。
* crypto/block:移除已弃用的包。
* crypto/des:实现 DES 和 TDEA 的新包(感谢 Yasuhiro Matsumoto)。
* crypto/ecdsa, crypto/rsa:使用 io.ReadFull 从随机源读取(感谢 Dmitry Chestnykh)。
* crypto/rsa:添加三元支持,
添加对预计算 CRT 值的支持,
翻转 CRT 代码以匹配 PKCS#1。
* crypto/x509:暴露完整的 DER 数据(感谢 Mikkel Krautz)。
* doc:新增 "Functions" 代码漫步(感谢 John DeNero)。
* doc/roadmap:添加关于工具、包的章节。
* fmt:允许对无符号整数使用 %U。
* gc:修复和优化。
* go/printer, gofmt:使用空格分隔导入重命名和导入路径。
* go/scanner:改进 TokenString 输出。
* go/types:为 AST 实现的新 Go 类型层次结构。
* godashboard:在 launchpad.net 显示包(感谢 Gustavo Niemeyer)。
* gofix:添加 -diff 选项,各种修复和辅助工具。
* gotest:修复错误处理中的一个 bug,
修复 [^.]_test 文件模式(感谢 Peter Mundy),
处理 Windows 上 gomake 返回的 \r\n(感谢 Alex Brainman)。
* gotype:使用 go/types GcImporter。
* govet:使 printf 等函数的名称匹配不区分大小写。
* http:允许为 ServeFile 覆盖 Content-Type,
客户端 gzip 支持,
测试期间不要在 0.0.0.0 上监听,
丰富服务器端的 Expect 处理及测试。
* image/ycbcr:新包。
* image:注册图像格式时允许使用 "?" 通配符。
* io:修复 n > 0 时的 Read 操作以及 os.EOF 问题(感谢 Robert Hencke)。
* ld:修正 Plan 9 编译器警告(感谢 Lucio De Re),
ELF 头文件函数声明(感谢 Lucio De Re),
修复 Mach-O X86_64_RELOC_SIGNED 重定位(感谢 Mikkel Krautz),
修复 Mach-O bss bug(感谢 Mikkel Krautz),
修复结构体字段名的 dwarf 字符串解码(感谢 Luuk van Dijk),
修复和优化(速度提升 25%)。
* log:泛化获取和设置标志以及前缀的操作。
* misc/cgo/life:在 Windows 上启用构建和测试(感谢 Alex Brainman)。
* misc/vim:添加带有 Fmt 命令的插件(感谢 Dmitry Chestnykh),
更新针对新 reflect 包的类型高亮。
* net:默认禁用多播测试(感谢 Dave Cheney),
对 LookupMX 返回的记录进行排序(感谢 Corey Thomasson)。
* openpgp:修复不当的 := 遮蔽问题(感谢 Gustavo Niemeyer)。
* os:将 Open 重命名为 OpenFile,添加新的 Open 和 Create 函数,
修复 Plan 9 中的 Readdir(感谢 Fazlul Shahriar)。
* os/inotify:测试文件使用 _test 后缀,而非 _obj。
* pkg/path:在 Windows 上启用测试(感谢 Alex Brainman)。
* reflect:新的 Type 和 Value API。
* src/pkg/Makefile:精简除失败外每个目录的 make 输出。
* syscall:在 Linux 上添加 DT_* 和 MADV_* 常量(感谢 Albert Strasheim),
在 Linux、FreeBSD、OS X 上添加 Mmap、Munmap,
修复 Plan 9 中的 StartProcess(感谢 Fazlul Shahriar),
修复 Windows 的 Signaled 处理(感谢 Alex Brainman)。
* test/bench:在 Windows 上启用构建和测试(感谢 Alex Brainman)。
2011-04-04
此快照包含了对 net 包的更改。如果您的代码使用了 Dial 或 LookupHost 函数,则需要进行修改。
laddr 参数已从 net.Dial 中移除,cname 返回值已从 net.LookupHost 中移除。新的 net.LookupCNAME 函数可用于查找给定名称的规范主机名。您可以使用 gofix 更新您的网络代码。
gotest shell 脚本已被替换为一个 Go 程序,使测试速度显著提升。
其他变更:
* asn1:增加了 Kerberos 解析所需的扩展。
* bufio:清理了 Write 和 WriteString 函数(感谢 Evan Shaw)。
* bytes, strings:简化了 Join 函数(感谢 Evan Shaw)。
* crypto/cipher:错误的 CTR IV 长度现在会触发 panic。
* crypto/tls:将 NPN 支持扩展到客户端;新增了 X509KeyPair 函数,用于从内存中解析证书。
* crypto/x509:解析扩展密钥用法扩展(感谢 Mikkel Krautz)。
* debug/gosym:移除了 gotest 运行准备性命令的需求。
* fmt:为 %q 实现了精度(输入长度)值:如 %.20q。
* go/parser:修复了本地类型声明的作用域问题(感谢 Roger Peppe);包名不能是空白标识符。
* go/printer, gofmt:移除了多行原始字符串的特殊处理。
* gopack:新增了 P 标志,用于从文件名信息中移除前缀。
* gotest:新增了 -test.timeout 选项;用 Go 编写的编译程序替换了 shell 脚本;在 Windows 上正确执行 gomake(感谢 Alex Brainman)。
* gotry:移至其独立目录,与 gotest 分离。
* gotype:支持更多测试,新增了一个测试。
* http:新增了 Transport.MaxIdleConnsPerHost;在 URL 转义中使用大写十六进制字符(感谢 Matt Jones)。
* httptest:新增了 NewTLSServer。
* misc/kate:重新组织,移除了 closed()(感谢 Evan Shaw)。
* misc/notepadplus:支持 notepad++(感谢 Anthony Starks)。
* net:实现了非阻塞连接(感谢 Alexey Borzenkov)。
* os:修复了 MkdirAll("/thisdoesnotexist") 的问题(感谢 Albert Strasheim);Plan 9 支持(感谢 Yuval Pavel Zholkover);添加了一些缺失的 Plan 9 错误(感谢 Andrey Mirtchovski);修复了 Stat 返回的 FileInfo.Name(感谢 David Forsythe)。
* path/filepath.Glob:新增错误返回;在出错时不会丢弃已知匹配项。
* path/filepath:新增 Plan 9 支持(感谢 Andrey Mirtchovski)。
* scanner:像 Go 语言一样处理行注释。
* syscall:Plan 9 支持(感谢 Yuval Pavel Zholkover);StartProcess Chroot 和 Credential(感谢 Albert Strasheim);为 freebsd/386, freebsd/amd64 添加了 BPF 支持(感谢 Mikio Hara);使 [Raw]Syscall6 在 linux/386 上传递第 6 个参数(感谢 Evan Shaw)。
2011-03-28
本次周版本包含了改进的测试支持。
现在可以通过 gotest 工具进行内存和 CPU 性能分析。当使用 -test.memprofile 和 -test.cpuprofile 标志调用时,gotest 将生成内存和 CPU 性能分析数据。运行 "godoc gotest" 可获取详细信息。
我们还引入了一种方式,使得在不需要全面测试时,测试可以快速运行。gotest 新增的 -test.short 标志与 testing 包新增的 Short 函数相结合,允许你编写可以在普通模式或“简短”模式下运行的测试;all.bash 现在使用简短模式来减少安装时间。
Makefiles 已知晓该标志 - 你可以直接运行 "make testshort"。**其他变更:**
* .hgignore:忽略所有已安装的Go包(感谢Evan Shaw)。
* build:添加all-qemu.bash,若干ARM修复,增加SWIG支持并添加两个SWIG示例,诊断Ubuntu有缺陷的gold副本,修复version.bash中损坏的awk(感谢Dave Cheney),在无gomake情况下重新启用clean.bash(感谢Gustavo Niemeyer)。
* cgo:修复索引越界错误。
* codereview:允许形如weekly.DATE的变更列表。
* crypto/ecdsa:截断哈希值。
* crypto/openpgp:增加DSA签名支持。
* dashboard:移除旧的python/bash构建器,更新README。
* doc:在install.html中说明release和weekly标签。
* exec:为Run函数的dir选项添加文档(感谢Gustavo Niemeyer)。
* flag:为Nflag函数添加文档(感谢Fazlul Shahriar)。
* gc:移除拒绝有效代码的临时`...`错误。
* go/ast:实现NewPackage,合并CaseClause与TypeCaseClause。
* go/parser:通过复制token字面量修复内存泄漏,正确解析标识符。
* go/printer、gofmt:避免指数级布局算法,gofmt:简化结构体格式化并保留换行。
* go/scanner:正确解析包含Windows文件名的行注释(感谢Alex Brainman)。
* go/token:使用数组而非映射存储token到字符串的转换表。
* gob:优化以减少内存分配,在bootstrapType中使用指针以确保接口行为正确。
* gobuilder:识别形如weekly.DATE的变更列表。
* godefs:处理volatile关键字。
* godoc:添加-template标志以指定自定义模板,修复Windows路径问题(感谢Yasuhiro Matsumoto)。
* gofix:httpserver - 将rw.SetHeader重写为rw.Header.Set。
* gofmt:添加性能分析标志。
* gopprof:修复错误:大范围滚动时不旋转180度,更新内存分配函数列表。
* gotest:修复生成的_testmain.go中的gofmt问题。
* http:添加NewProxyClientConn,避免请求多个文件范围时的崩溃,不为304响应分块,导出Transport并添加keep-alive支持。
* ld:对不安全导入返回大于0的退出码。
* misc/bbedit:移除closed关键字(感谢Anthony Starks)。
* misc/emacs:gofmt:失败时不覆盖当前缓冲区。
* misc/vim:移除'closed'作为内置函数。
* net:添加FileConn、FilePacketConn、FileListener(感谢Albert Strasheim),不强制唤醒epoll/kqueue以添加新事件,让操作系统特定的AddFD例程唤醒轮询线程,为epoll和kqueue/kevent使用预分配缓冲区。
* path/filepath:添加EvalSymlinks函数,修复在符号链接GOROOT下运行TestEvalSymlinks的问题。
* path:适配Windows(感谢Yasuhiro Matsumoto)。
* rpc:增加server_test超时时间(感谢Gustavo Niemeyer),优化以减少内存分配。
* runtime:修复darwin/amd64线程虚拟内存占用(感谢Alexey Borzenkov),修复goroutine的gdb支持,更多栈拆分修复,setitimer的系统特定类型和代码,更新freebsd-386的defs.h(感谢Devon H. O'Dell)。
* strings:Map:字符串未改变时避免分配。
* syscall:GetsockoptInt(感谢Albert Strasheim),Windows的StartProcess修复(感谢Alex Brainman),允许非阻塞系统调用,文件从.sh重命名为.pl(因为这些文件是Perl脚本)。
* test:启用使用`v, ok := <-ch`语法的测试(感谢Robert Hencke)。
* time:当无法为测试设置时区时给出提示信息,在sys.go中隔离系统调用引用。
2011-03-15
本周的发布引入了新的发布标签方案。我们计划继续每周发布,但将现有标签从“release”重命名为“weekly”。“release”标签今后将每月或每两个月应用于一个精选的稳定版本。
原先标记为“release.2011-03-07.1”(现为“weekly.2011-03-07.1”)的修订版被提名为我们的第一个稳定版本,并被赋予标签“release.r56”。每当标记一个新的稳定版本时,我们都会在新的golang-announce邮件列表中发布公告:
http://groups.google.com/group/golang-announce
您仍然可以使用“hg update release”来更新您的Go安装,但现在您只需在我们标记新的稳定版本(我们将在此处宣布)时更新一次。如果您希望保持使用最新版本,应使用“hg update weekly”切换到weekly标签。
本次weekly发布包含语言规范以及http、os和syscall包的重大变更。您的代码可能需要修改。它还引入了新的gofix工具。
`closed`函数已从语言中移除。通道接收的语法已更改为返回一个可选的第二个值,一个布尔值,指示通道是否已关闭。此代码:
v := <-ch
if closed(ch) {
// 通道已关闭
}
现在应写为:
v, ok := <-ch
if !ok {
// 通道已关闭
}
现在禁止声明未使用的标签,这与禁止声明未使用的局部变量相同。
新的gofix工具可查找使用旧API的Go程序并将其重写为使用更新的API。当您更新到新的Go版本时,gofix可帮助对您的程序进行必要的更改。Gofix将处理下面描述的http、os和syscall包的更改,我们将更新该程序以跟上库未来的更改。
Hijack和Flush方法已从http.ResponseWriter接口移除,并可通过新的http.Hijacker和http.Flusher接口访问。RemoteAddr和UsingTLS方法已从http.ResponseWriter移至http.Request。
http.ResponseWriter 接口的 SetHeader 方法已被 Header() 方法取代,该方法返回响应的 http.Header。调用方代码需要修改。此代码:
```go
rw.SetHeader("Content-Type", "text/plain")
```
现在应写为:
```go
rw.Header().Set("Content-Type", "text/plain")
```
os 和 syscall 包的 StartProcess 函数现在分别将最后三个参数作为 *os.ProcAttr 和 *syscall.ProcAttr 类型的值。此代码:
```go
os.StartProcess(bin, args, env, dir, fds)
```
现在应写为:
```go
os.StartProcess(bin, args, &os.ProcAttr{Files: fds, Dir: dir, Env: env})
```
gob 包现在可以编码和解码实现了 gob.GobEncoder 和 gob.GobDecoder 接口的类型的值。这使得具有未导出字段的类型能够传输自描述信息;一个例子是 big.Int 和 big.Rat。
其他变更:
* 5l, 6l, 8l:通过省略类型、字符串、go.string 的符号,将二进制文件大小减少约 40%。
* 5l, 8l:输出缺失的段符号(感谢 Anthony Martin)。
* 6l, 8l:修复 gdb 崩溃问题。
* Make.cmd:同时清理 _test*(感谢 Gustavo Niemeyer)。
* big:为 Int 类型实现了自定义 Gob(En/De)coder。
* build:移除 Make.cmd 中的重复依赖(感谢 Robert Hencke),在 misc/cgo/test 中运行 gotest。
* codereview.py:如果用户不是 CL 作者,则不建议使用 -d 进行更改(感谢 Robert Hencke)。
* compress/lzw:针对一系列输入大小进行基准测试。
* crypto/ecdsa:添加包。
* crypto/elliptic:添加每条曲线的 N 值。
* crypto/openpgp:错误修复和修复命名错误的函数。
* crypto/tls:修复编译错误(感谢 Dave Cheney)。
* doc:Effective Go:一些小清理,更新常见问题解答。hello, world 现在大小为 1.1MB,从 1.8MB 降下来,更新 codelab wiki 以修复 template.Execute 参数顺序。
* flag:按排序顺序访问标志,以获得更好的消息显示。
* fmt:不导出 EOF = -1。
* fmt:使 ScanState.Token 更通用(感谢 Roger Peppe)。
* gc:诊断未使用的标签,修复处理返回值名为 _ 的情况,在导出元数据中包含所有依赖项,使 unsafe.Pointer 成为其自身的类型,而不是等同于 *any。
* go/ast, go/parser:在解析时填充标识符作用域。
* go/ast:为 ast.Print 和 ast.Fprint 添加 FileSet 参数。
* go/parser:常量声明中的第一个常量必须具有值。
* gob:效率和可靠性修复。
* gofmt:移除 -trace 和 -ast 标志。
* goinstall:处理文件名中的 $(GOOS) 和 $(GOARCH),在不使用 cgo 时使用 gc 处理 .c 文件,使用 gc 处理 .s 文件(感谢 Gustavo Niemeyer)。
* gopack:省略时间戳,使输出确定性。
* gotype:用于类型检查 go 程序的命令行工具。
* govet:处理打印格式字符串中的 '*'。
* hash:新的 FNV-1a 实现(感谢 Pascal S. de Kloe)。
* http/cgi:子进程支持(例如,Apache 下的 Go CGI)。
* http:调整 Cookie 代码以遵循 IETF 草案(感谢 Petar Maymounkov),为修复的 HTTP/1.0 保持活动问题添加测试,在 client_test.go 中不访问外部网络,修复当请求 URL 为 nil 时的传输崩溃,将接口 Transport 重命名为 RoundTripper,即使设置 DISABLE_NET_TESTS=1 也运行测试。
* httptest:默认将 Recorder 的状态码设置为 200(当执行 Write 操作时)。
* io/ioutil:清理 ReadAll 和 ReadFile。
* ioutil:添加 NopCloser。
* ld:在数据布局期间保留符号大小。
* lib9, libmach:将 GOOS 引用更改为 GOHOSTOS(感谢 Evan Shaw)。
* libmach:修正字符串比较以恢复 darwin 上的 6cov(感谢 Dave Cheney)。
* misc/vim:为 Vim 添加缩进脚本(感谢 Ross Light)。
* net, os, syslog:针对 Solaris 支持的修复。
* net:不循环排空唤醒管道。
* nm:记录 -S 标志。
* openpgp:添加 PublicKey KeyId 字符串访问器。
* rpc:优化,添加基准测试和内存分析,使用 httptest.Server 进行测试(感谢 Robert Hencke)。
* runtime:通过在调度器解锁时唤醒来减少锁争用,调度器、cgo 重组,将非调试的 malloc 接口从 debug.cpp 拆分到 mem.go。
* spec:澄清 return 语句规则。
* strings:添加 IndexRune 测试,ASCII 快速路径,更好的基准测试名称;添加 BenchmarkIndex。
* syscall:为 linux 实现 Mount 和 Unmount,为 linux 实现 Reboot。
* time:修复 Time.ZoneOffset 文档(感谢 Peter Mundy)。
* tls:将 PeerCertificates 移至 ConnectionState。
2011-03-07 (r56 基础)
此版本包含对 reflect 和 path 包的更改。
使用 reflect 或 path 的代码可能需要更新。
reflect 包的 Value.Addr 方法已重命名为 Value.UnsafeAddr。
使用 Addr 方法的代码现在必须调用 UnsafeAddr。
path 包已拆分为两个包:path 和 path/filepath。
path 包操作斜杠分隔的路径,与操作系统无关。
filepath 包实现本地操作系统的原生文件路径。
path 包中特定于操作系统的功能(例如 Walk)已移至 filepath 包。**其他变更:**
* **构建系统:** 修复与简化(感谢 Dave Cheney),
在构建环境的 `$PATH` 中,将 `$GOBIN` 置于 `/bin`、`/usr/bin` 之前。
* **bzip2:** 加速解压缩。
* **cgo:** 修复 DWARF 类型解析(感谢 Gustavo Niemeyer),
将临时源文件放入 `_obj` 目录(感谢 Roger Peppe),
修复涉及无参数回调的错误。
* **compress/lzw:** 性能优化。
* **文档:** 新增关于“实现”接口的 FAQ,
新增关于大型二进制文件的 FAQ,
新增关于栈与堆分配的 FAQ,
在路线图中增加国际化内容,
在 `code.html` 中描述特定于平台的约定。
* **fmt:** 允许对 Fscan 等函数进行递归调用(感谢 Roger Peppe),
使 `%#p` 格式抑制前导的 `0x`。
* **gc, gopack:** 在文档中添加一些缺失的标志。
* **gc:** 修复名为 `main` 的包的初始化(感谢 Gustavo Niemeyer),
* **gob:** 使递归的 `map` 和 `slice` 类型能够工作,以及其他修复。
初步支持 `GobEncoder`/`GobDecoder` 接口。
* **gobuilder:** 添加 `-package` 标志以构建外部包,添加 `-v` 标志以启用详细输出。
* **gofmt:** 排除不合法的 Go 语言测试文件。
* **goinstall:** 防范恶意文件名(感谢 Roger Peppe)。
* **goyacc:** 提供 `-p` 标志以设置名称前缀,并更新文档。
* **http:** 添加 cookie 支持(感谢 Petar Maymounkov),
允许处理程序发送非分块响应,
导出 `ParseHTTPVersion` 函数,
暴露客户端的 `Transport`,
使用 `WriteProxy`,
将 `ClientTransport` 重命名为 `Transport`。
* **http/cgi:** 新包。
* **http/httptest:** 新包。
* **image:** 为常见文件格式添加解码测试。
* **io/ioutil:** 添加 `TempDir` 函数。
* **mime/multipart:** `Header` 类型从 `map` 更改为 `MIMEHeader`。
* **path/filepath:** 新增特定于操作系统的路径支持(感谢 Gustavo Niemeyer)。
* **reflect:** 添加 `PtrTo` 函数,添加 `Value.Addr` 方法(旧的 `Addr` 现为 `UnsafeAddr`)。
* **runtime:** 在 linux/arm 上使用内核提供的 compare-and-swap 操作。
* **规范:** 对函数的作用域规则进行了微小澄清。
* **sync/atomic:** 新包,用于暴露原子操作。
* **syscall:** 重新生成 `zerrors_freebsd_amd64.go`(感谢 Mikio Hara),
解决 FreeBSD `execve` 内核错误(感谢 Devon H. O'Dell)。
* **template:** 文档中说明分隔符。
* **testing:** 在每次基准测试运行前执行垃圾回收(感谢 Roger Peppe)。
* **unsafe:** 修正文档。
* **websocket:** 测试中使用 `httptest.Server`(感谢 Robert Hencke)。
* **xml:** 允许嵌套指令(感谢 Chris Dollin)。
2011-02-24
此版本对 http 包进行了更改,并有一项小的语言变更。
如果你的代码操作了 HTTP 头部(Headers)或在 if 语句中省略了条件,则需要进行修改。
新的 `http.Header` 类型取代了 `http.Request` 和 `http.Response` 中的 `Header` 和 `Trailer` 字段所使用的 `map[string]string`。
`Header` 值可以通过其 `Get`、`Set`、`Add` 和 `Del` 方法进行操作。
参见 http://golang.org/pkg/http/#Header
if 语句中的条件现在是强制要求的。
以前它默认为 `true`,就像在 `switch` 和 `for` 语句中一样。
以下代码现在是非法的:
if x := foo(); {
// 总是会执行的代码
}
要达到相同的效果,可以这样做:
if x := foo(); true {
// 代码
}
或者,更简单的形式:
{
x := foo()
// 代码
}
其他变更:
* 6l:新增 -Hwindowsgui 标志,支持构建 Windows GUI PE 文件(感谢 Alex Brainman),修复 PE 相关问题(感谢 Wei Guangjing)。
* 8l、6l:在 Windows 上允许创建更多操作系统线程(感谢 Alex Brainman)。
* 构建系统:减少在递归 make 中使用子 shell,并在 make.bash 中移除未使用的 NaCl 条件判断(感谢 Dave Cheney)。
* codereview:修复包含空 diff 的 clpatch 命令(感谢 Gustavo Niemeyer)。
* compress/bzip2:新增包。
* compress/lzw:实现解码器。
* crypto/openpgp:新增包。
* crypto/rand:新增读取缓冲区以加速小请求处理(感谢 Albert Strasheim)。
* crypto/rsa:必要时对 OAEP 结果进行左填充。
* crypto/tls:将协议协商失败视为致命错误。
* fmt:在 Scanln 中遇到换行符时,停止向 Scanner 的 Scan 方法传递字符。
* gc:修复接口相关的错误信息,将字符串常量比较改为无符号类型(感谢 Jeff R. Allen)。
* Go 语言规范:对 channel 类型进行了细微的澄清说明。
* go/ast, parser:if 语句中的条件现在是强制要求的。
* gob:对用户类型信息只计算一次,并防范纯递归类型。
* godoc:接受符号链接作为 -path 参数提供的路径名,新增 robots.txt,在读取过滤文件时记录错误。
* html:对 HTML 注释进行标记化处理。
* http:新增代理支持(感谢 Yasuhiro Matsumoto),使用 net/textproto 实现(感谢 Petar Maymounkov),在代理请求中发送完整 URL,引入 Client 和 ClientTransport 的初始实现。
* image/png:支持更多格式(感谢 Mikael Tillenius)。
* json:仅使用字母数字标签,使用 base64 编码 []byte 类型(感谢 Roger Peppe)。
* ld:检测因 NOSPLIT 导致的栈溢出,移除 rpath,支持弱符号。
* misc/dashboard/builder:使用 UTF-8 编码与 hg 交互。
* misc/dashboard:在构建失败时通知 golang-dev。
* net:在 Windows 下,当 eof 时 *netFD.Read 返回 os.EOF(感谢 Alex Brainman),向 UDPConn 添加 IPv4 多播支持(感谢 Dave Cheney),更精确的 IPv4-in-IPv6 API 测试(感谢 Mikio Hara),拒绝无效的 net:proto 网络名称(感谢 Olivier Antoine)。
* netchan:允许使用任意连接(感谢 Roger Peppe)。
* os:新增 ENODATA 和 ENOTCONN 常量(感谢 Albert Strasheim)。
* reflect:新增几句说明 Methods 如何工作的描述,向 ArrayOrSliceType 添加一个内部方法以确保其仅被数组和切片实现,向 CommonType 添加指针字段(为未来工作占位)。
* runtime-gdb.py:GDB 的 Go 字符串美化打印器能正确处理长度信息。
* runtime:多项错误修复,更完整的栈跟踪信息,为 runtime.GOROOT 记录 $GOROOT_FINAL。
* spec:删除关于选择器可用于指向接口类型的指针的不正确说明。
* sync:新增 Cond 类型(感谢 Gustavo Niemeyer)。
* syscall:为 mlockall 新增 MCL_* 标志(感谢 Albert Strasheim),为 win32 实现 chmod() 函数(感谢 Yasuhiro Matsumoto)。
* test/bench:为新的垃圾回收器更新计时数据。
* testing:重命名命令行标志以避免冲突(感谢 Gustavo Niemeyer)。
* textproto:引入 Header 类型(感谢 Petar Maymounkov)。
* websocket:使用新的接口访问 Header。
2011-02-15
本次发布包含了对 io、os 和 template 包的更改。
您可能需要更新您的代码。
io.ReadByter 和 io.ReadRuner 接口类型已分别重命名为
io.ByteReader 和 io.RuneReader。
os 包的 ForkExec 函数已被新的 StartProcess 函数取代,
并围绕 Process 类型构建了新的 API:
http://golang.org/pkg/os/#Process
template.Execute 的参数顺序已颠倒,以符合“目标优先”的理念,
与 io.Copy、fmt.Fprint 等保持一致。
Gotest 现在可以为使用基于 Make.cmd 的 makefiles 的目录中的 main 包工作。
上一版本中的内存分配运行时问题尚未完全修复。
通过 ulimit -v 设置的虚拟内存耗尽问题已得到修复,
但在使用 GOMAXPROCS > 1 时,仍存在已知的垃圾回收器问题。
其他变更:
* 5l:停止生成64位异或指令。
* 8l:Plan9支持的进一步改进(感谢Yuval Pavel Zholkover)。
* archive/zip:处理带数据描述符的文件。
* arm:可用的窥孔优化器。
* asn1:将true序列化为255而非1。
* buffer.go:微小优化,扩展注释说明。
* build:在DISABLE_NET_TESTS=1时移除syslog支持(感谢Gustavo Niemeyer),
允许clean.bash在新签出代码库上运行,
将"所有测试通过"消息修改得更加醒目,
修复GOROOT中的空格问题(感谢Christopher Nielsen)。
* bytes:修复buffer.ReadBytes中的bug(感谢Evan Shaw)。
* 5g:改进的int64代码生成,
不再使用MVN指令。
* cgo:非编译状态下不运行cgo(感谢Gustavo Niemeyer),
修复_cgo_run时间戳文件顺序(感谢Gustavo Niemeyer),
修复有符号枚举的处理(感谢Gustavo Niemeyer),
实现操作系统/架构相关的#cgo指令(感谢Gustavo Niemeyer),
重命名内部函数f以避免与可能的C全局变量f冲突。
* codereview:修复Windows下的hgpatch(感谢Yasuhiro Matsumoto),
记录仓库和基础版本信息,
使用cmd.communicate方法(感谢Yasuhiro Matsumoto)。
* container/ring:将Iter()方法替换为Do()方法。
* crypto/cipher:在OCFB模式中添加重新同步开放接口。
* crypto/openpgp/armor:缺陷修复。
* crypto/openpgp/packet:新增子包。
* crypto/tls:支持从文件加载证书链,
优先选择最优密码套件而非最差方案。
* crypto/x509:添加名称约束支持。
* debug/pe:修复ImportedSymbols相关问题(感谢Wei Guangjing)。
* doc/code:更新文档以反映包名不再需要全局唯一。
* doc/codelab/wiki:多项修正(感谢Andrey Mirtchovski)。
* doc/install:更新Mercurial版本说明。
* encoding/line:修复EOF后返回的行数据问题。
* flag:允许整型标志接受十六进制(0xFF)和八进制(0377)输入。
* fmt.Scan:支持扫描二进制指数浮点格式(如2.4p-3),
支持十六进制(0xFF)和八进制(0377)整数。
* fmt:补充%%格式说明;为浮点数添加%b格式说明。
* gc, ld:检测过时或不兼容的目标文件,
main包名不再保留。
* gc:修正方法缺失错误中的接收器描述(感谢Lorenzo Stoakes),
修正非规格化常量的舍入问题(感谢Eoghan Sherry),
修复select接收操作的缺陷。
* go/printer, gofmt:改进多行原始字符串的处理逻辑。
* go/printer:行注释必须以换行符结束,
移除"Styler"概念及HTML模式。
* gob:允许Decode(nil)调用,用于丢弃下一个值。
* godoc:使用IsAbs检测绝对路径(修复win32问题)(感谢Yasuhiro Matsumoto),
当不存在同名命令时不再隐藏包查找错误。
* gotest:为主程序启用单元测试支持。
* http:添加支持超时的Server类型,
为ClientConn和ServerConn添加流水线支持(感谢Petar Maymounkov),
处理无分块、无长度声明的HTTP/1.1响应。
* io:添加RuneReader接口。
* json:修正Marshal函数文档。
* netchan:优雅处理已关闭的连接(感谢Graham Miller)。
* os:实现新的Process API(感谢Alex Brainman)。
* regexp测试:使部分基准测试更具实际意义。
* regexp:新增对RuneReader接口读取文本的匹配支持。
* rpc:增强错误容忍度,正确丢弃异常值(感谢Roger Peppe)。
* runtime:检测Windows下线程创建失败情况,
更快的内存分配器和垃圾回收器,
修复虚拟内存耗尽问题,
实现Windows控制台Ctrl处理器(SIGINT)(感谢Hector Chu),
增强恐慌堆栈跟踪的详细信息及行号处理,
改进Windows回调处理机制(感谢Hector Chu)。
* spec:调整可赋值性定义,
允许导入名为main的包,
明确新声明指针类型的方法集说明,
修正若干拼写错误(感谢Anthony Martin),
修正Typeof()返回类型(感谢Gustavo Niemeyer),
升级至Unicode 6.0标准。
* sync:诊断对未锁定互斥锁的解锁操作,
新增WaitGroup类型(感谢Gustavo Niemeyer)。
* syscall:添加SetsockoptIpMreq支持(感谢Dave Cheney),
为darwin和freebsd添加sockaddr_dl、带路由消息支持的sysctl(感谢Mikio Hara),
零长度读写操作不再使用NULL指针,
实现Windows版Fsync函数(感谢Alex Brainman),
Windows下ForkExec操作获取ForkLock锁(感谢Hector Chu),
Windows API返回errno而非布尔值(感谢Alex Brainman),
移除过时的socket IO控制命令(感谢Mikio Hara)。
* template:添加简单的格式化器链式调用(感谢Kyle Consalus),
允许使用前导'*'通过指针进行间接引用。
* testing:在测试输出中包含已用时间。
* windows:将剩余的__MINGW32__实例替换为_WIN32(感谢Joe Poirier)。
2011-02-01
本次发布包含对channel操作的重要变更,以及log包的微小改动。如果您的代码使用了非阻塞channel通信或log包的Exit函数,则需要修改代码。
语言已移除非阻塞channel操作功能。等效操作始终可通过带有default子句的select语句实现。若select中包含default子句,该子句将在其他分支均未就绪时执行(仅在此情况下),从而避免通信阻塞。
例如,原先的非阻塞发送操作:
if ch <- v {
// 已发送
} else {
// 未发送
}
应改写为:
select {
case ch <- v:
// 已发送
default:
// 未发送
}
类似地,接收操作:
v, ok := <-ch
if ok {
// 已接收
} else {
// 未接收
}
应改写为:
select {
case v := <-ch:
// 已接收
default:
// 未接收
}
本次变更是重新定义接收操作“comma-ok”语法的前奏。
在后续版本中,接收表达式将返回接收到的值以及一个可选的布尔值,用于指示通道是否已关闭。这些变更将分两个阶段进行,以防止这一语义变更悄然破坏使用接收操作“comma-ok”语法的代码。
目前没有为发送操作引入布尔表达式形式的计划。
向已关闭的通道发送数据将立即引发恐慌。此前,未明确数量的发送操作会静默失败,之后才引发恐慌。
log包的Exit、Exitf和Exitln函数已分别重命名为Fatal、Fatalf和Fatalln。这使其与testing包的命名保持一致。
对“tiny”操作系统的移植已被移除。该移植缺乏维护且未经测试。它曾作为一个演示玩具,展示Go能够在裸机上运行,并且已达到其目的。当然,源代码仍将保留在仓库历史记录中,如果将来需要,可以将其恢复。
本版本还更改了内存分配器的内部结构,为后续垃圾回收器的变更做准备。
如果您遇到问题,请告知我们。
有一个已知问题我们已察觉但尚未调试:
http://code.google.com/p/go/issues/detail?id=1464&.
本版本的其他变更:
* 5l:记录-F选项,在旧版ARM上强制启用(软件浮点仿真)
* 6g:修复临时变量的寄存器分配(感谢 Eoghan Sherry),
修复 uint64(uintptr(unsafe.Pointer(&x))) 问题。
* 6l:重定位 CMOV* 指令(感谢 Gustavo Niemeyer),
windows/amd64 移植(感谢 Wei Guangjing)。
* 8l:添加 PE 动态导出,在 Windows PE 中生成 DWARF 调试信息,
以及代码生成修复(感谢 Wei Guangjing)。
* bufio:当缓冲区为空时,使 Flush 操作为空操作。
* bytes:添加 Buffer.ReadBytes、Buffer.ReadString(感谢 Evan Shaw)。
* cc:添加为类型和变量生成Go代码的模式。
* cgo:在Go文件中定义 CGO_CFLAGS 和 CGO_LDFLAGS(感谢 Gustavo Niemeyer),
windows/386 移植(感谢 Wei Guangjing)。
* codereview:修复Windows问题(感谢 Hector Chu),
改进文件模式处理,
解决更多ASCII与Unicode的相关问题。
* crypto/dsa:添加对DSA的支持。
* crypto/openpgp:添加s2k。
* crypto/rand:使用defer解锁互斥锁(感谢 Anschel Schaffer-Cohen)。
* crypto/rsa:更正SignPKCS1v15的文档字符串。
* crypto:添加包,作为存储哈希函数标识符的通用位置。
* doc/codelab/wiki:更新以适应模板变更,添加到run.bash。
* doc/spec:澄清地址运算符。
* ebnflint:出错时以非零状态退出。
* encoding/base32:新包(感谢 Miek Gieben)。
* encoding/line:使其同时实现 io.Reader。
* exec:为LookPath使用自定义错误(感谢 Gustavo Niemeyer)。
* fmt/doc:定义字符串的宽度和精度。
* gc:改进结构体比较(struct == struct)的错误信息,
修复发送操作的优先级,
处理类型开关中的无效名称,
为单操作阻塞和非阻塞选择语句添加特殊处理代码。
* go/scanner:修复构建问题(调整扫描器的EOF行计数)。
* gob:改进调试信息和注释,
使嵌套接口正常工作,
当编码一个没有公共字段的非空结构体时报告错误。
* godoc:为白名单中的非Go文件添加全文索引,
为非Go文件显示行号(错误修复)。
* gofmt -r:match(...) 参数可以是nil;添加缺失的防护检查。
* govet:将Panic添加到函数列表中。
* http:添加主机模式(感谢 Jose Luis Vázquez González),
在Get中跟随相对重定向。
* json:处理大写浮点指数(如1E100)(感谢 Pieter Droogendijk)。
* ld:添加-I选项以设置ELF解释器,
在生成DWARF时更健壮地解码反射类型信息。
* lib9:更新至Unicode 6.0.0。
* make.bash:更严格的selinux测试(除非启用,否则不报错)。
* misc/vim:Import/Drop命令(感谢 Gustavo Niemeyer),
将'syntax sync'设置为较大值(感谢 Yasuhiro Matsumoto)。
* net:修复测试中的竞态条件,
在LookupHost中返回cname。
* netchan:避免测试中的竞态条件,
修正导入部分的文档(感谢 Anschel Schaffer-Cohen)。
* os:添加ETIMEDOUT(感谢 Albert Strasheim)。
* runtime:为C类型生成Go定义,
实现Windows的回调函数(感谢 Alex Brainman),
使Walk网页浏览器示例能够工作(感谢 Hector Chu),
使选择语句更公平,
优先使用固定栈分配器而非通用内存分配器,
简化堆映射和内存分配。
* scanner:修复Scan、Pos返回的Position,
在Init中不要提前读取。
* suffixarray:在Lookup的两端使用二分查找(感谢 Eric Eisner)。
* syscall:添加缺失的网络接口常量(感谢 Mikio Hara)。
* template:将映射键视为零值,而非不存在(感谢 Roger Peppe)。
* time:允许取消After事件(感谢 Roger Peppe),
支持Solaris的zoneinfo目录。
* token/position:添加了SetLinesForContent。
* unicode:更新至Unicode 6.0.0。
* unsafe:为Pointer的文档添加缺失的用例。
2011-01-20
本版本从语言中移除了float和complex类型。
浮点数字面量的默认类型现在是float64,复数字面量的默认类型现在是complex128。
使用float或complex的现有代码必须重写,以使用显式指定大小的类型。
双参数构造器cmplx现在拼写为complex。
2011-01-19
5g(ARM)编译器现已启用寄存器分配。如果您发现它导致错误,请使用5g -N禁用寄存器分配器,并请告知我们。
xml包现在允许通过指定形如"parent>child"的结构体标签来提取嵌套的XML标签。有关示例,请参见XML文档:http://golang.org/pkg/xml/* 5a、5l、6a、6l、8a、8l:处理内存不足和大内存分配问题(感谢 Jeff R. Allen)。
* 8l:PE 格式变更(感谢 Alex Brainman)。
* arm:修复与改进。
* cc:修复 vlong 条件判断。
* cgo:增加复数浮点数和复数双精度类型(感谢 Sebastien Binet),在 _cgo_main.c 中将所有提供的符号定义为函数。
* codereview:不发送无文件的变更列表(感谢 Ryan Hitchman)。
* crypto/cipher:添加 OFB 模式。
* expvar:添加 Float 类型。
* fmt:为 %X 格式说明符添加对 string 和 []byte 的文档说明。
* gc、runtime:确保对 channel 的 range 操作在多 goroutine 下安全。
* gc:修复类型化常量声明(感谢 Anthony Martin)。
* go 规范:调整常量类型化的语言描述。
* go/scanner:使 Init 接受 *token.File 而非 *token.FileSet。
* godoc:恢复“正在索引”的提示信息,避免对搜索结果片段进行双重 HTML 转义,重新启用限定标识符(如 "math.Sin")作为查询字符串,对生成的 HTML 进行窥孔优化,移除格式化部分前的制表符。
* gofmt、go/printer:不在可能破坏代码结构的位置插入多余的换行符。
* http:修复响应中的 Content-Range 和 Content-Length 头(感谢 Clement Skau),修复协议相对 URL 解析;新增 ParseRequestURL 函数,正确处理 HEAD 请求,支持相对 URL。
* math:在 Frexp、Ilogb、Ldexp 和 Logb 中处理非规格化数(感谢 Eoghan Sherry)。
* net、syscall:在 Recvmsg 中返回源地址(感谢 Albert Strasheim)。
* net:新增 LookupAddr 函数(感谢 Kyle Lemons),新增 unixpacket 协议支持(感谢 Albert Strasheim),当无法打开 /etc/services 时避免空指针引用(感谢 Corey Thomasson),实现 Windows 超时机制(感谢 Wei Guangjing)。
* netchan:不阻塞发送操作;实现流控制(感谢 Roger Peppe)。
* regexp:拒绝裸露的 '?' 字符(感谢 Ben Lynn)。
* runtime/cgo:不在虚拟的 _cgo_main.c 中定义 crosscall2。
* runtime/debug:新包,用于从运行中的 goroutine 打印堆栈跟踪。
* runtime:增加每次暂停的 GC 统计信息,修复 arm 架构上 reflect.call 的边界情况,在 panic 期间打印信号信息。
* 规范:明确 int 和 uint 具有相同大小。
* syscall:修正 OS X 上的 WSTOPPED,修正 GNU/Linux 抽象 Unix 域 sockaddr 的长度,修正 SockaddrUnix 的长度。
* tutorial:使 stdin、stdout、stderr 在 Windows 上工作。
* windows:实现异常处理(感谢 Hector Chu)。
2011-01-12
json、gob 和 template 包已发生变更,使用这些包的代码在此次发布后可能需要更新。它们将不再读取或写入未导出的 struct 字段。使用 json 或 gob 编组 struct 时,未导出的字段将被静默忽略。尝试将 json 或 gob 数据解组到未导出的字段将产生错误。从 template 访问未导出的字段将导致 Execute 函数返回错误。
Godoc 现在支持正则表达式全文搜索,此功能现已在 golang.org 上可用。
其他变更:
* arm:arm 优化器的初步实现。
* bytes.Buffer:修复 UnreadByte 中的错误。
* cgo:将 unsafe.Pointer 导出为 void*,修复枚举常量冲突,输出对齐修复(感谢 Gustavo Niemeyer)。
* crypto/block:标记为已弃用。
* crypto/openpgp:添加 error 和 armor 子包。
* crypto:新增 twofish 包(感谢 Berengar Lehr)。
* doc/spec:从规范中移除 Maxalign。
* encoding/line:新包,用于从 io.Reader 读取行。
* go/ast:修正 Index 和 TypeAssert 表达式的结束位置。
* gob:将 (en|dec)ode(Ui|I)nt 从函数改为方法。
* godefs:更好地处理枚举。
* gofmt:不尝试某些非法重写,重写器匹配仅适用于表达式。
* goinstall:对 cgo 包的初步支持(感谢 Gustavo Niemeyer)。
* hg:将 cgo/_cgo_* 添加到 .hgignore。
* http:修复 Redirect 中显示的文本。
* ld:修复 Mach-O 上导出的动态符号,允许将 Mach-O 符号导出到动态符号表。
* log:新增 exit 和 panic 方法。
* net:在 Windows 上使用 closesocket API 代替 CloseHandle(感谢 Alex Brainman)。
* netchan:为配合 gob 变更而将字段导出。
* os:为 *File 添加 Sync 方法,包装 syscall.Fsync。
* runtime/cgo:添加回调以支持 SWIG。
* runtime:如果 cgo 回调发生 panic,则恢复调度器栈位置。
* suffixarray:更快的创建算法(感谢 Eric Eisner)。
* syscall:修复 mksysnum_linux.sh(感谢 Anthony Martin)。
* time.NewTicker:当间隔 <= 0 时发生 panic。
* time:新增 AfterFunc 函数,用于在指定时间后调用函数(感谢 Roger Peppe),修复使用多个 Ticker 时的计时精度(感谢 Eoghan Sherry)。
2011-01-06
此版本包含多项修复与变更:* 构建:Make.pkg:为 cgo 使用已安装的 runtime.h。
* cgo:禁止使用 C.errno。
* crypto/cipher:修复 OCFB,使 NewCBCEncrypter 返回 BlockMode。
* 文档:6l:修复 -L 标志的文档说明,将 golanguage.ru 添加到外语文档列表,Effective Go:更好地解释重新 panic 的效果,更新 Effective Go 以反映模板 API 变更,更新贡献指南以要求在变更描述前添加前缀。
* encoding/binary:拒绝使用实现依赖大小的类型(感谢 Patrick Gavlin)。
* exp/evalsimple:修复对 s[:2] 等切片的处理(感谢 Sebastien Binet)。
* fmt:提高格式字符串处理的效率,规范化格式字符串的处理。
* gc:为复数常量的部分返回常量浮点值(感谢 Anthony Martin),将复数 /= 重写为 l = l / r(感谢 Patrick Gavlin),修复 &^= 运算。
* go/ast:提供完整的节点文本范围信息。
* gob:在某个容易混淆的地方生成更好的错误信息。
* godoc:修复 godoc -src 命令(感谢 Icarus Sparry)。
* goinstall:添加 -clean 标志(感谢 Kyle Lemons),添加 checkout 概念(感谢 Caine Tighe),修复针对 bzr 的 -u 选项(感谢 Gustavo Niemeyer)。
* http:允许响应状态行中的 Reason-Phrase 为空。
* io:修复 Copyn 的 EOF 处理。
* net:修复 Listener 的关闭操作(感谢 Michael Hoisie)。
* regexp:修复性能错误,使锚定搜索快速失败,修复前缀错误。
* runtime/cgo:修复 FreeBSD/amd64 上的 stackguard(感谢 Anthony Martin)。
* strconv:atof:添加 'E' 作为指数的有效标记(感谢 Stefan Nilsson),更新 ftoa 注释以说明 'E' 和 'G'。
* strings:修复 FieldsFunc 的描述(感谢 Roger Peppe)。
* syscall:修正 Linux Splice 定义,使 Access 的第二个参数一致为 uint32。
2010-12-22
本周发布内容较少。最重要的变更是一些悬而未决的 cgo 问题得到了解决。
* cgo:处理共享库中符号的引用。
* crypto/elliptic:添加序列化和密钥对生成功能。
* crypto/hmac:添加 HMAC-SHA256 支持(感谢 Anthony Martin)。
* crypto/tls:添加 ECDHE 支持("椭圆曲线 Diffie Hellman 临时密钥"),添加用于生成测试握手脚本的支持代码。
* darwin, freebsd:忽略写入失败(在 print, panic 期间)。
* exp/draw:移除 Border 函数。
* expvar:对 StringFunc 输出进行引用,与 String 输出一致。
* hash/crc64:修复 Sum 函数中的拼写错误。
* ld:允许指向 ELF .bss 符号的重定位,忽略 stab 符号。
* misc/cgo/life:修复并添加到构建。
* regexp:为 Regexp 添加 HasMeta、HasOperator 和 String 方法。
* suffixarray:实现了 FindAllIndex 正则表达式搜索。
* test/bench:在 regexp 加速后更新 regex-dna 的测试数据。
* time:对格式说明进行更详细的解释。
2010-12-15
已开始开发 crypto/cipher 包,以取代 crypto/block。
作为这些变更的一部分,rc4.Cipher 的 XORKeyStream 方法签名已从
XORKeyStream(buf []byte)
更改为
XORKeyStream(dst, src []byte)
以实现 cipher.Stream 接口。如果你使用 crypto/block,待其完成后需要切换到 crypto/cipher。
smtp 包的 StartTLS 现在接受 *tls.Config 参数。
reflect 包的 ArrayCopy 已重命名为 Copy。新增了 Append 和 AppendSlice 函数。
print/println 引导函数现在写入标准错误。要写入标准输出,请使用 fmt.Print[ln]。
Go 工具分发包中新增了一个工具 govet。Govet 是一个用于 Go 程序的静态检查器。目前以及可预见的未来,它只检查 print 调用的参数。
用于为 C 代码编写 Go 绑定的 cgo 工具已更改,不再使用存根 .so 文件(如 cgo_stdio.so)。使用标准 Makefile 的基于 cgo 的包应能无需任何更改即可构建。任何其他构建机制都需要进行更新。
C 和 Go 编译器(6g, 6c, 8g, 8c, 5g, 5c)现在根据结构体包含字段的最大对齐要求来对齐结构体;此前它们是按字边界对齐的。这可能会破坏那些试图混合使用 C 和 Go 的非基于 cgo 的代码。
NaCl 支持已被移除。最近的链接器更改在一个月前破坏了 NaCl 支持,并且目前没有已知的用户在使用它。
如有需要,NaCl 代码可以从版本库历史记录中恢复。
* 5g/8g, 8l, ld, prof:修复 32 位值的输出问题(感谢 Eoghan Sherry)。
* [68]l 和 runtime:为接口和 goroutine 提供 GDB 支持。
* 6l, 8l:支持链接 ELF 和 Mach-O 格式的目标文件。
* 所有:简化第二个变量未使用的双变量 range 语句(感谢 Ryan Hitchman)。
* arm:更新软浮点支持。
* codereview:未使用时保持安静(感谢 Eoghan Sherry)。
* compress/flate:实现 Flush,等同于 zlib 的 Z_SYNC_FLUSH。
* crypto/tls:在证书生成示例中使用 rand.Reader(感谢 Anthony Martin)。
* dashboard:修复项目标签过滤器。
* debug/elf, debug/macho:添加 ImportedLibraries、ImportedSymbols。
* doc/go_mem:goroutine 退出并非特殊事件。
* event.go:gocheck 引发的另一个打印问题。
* gc:错误修复,
为不完整的 chan 类型添加语法错误(感谢 Ryan Hitchman)。
* go/ast:修复 ast.Walk。
* gob:文档说明了值编码中使用的字节数,
修复发送零长度顶层 slice 和 map 的错误,
Register 应使用原始类型,而非间接类型。
* godashboard:支持提交包含非 ASCII 字符名称的项目(感谢 Ryan Hitchman)。
* godefs:防护包含填充字段的结构体。
* godoc:添加文本搜索功能,使用 -fulltext 标志启用。
* gofmt:将 "x, _ = range y" 简化为 "x = range y"。
* gopack:允许 .a 文件中包含 ELF/Mach-O 对象,而无需清除 allobj。
* go/token,scanner:修复注释以使 godoc 对齐正确。
* govet:出错时继续处理下一个文件(感谢 Christopher Wedgwood)。
* html:改进解析功能。
* http:ServeFile 处理部分请求的 Range 头。
* json:检查无效的 UTF-8。
* ld:允许 .o 文件中不包含符号,
读取 ELF 目标文件,
读取 Mach-O 目标文件。
* math:将 float64 偏置常量从 1022 更改为 1023(感谢 Eoghan Sherry),
将 MinFloat 常量重命名为 SmallestNonzeroFloat。
* nm:静默忽略 .a 文件中的 .o 文件。
* os:修复 RemoveAll 的测试。
* os/inotify:新包(感谢 Balazs Lecz)。
* os:使 MkdirAll 支持符号链接(感谢 Ryan Hitchman)。
* regexp:速度提升约 30%;同时简化了方括号的代码。
* runtime/linux/386:将 FPU 设置为 64 位精度。
* runtime:移除地址 0 处的防御性映射。
* suffixarray:添加 Bytes 函数。
* syscall:为 linux/386、linux/amd64 添加网络接口常量(感谢 Mikio Hara)。
* syscall/windows:限制 OpenProcess() 的访问权限参数,
从错误消息中移除 \r 和 \n(感谢 Alex Brainman)。
* test/bench:修复 timing.sh(感谢 Anthony Martin)。
* time:修复 Ticker 中的错误:使用 channel 而非内存进行关闭。
* token/position:提供 FileSet.File,提供文件迭代器。
* xml:禁止无效的 Unicode 代码点(感谢 Nigel Kerr)。
2010-12-08
此版本包含一些包更改。如果您使用 crypto/tls 或 go/parser 包,您的代码可能需要更改。
crypto/tls 包的 Dial 函数现在接受一个额外的 *Config 参数。大多数使用场景将传递 nil 以获得与之前相同的默认行为。
详情请参阅文档:
http://golang.org/pkg/crypto/tls/#Config
http://golang.org/pkg/crypto/tls/#Dial
go/parser 包的 ParseFile 函数现在接受一个 *token.FileSet 作为其第一个参数。这是一个指向用于存储位置信息的数据结构的指针。如果您不关心位置信息,可以传递 "token.NewFileSet()"。详情请参阅文档:
http://golang.org/pkg/go/parser/#ParseFile
此版本还将专利授权文本从 LICENSE 文件拆分到单独的 PATENTS 文件中,并使其更接近 WebM 授权。这些澄清是应 Fedora 项目的要求做出的。
其他变更:
* [68]l:为内置结构化类型生成调试信息,在 gdb 中实现美观打印。
* 8l:在 Windows PE 的导入表中添加 dynimport(感谢 Wei Guangjing)。
* 8l, runtime:修复 Plan 9 386 构建(感谢 Yuval Pavel Zholkover)。
* 所有:修复对 Printf 等的错误调用。
* bufio:使 Reader.Read 实现 io.Reader 语义(感谢 Roger Peppe)。
* build:允许通过 HOST_AR 指定归档器(感谢 Albert Strasheim)。
* bytes:添加 Buffer.UnreadRune、Buffer.UnreadByte(感谢 Roger Peppe)。
* crypto/tls:修复证书生成示例的构建(感谢 Christian Himpel)。
* doc/install:描述 GOHOSTOS 和 GOHOSTARCH。
* errchk:接受多个源文件(感谢 Eoghan Sherry)。
* exec.LookPath:返回 os.PathError 而非 os.ENOENT(感谢 Michael Hoisie)。
* flag:修复布尔错误报告中的格式错误,
处理对 flag.Parse 的多次调用。
* fmt:添加用于代码点值的标准 Unicode 表示的 %U 格式。
* gc:修复匿名接口的方法偏移量(感谢 Eoghan Sherry),
在 import . 中跳过未定义的符号(感谢 Eoghan Sherry)。
* go/scanner:移除 Tokenize - 仅在测试中使用。
* gobuilder:添加 buildroot 命令行标志(感谢 Devon H. O'Dell)。
* html:反转义数字实体(感谢 Ryan Hitchman)。
* http:添加 EncodeQuery,用于构造查询字符串的辅助函数。
* ld:修复 64 位 reflect 值的 dwarf 解码(感谢 Eoghan Sherry)。
* math:提高 Exp2 的精度(感谢 Eoghan Sherry)。
* runtime:添加 Goroutines(感谢 Keith Rarick)。
* sync:armv5 的小命名修复(感谢 Dean Prichard)。
* syscall, net:在 Linux 上添加 Recvmsg 和 Sendmsg(感谢 Albert Strasheim)。
* time:使 After 使用更少的 goroutine 和宿主进程(感谢 Roger Peppe)。
2010-12-02
此版本中的几个包更改可能要求您更新代码,如果您使用 bytes、template 或 utf8 包的话。在所有情况下,任何过时的代码将无法编译,而不是行为错误。**bytes** 包已更改。其 `Add` 和 `AddByte` 函数已被移除,因为它们的功能已由最近引入的内置函数 `append` 提供。任何使用它们的代码都需要进行修改:
```go
s = bytes.Add(s, b) -> s = append(s, b...)
s = bytes.AddByte(b, c) -> s = append(s, b)
s = bytes.Add(nil, c) -> append([]byte(nil), c)
```
**template** 包已更改。如果你的代码调用了 `HTMLFormatter` 或 `StringFormatter` 函数,或者实现了自己的格式化器函数,则需要更新代码。格式化器类型的函数签名已更改为:
```go
func(wr io.Writer, formatter string, data ...interface{})
```
以允许向格式化器传递多个参数。无需更新模板。有关示例,请参阅变更记录:
http://code.google.com/p/go/source/detail?r=2c2be793120e
此模板变更允许为格式化器实现多变量实例化。之前可以使用
`{field}`
或
`{field|formatter}`
现在还可以使用
`{field1 field2 field3}`
或
`{field1 field2 field3|formatter}`
并且这些字段将作为连续参数传递给格式化器,类似于 `fmt.Print` 的方式。
**utf8** 包已更改。`EncodeRune` 的参数顺序已反转,以符合“目标优先”的约定。任何使用 `EncodeRune` 的代码都需要更新。
其他变更:
* [68]l: 修正了全局变量和数组范围的 dwarf 位置信息。
* big: 修复了当 b < 0 时 `(*Rat) SetFrac64(a, b)` 的问题(感谢 Eoghan Sherry)。
* compress/flate: 修复了注释中的拼写错误(感谢 Mathieu Lonjaret)。
* crypto/elliptic: 使用雅可比变换以获得更好的性能。
* doc/code.html: 修正了对 "gomake build" 的引用(感谢 Anschel Schaffer-Cohen)。
* doc/roadmap: 更新了 gdb 状态。
* doc/spec: 修正了一些遗漏和拼写错误。
* doc: 一些拼写错误修正(感谢 Peter Mundy)。
* exp/eval: 针对 parser.ParseFile API 变更的构建修复(感谢 Anschel Schaffer-Cohen)。
* fmt: Scan 接受 Inf 和 NaN,允许使用 "% X" 以及 "% x"。
* go/printer: 保留函数参数列表中的换行符(感谢 Jamie Gennis)。
* http: 在下一个请求前消耗请求体。
* log: 确保写入是原子操作(感谢 Roger Peppe)。
* path: Windows 上 Split 的支持(感谢 Benny Siegert)。
* runtime: 修复 SysFree 以在 Windows 上真正释放内存(感谢 Alex Brainman),为所有 C 结构体添加了并行的 Go 定义。
* sort: 避免枢轴计算溢出,将 quickSort 的栈深度减少到 lg(n)(感谢 Stefan Nilsson)。
* strconv: 支持对 Inf 和 NaN 进行 Atof 转换。
---
**2010-11-23**
本次发布包含一个与上一次发布中引入的 `sort.Search` 函数不兼容的包更改。有关详情以及如何修改代码的示例,请参阅变更记录:
http://code.google.com/p/go/source/detail?r=102866c369
* build: 在 6c 中自动 #define _64BIT。
* cgo: 在包装函数中的参数名后打印所需空格。
* crypto/cipher: 新包,用于替换 crypto/block(感谢 Adam Langley)。
* crypto/elliptic: 新包,实现了素数域上的椭圆曲线(感谢 Adam Langley)。
* crypto/x509: 策略 OID 支持和修复(感谢 Adam Langley)。
* doc: 添加了指向代码演练的链接,修复了 recover() 文档(感谢 Anschel Schaffer-Cohen),说明了如何为命令编写 Makefile。
* exec: 在 Windows 上启用更多测试(感谢 Alex Brainman)。
* gc: 在复合字面量的类型检查中支持可调整的哈希码(感谢 vskrap, Andrey Mirtchovski, 和 Eoghan Sherry)。
* gc: 为通道发送中错误的类型提供更好的错误信息(感谢 Anthony Martin)。
* godoc: relativePath 的 bug 修复,计算 godoc 观察下所有文件系统的搜索索引,使用正确的时间戳指示搜索结果的准确性。
* index/suffixarray: 使用 sort.Search。
* net: 添加 ReadFrom 和 WriteTo 的 Windows 版本(感谢 Wei Guangjing)。
* reflect: 移除 Get 方法中不必要的类型转换。
* rpc: 添加 RegisterName 以允许覆盖默认类型名。
* runtime: 释放 Windows CommandLineToArgv 分配的内存(感谢 Alex Brainman)。
* sort: 简化 Search(感谢 Roger Peppe)。
* strings: 添加 LastIndexAny(感谢 Benny Siegert)。
---
**2010-11-10**
“生日”版本在 sort 包中引入了新的搜索功能。它采用了一种非常规但通用且易于使用的方法来搜索任意可索引的排序数据。详情请参阅文档:
http://golang.org/pkg/sort/#Search
ARM 平台移植现在使用了硬件浮点单元 (VFP)。它仍有一些小问题,主要涉及无符号整数和浮点值之间的转换,但正在趋于稳定。
此外,还有许多较小的修复和更新:
* 6l: 生成带有消歧后缀的 dwarf 变量名。
* container/list: 使 Remove 返回被移除元素的 Value,这使得移除第一个或最后一个元素更加容易。
* crypto: 添加 cast5(默认的 PGP 密码),将块密码方法切换为“目标优先”。
* crypto/tls: 使用池构建进行证书检查。
* go/ast: 将嵌入的 token.Position 字段更改为命名字段(为不同的位置表示做准备)。
* net: 提供对文件描述符的公共访问(感谢 Keith Rarick)。
* os: 添加 Expand 函数以评估环境变量。
* path: 添加 Glob(感谢 Benny Siegert)。
* runtime: memequal 优化(感谢 Graham Miller),为所有外部符号添加 "runtime·" 前缀以避免与外部 C 库链接时冲突。
---
**2010-11-02**
本次发布包含一项语言变更:新的内置函数 `append`。`append` 使得扩展切片变得更加简单。详情请参阅规范:
http://golang.org/doc/go_spec.html#Appending_and_copying_slices其他变更:
* 8l: PE 生成修复(感谢 Alex Brainman)。
* doc: Effective Go 文档更新:添加了 append 相关内容,并对 "..." 参数做了简要说明。
* build: 调整了 Makefile 变量。
* codereview: 修复了在 Python 2.7 中的同步和下载问题(感谢 Fazlul Shahriar)。
* debug/pe, cgo: 添加了 Windows 支持(感谢 Wei Guangjing)。
* go/ast: 添加了 `Inspect` 函数,便于无需访问者即可轻松检查 AST。
* go/printer: 不再移除控制语句中以类型名开头的复合字面量周围的括号。
* go/scanner: 错误修复、修订以及更多测试。
* gob: 多处修复和文档更新。
* godoc: 错误修复(引入自修订 3ee58453e961)。
* gotest: 以 `gofmt` 不会改变的方式打印空的基准测试列表。
* http server: 正确响应 304 NotModified(感谢 Michael Hoisie)。
* kate: 更新了内置函数列表(感谢 Evan Shaw)。
* libutf: 更新到 Unicode 5.2.0 以匹配 pkg/unicode(感谢 Anthony Martin)。
* misc/bbedit: 更新了内置函数列表(感谢 Anthony Starks)。
* misc/vim: 更新了内置函数列表。
* mkrunetype: 安装了一个 Makefile 并稍作调整以便构建。
* netchan: 修复了锁相关的 bug。
* pidigits: 小改进(感谢 Evan Shaw)。
* rpc: 修复了客户端死锁 bug。
* src: 在适当的地方使用 `append`(通常代替 vector)。
* strings: 添加了 `Contains` 辅助函数(感谢 Brad Fitzpatrick)。
* syscall: 为 Linux 添加了 SIO 常量(感谢 Albert Strasheim),为 Windows 添加了 `Stat(path)` 函数(感谢 Alex Brainman)。
* test/ken/convert.go: 添加了类型转换的严苛测试。
* testing: 添加了 `Benchmark`(感谢 Roger Peppe)。
2010-10-27
*** 此次发布更改了 gob 包使用的编码方式。
如果您在磁盘上存储了 gob 数据,请参阅下文。***
ARM 移植 (5g) 现已通过所有测试。优化器尚未启用,浮点运算完全通过软件模拟。相关缺陷的修复工作正在进行中。
数组、切片和映射的复合字面量语法已得到简化。在数组、切片或映射类型的复合字面量内,如果其元素本身就是复合字面量,且该元素的类型与外层字面量的元素类型相同,则可以省略类型。例如,以下表达式:
[][]int{[]int{1, 2, 3}, []int{4, 5}}
map[string]Point{"x": Point{1.5, -3.5}, "y": Point{0, 0}}
可以简化为:
[][]int{{1, 2, 3}, {4, 5}}
map[string]Point{"x": {1.5, -3.5}, "y": {0, 0}}
当使用新的 `-s` 标志调用时,`Gofmt` 可以自动进行此类简化。
内置函数 `copy` 现在可以将字节从字符串值复制到 `[]byte`。像这样的代码(对于 `[]byte b` 和 `string s`):
for i := 0; i < len(s); i++ {
b[i] = s[i]
}
可以重写为:
copy(b, s)
gob 包现在可以编码和解码包含通过新 `Register` 函数预先注册类型的接口值。这些更改需要对传输格式进行不向后兼容的更改。旧版本写入的数据将无法用新版本读取,反之亦然。(为避免此类情况再次发生,本次变更已采取措施。)我们不了解有谁使用 gob 创建永久性数据,但如果您这样做并需要转换帮助,请告知我们,并且暂不要更新到此版本。我们将协助您转换数据。
其他变更:
* 5g, 6g, 8g: 为字符串索引生成代码,而不是调用函数。
* 5l, 6l, 8l: 引入子符号。
* 6l/8l: 全局和局部变量及类型信息。
* Make.inc: 删除了不必要的 `-fno-inline` 标志以使 `gcc` 输出更简洁。
* arm: 精确的 float64 软件浮点,错误修复。
* big: ARM 汇编,更快的软件 mulWW、divWW。
* build: 仅在需要时才打印“You need to add foo to PATH”。
* container/list: 修复了 `Remove` bug,并使用指向自身的指针作为标识符。
* doc: 在浏览器标题栏显示页面标题,更新路线图。
* encoding/binary: 为 `LittleEndian`, `BigEndian` 赋予具体类型。
* go/parser: 调用 `ParseExpr()` 时消费自动插入的分号。
* gobuilder: 将 `GOHOSTOS` 和 `GOHOSTARCH` 传递给构建过程,将构建和基准测试日志写入磁盘。
* goinstall: 遇到 cgo 包时显示有用信息,修复了多包名测试(感谢 Fazlul Shahriar)。
* gotest: 生成格式正确(经 `gofmt` 处理)的 `_testmain.go`。
* image/png: 调色板编码速度提升约 25%(感谢 Brad Fitzpatrick)。
* misc: 更新 Python 脚本以指定 `python2`,因为现在 `python` 命令指向 Python 3。
* net: 修复了 `Dial` 的注释,提及 unix/unixgram。
* rpc: 暴露 `Server` 类型以允许多个 RPC Server 实例。
* runtime: 在 panic 中打印未知类型。
* spec: append 内置函数(尚未实现)。
* src: 运行 `gofmt -s -w src misc`。更新代码以使用从字符串复制。
* test/bench: 更新了性能数据。
* websocket: 修复了短读取问题。
2010-10-20
此次发布移除了 `log` 包中已弃用的函数。
尚未更新以使用新接口的代码将无法编译。
详情请参阅之前的发布说明:
http://golang.org/doc/devel/release.html#2010-10-13
同时包含了链接器的重大改进。它现在更快、使用更少内存,并且更易并行化(但尚未并行)。
`nntp` 包已从标准库中移除。
其新家位于 Google Code 上的 nntp-go 项目:
http://code.google.com/p/nntp-go
您可以使用 `goinstall` 安装它:
goinstall nntp-go.googlecode.com/hg/nntp
并像这样在代码中导入:
import "nntp-go.googlecode.com/hg/nntp"
其他更改:
* 6g:避免过大的立即数常量。
* 8l, runtime:初步支持 Plan 9(感谢 Yuval Pavel Zholkover)。
* 6l, 8l:导出调试信息(DWARF格式)的进一步改进。
* arm:代码生成修复。除了浮点代码外,大多数测试现已通过。
* big:添加随机数生成(感谢 Florian Uekermann)。
* gc:追踪标识符的实际真实类型,报告移位操作必须为无符号整数,以及允许在 select 语句的接收操作中进行隐式类型转换。
* goplay:修复以在 Windows 下运行(感谢 Yasuhiro Matsumoto)。
* http:发送 HTTP/1.0 请求后不关闭连接。
* netchan:添加新方法 Hangup 以终止通道上的传输。
* os:修改 TestForkExec 使其可在 Windows 上运行(感谢 Yasuhiro Matsumoto)。
* runtime:不允许 select 操作分割栈。
* syscall/arm:修正 64 位系统调用参数。
2010-10-13
此版本包括对 log 包的更改、移除 exp/iterable 包、两个新工具(gotry 和 goplay)、一处小语言变更以及许多其他更改和修复。如果您使用了 log 或 iterable 包,您需要修改您的代码。
log 包已更改。Logger 现在只有一个输出,并且默认输出到标准错误。名称也已更改,不过旧名称仍然受支持。但它们将在下一个版本中删除,因此如果可能的话,最好现在就更新。对于大多数用途,您只需进行以下替换:
log.Stderr -> log.Println 或 log.Print
log.Stderrf -> log.Printf
log.Crash -> log.Panicln 或 log.Panic
log.Crashf -> log.Panicf
log.Exit -> log.Exitln 或 log.Exit
log.Exitf -> log.Exitf (无更改)
调用 log.New() 时必须去掉第二个参数。
此外,具有 exit 或 panic 属性的自定义 logger 将需要重新设计。完整详情请参见变更描述:
http://code.google.com/p/go/source/detail?r=d8a3c7563d
语言变更是,指向接口值的指针不再自动解引用。指向接口值的指针更常见于初学者的错误,而非正确的代码。
包 exp/iterable 已被移除。这是一个有趣的实验,但它鼓励编写低效的代码,并且其效用已经过时。
新增工具:
* gotry:一个关于反射的练习,也是一个不寻常的工具。运行 'gotry' 获取详情。
* goplay:Go Playground 的独立版本。参见 misc/goplay。
其他更改:
* 6l:Mach-O 修复,以及修复以兼容 OS X 的 nm/otool(感谢 Jim McGrath)。
* [568]a:修正语句的行号。
* arm:代码生成和运行时修复,为新的 reflect.call 调整 recover,并在网络修复后启用 6 个额外测试。
* big:修复 Rat.FloatString 中的恐慌并正确舍入(感谢 Anthony Martin)。
* build: Make.cmd: 移除 $(OFILES)(感谢 Eric Clark),Make.pkg: 安装新 .so 前先删除旧的,添加 GOHOSTOS 和 GOHOSTARCH 环境变量。
* crypto/tls:针对证书问题提供更好的错误信息,使 SetReadTimeout 生效。
* doc:添加悉尼大学视频,添加 The Expressiveness of Go 演讲。
* exp/draw/x11:支持除 "The X.Org Foundation" 以外的 X11 供应商。
* expvar:添加 (*Int).Set 方法(感谢 Sam Thorogood)。
* fmt:添加 Errorf 辅助函数,允许对 []byte 使用 %d。
* gc:当长度不同时进行 O(1) 字符串比较,各种错误修复。
* http:如果请求头行过长,返回正确的错误。
* image:添加 image.Tiled 类型,Plan 9 中 repl 位的 Go 等效物。
* ld:对错误的行号信息不再那么挑剔。
* misc/cgo/life:为新的切片规则进行修复(感谢 Graham Miller)。
* net:允许在 DNS 名称中使用下划线 _。
* netchan:测试时先导入再导出,并清零请求以确保正确的 gob 解码(感谢 Roger Peppe)。
* os:使测试能在 Windows 上运行(感谢 Alex Brainman)。
* runtime:错误修复:序列化 mcache 分配,正确迭代大型映射值,更快的 strequal 和 memequal(感谢 Graham Miller),修复回溯中的参数转储,修复小型构建。
* smtp:新增包(感谢 Evan Shaw)。
* syscall:为 linux/386 和 linux/amd64 添加 sockaddr_ll 支持(感谢 Mikio Hara),为通过 UNIX 套接字发送的 SCM_CREDENTIALS 添加 ucred 结构体(感谢 Albert Strasheim)。
* syscall:为 Windows 实现 WaitStatus 和 Wait4()(感谢 Wei Guangjing)。
* time:添加 After 函数。
* websocket:在 Windows 上启用测试(感谢 Alex Brainman)。
2010-09-29
此版本包含一些小的语言变更和一些重要的包更改。如果您使用了 ...T 参数或 http 包,您可能需要修改代码。
转发 ...T 参数的语义和语法已更改。
func message(f string, s ...interface{}) { fmt.Printf(f, s) }
这里,s 的类型是 []interface{},包含传递给 message 的参数。
在此语言变更之前,编译器能识别当函数调用将一个 ... 参数传递给另一个相同类型的 ... 参数时,并直接将其视为参数列表传递。但这意味着您无法控制是否将切片作为单个参数传递,也无法将普通切片作为 ... 参数传递,而这有时很方便。此更改通过在调用时多输入几个字符的方式,为您提供了这种控制能力。
如果您希望提升到 ...,请在参数后附加 ...:
func message(f string, s ...interface{}) { fmt.Printf(f, s...) }
如果不加 ...,s 将作为一个类型为 []interface{} 的单个参数传递给 Printf。坏消息是您可能需要修改部分代码,但编译器会检测到这种情况并发出警告。同时,http.Handler 和 http.HandlerFunc 类型已经改变。原先 http 处理函数接受 *http.Conn 参数,现在改为接受接口类型 http.ResponseWriter。ResponseWriter 实现了与 *Conn 相同的方法,因此大多数情况下只需修改处理函数第一个参数的类型签名。详见:
http://golang.org/pkg/http/#Handler
utf8 包新增了 String 类型,可以通过 rune 高效索引 utf8 字符串(先前需要进行昂贵的 []int 转换)。详见:
http://golang.org/pkg/utf8/#String
编译器现在会自动在文件末尾插入分号(如果未检测到)。这导致 Go 源代码文件不再要求末尾必须有换行符。
其他变更:
* 6prof:更精确的使用说明
* archive/zip:新增用于读取 Zip 文件的包
* arm:修复代码生成,新增 10 项包测试通过
* asn1:保持与 json 的接口一致性
* bufio.UnreadRune:修复 EOF 处的错误
* build:清除 GREP_OPTIONS 等自定义变量,静默 ubuntu gcc 生成的警告,编译库文件时使用完整路径
* bytes、strings:将 lastIndexFunc 改为使用 DecodeLastRune(感谢 Roger Peppe)
* doc:补充并整合非英语文档引用,将常见问题整合到 go_faq.html 单个文件中,更新以适配新 http 接口
* fmt/Printf:记录并优化无效格式生成的错误信息
* gc:允许 select case expr = <-c 模式,消除方法表中的重复项,修复 reflect table 的方法接收者,改进 x \= 0 的错误信息
* go/scanner:将 EOF 视为换行符以实现分号插入
* gofmt:稳定性改进
* gotest:保留 _testmain.go 供 "make clean" 清理
* http:正确转义 URL 各部分,支持 HTTP/1.0 Keep-Alive
* json:不再写入未导出字段
* libcgo:不为 NaCl 构建,为 windows 386 设置线程本地存储的 g、m 值(感谢 Wei Guangjing)
* math:修复 Ilogb 和 Logb 的误差错误(感谢 Charles L. Dorian)
* misc/dashboard/builder:基准测试后移除构建文件
* nacl:更新新 SDK 的使用说明
* net:在 ip 套接字上启用 v4-over-v6,修复 DialIP 崩溃问题
* os:检查 windows Readdir 的参数有效性(感谢 Peter Mundy)
* runtime:为安全起见添加空页 mmap 映射,修正 SysFree 中的统计信息,修复 unwindstack 崩溃
* syscall:添加 IPPROTO_IPV6 和 IPV6_V6ONLY 常量以修复 nacl 和 windows 构建,在 Linux 上添加 inotify 支持(感谢 Balazs Lecz),修复 syscall_bsd 中的 socketpair,修复 windows 的 IPV6_V6ONLY 值(感谢 Alex Brainman),实现 windows 版 Utimes(感谢 Alex Brainman),使 mkall.sh 适用于 nacl
* test:新增导致 gccgo 错误报错的测试用例
* utf8:添加 DecodeLastRune 和 DecodeLastRuneInString(感谢 Roger Peppe)
* xml:允许 CDATA 标签内使用实体(感谢 Dan Sinclair)
2010-09-22
此版本包含新功能包,以及大量错误修复和变更。同时改进了对 arm 和 nacl 平台的支持。
* 5l:避免列表中使用固定缓冲区
* 6l、8l:清理 ELF 代码,修复 NaCl 支持
* 6l/8l:生成 DWARF 帧信息
* Make.inc:使 GOOS 检测在 windows 上正常工作(感谢 Alex Brainman)
* build:修复原生 arn 构建问题,使 all.bash 可在 Ubuntu ARM 上运行
* cgo:错误修复,显示前导 gcc 错误信息(感谢 Eric Clark)
* crypto/x509、crypto/tls:改进根证书匹配并识别 CA 标志
* crypto:修复证书验证
* doc:可变宽度布局
* env.bash:修复路径中含空格时的构建问题(感谢 Alex Brainman)
* exp/4s、exp/nacl/av:同步至最新的 exp/draw 变更
* exp/draw/x11:鼠标位置改用有符号整数
* exp/nacl/av:颜色值最大范围调整为 1<<16-1 而非 1<<32-1
* fmt:支持使用 '*' 指定宽度或精度(感谢 Anthony Martin)
* gc:改进静态初始化,确保路径名规范化
* gob:增强解码非结构体数据时的结构体处理鲁棒性
* gobuilder:添加 -cmd 参数支持用户指定构建命令,添加 -rev= 参数构建特定版本后退出,修复导致旧版本重复构建的错误
* godoc:将默认过滤文件名改为 "",避免使用二次算法过滤路径,为目录列表显示"最后更新"信息
* http:新增重定向测试,URLEscape 现在按照 RFC 标准转义所有保留字符
* nacl:修复零长度写入
* net/dict:正确解析响应(感谢 Fazlul Shahriar)
* netchan:添加交叉连接测试,处理通道关闭,提供 Importer.Errors() 方法恢复协议错误
* os:使 Open() 的 O_APPEND 标志在 windows 上生效(感谢 Alex Brainman),使 RemoveAll() 在 windows 上工作(感谢 Alex Brainman)
* pkg/Makefile:禁用 netchan 测试以修复 windows 构建(感谢 Alex Brainman)
* regexp:删除 Iter 方法
* runtime:改进向 nil 通道发送数据时的 panic 提示
* strings:修复 LastIndexFunc 的小错误(感谢 Roger Peppe)
* suffixarray:新增基于后缀数组的索引创建包
* syscall:在 linux amd64 上为 syscall.Gettimeofday 和 .Time 使用 vsyscall
* test:修复 NaCl 构建
* windows:通过使用 127.0.0.1 修复 netchan 测试
2010-09-15
此版本包含语言变更:子切片的下界现在可以省略,此时默认值为 0。
例如,s[0:10] 可以简写为 s[:10],s[0:] 可以简写为 s[:]。
此版本还包含针对 ARM 架构的重要错误修复,以及以下修复和变更:
* **5g:** 修复寄存器分配缺陷。
* **6c, 8c:** 在 `-S` 输出中显示行号。
* **6g, 6l, 8g, 8l:** 将只读数据移至文本段。
* **6l, 8l:** 使 etext 准确;引入 rodata、erodata。
* **arm:** 修复构建缺陷。
* 在 OS X 交叉编译期间构建 libcgo
* 移除对已删除文件 `syntax/slice.go` 的引用
* 使用正确的 stat 系统调用
* 解决 5g 中的寄存器分配器缺陷
* **bufio:** 添加 `UnreadRune`。
* **build:** 避免不良的环境交互。
* 修复 tiny 的构建
* 在 Windows 上生成、清理 `.exe` 文件(感谢 Joe Poirier)
* 测试 `_WIN32` 而非 `_MINGW32`(感谢 Joe Poirier)
* 兼容 GNU Make 3.82(感谢 Jukka-Pekka Kekkonen)
* **cgo:** 在生成的头文件中添加 `uintptr` 的 `typedef`。
* 为返回 `const` 指针的 C 调用消除警告。
* **codereview:** 在检查 CONTRIBUTORS 之前将电子邮件地址转换为小写。
* **crypto/tls:** 不要从 `Close()` 返回错误。
* **doc/tutorial:** 为切片更改更新内容。
* **exec:** 为 unix/windows 分离 `LookPath` 实现(感谢 Joe Poirier)。
* **exp/draw/x11:** 允许在用户关闭窗口时干净地关闭。
* **exp/draw:** 将目标矩形裁剪到图像边界。
* 绘制重叠的 `image.RGBAs` 的快速路径。
* 修复为源点和掩码点计算 `pt.Min` 的双重计数问题。
* 重新引入 `MouseEvent.Nsec` 时间戳。
* 将 `Context` 重命名为 `Window`,并添加 `Close` 方法。
* **exp/debug:** 初步支持 `copy` 函数(感谢 Sebastien Binet)。
* **fmt.Fscan:** 使用 `UnreadRune` 在调用间保留数据。
* **gc:** 改进错误消息中命名常量和函数字面量的显示。
* 修复许多缺陷。
* 修复使用 `//line` 指令时的行号打印问题。
* 修复 Windows 上的符号表生成(感谢 Alex Brainman)。
* 实现规范变更 33abb649cb63 中的比较规则。
* 实现新的切片规范(感谢 Scott Lawrence)。
* 使字符串 `x + y + z + ... + w` 的连接高效。
* 为 `ATEXPT` 提供更准确的行号。
* 移除 `&[10]int` 到 `[]int` 的转换。
* **go-mode.el:** 修复 `chan` 类型的高亮显示(感谢 Scott Lawrence)。
* **godoc:** 改进对用户提供的路径下目录树的支持。
* 使用正确的延迟时间(缺陷修复)。
* **gofmt, go/printer:** 正确更新内部估计位置。
* **goinstall:** 当包名以 `http://` 开头时发出警告(感谢 Scott Lawrence)。
* **http:** 对照主机名检查 https 证书。
* 不缓存 `CanonicalHeaderKey`(感谢 Jukka-Pekka Kekkonen)。
* **image:** 将 `ColorImage` 的最小点从 `(0, 0)` 更改为 `(-1e9, -1e9)`。
* 引入 `Intersect` 和 `Union` 矩形方法。
* **ld:** 处理包路径中带引号的空格(感谢 Dan Sinclair)。
* **libcgo:** 修复 NaCl 构建。
* **libmach:** 修复在 arm 主机上的构建。
* 修复与 Linux 的新线程竞争。
* **math:** 使可移植的 `Tan(Pi/2)` 返回 `NaN`。
* **misc/dashboard/builder:** gobuilder,一个持续构建客户端。
* **net:** 禁用在 Windows 上不可用的函数测试(感谢 Alex Brainman)。
* **netchan:** 使 `-1` 表示无限制,与宣传一致。
* **os, exec:** 将 `argv0` 重命名为 `name`。
* **path:** 添加 `IsAbs`(感谢 Ivan Krasin)。
* **runtime:** 修复回溯中的缺陷。
* 修复 amd64 上的崩溃跟踪。
* 修复 Windows 构建(感谢 Alex Brainman)。
* 使用手动栈进行垃圾回收。
* **spec:** 添加省略索引表达式的切片示例。
* 允许省略切片的下界(感谢 Scott Lawrence)。
* **syscall:** 修复 Windows `Gettimeofday`(感谢 Alex Brainman)。
* **test(arm):** 禁用 `zerodivide.go`,因为编译失败。
* **test(windows):** 禁用导致构建失败的测试(感谢 Joe Poirier)。
* **test/garbage/parser:** 与最近的解析器变更同步。
* **test:** 添加 `//line` 的测试。
* 使 gccgo 认为变量可能改变。
* 识别 gccgo 错误消息。
* 减少 `chan/nonblock.go` 中的竞态条件。
* 在测试 malloc 数量之前运行垃圾收集器。
* **websocket:** 添加对安全 WebSocket 的支持(感谢 Jukka-Pekka Kekkonen)。
* **windows:** 禁用未实现的测试(感谢 Joe Poirier)。
2010-09-06
此版本包含对 /test 目录下超过100个文件的语法现代化更新,以及以下新增、变更和修复内容:
* 6l/8l:在 macho 格式中生成 DWARF 调试信息。
* 8g:对负浮点数使用 FCHS 指令而非 FMUL。
* 8l:在 ELF 格式中生成 DWARF 调试信息,
禁止在 Windows PE 中生成 DWARF(感谢 Alex Brainman)。
* big:新增 RatString 方法,进行了一些简化。
* build:根据需要创建 bin 和 pkg 目录;从 hg 中移除,
删除 Make.386、Make.amd64、Make.arm(已被 Make.inc 淘汰),
修复 cgo 在 -j2 下的构建问题,
让 pkg/Makefile 统一协调 Go 命令的构建,
在 Make.pkg 中不再使用 quietgcc,
移除了更多对 GOBIN 和 GOROOT 的引用(感谢 Christian Himpel)。
* codereview:修复 Mercurial 1.6.3 的上传问题(感谢 Evan Shaw),
统一缩进,删除无用代码,
修复标准 hg 命令挂起问题,
任务执行超过30秒时打印状态,
在功能不可用时真正禁用 codereview,
并行上传文件(大型变更集的速度提升5倍)。
* crypto/hmac:使 Sum 方法具有幂等性(感谢 Jukka-Pekka Kekkonen)。
* doc:添加更多德语文档链接,
在 io2010 balance 示例中添加轮询标志,
修复 Constants 子章节示例中的一个错误(感谢 James Fysh),
为验证 HTML 进行了多项更改(感谢 Scott Lawrence)。
* fmt:删除关于 Sprint* 返回值的错误描述。
* gc:适应 FreeBSD 构建器上运行的 bison 版本,
修复虚假的语法错误。
* go/doc:使用正确的 URL 转义器。
* go/printer:对齐 ImportDecls 中的 ImportPaths(感谢 Scott Lawrence)。
* go/typechecker:迈向用完整类型信息增强 AST 的第二步。
* gofmt:允许在切片表达式中省略第一个索引。
* goinstall:新增 -a 标志表示“所有远程包”(感谢 Scott Lawrence),
假设 go 二进制文件已在 PATH 中(遵循新约定),
对 Google Code 检出使用 https。
* gotest:允许对 cgo 包进行 make test(无需 make install)。
* http:在服务器中添加 Date 头,在文件服务器中添加 Last-Modified 和 If-Modified-Since 头,
添加 PostForm 函数以发送 URL 编码的键值数据,
在 URL.String 返回值中隐藏密码(感谢 Scott Lawrence)。
* image:引入 Config 类型和 DecodeConfig 函数。
* libcgo:更新 Makefile 以使用 Make.inc。
* list:更新注释说明零值可立即使用。
* math:Sincos 的 amd64 架构实现(感谢 Charles L. Dorian)。
* misc/bash:为 gofmt 添加 *.go 文件补全(感谢 Scott Lawrence)。
* misc/emacs:将 _ 设为单词符号(感谢 Scott Lawrence)。
* misc:添加 zsh 补全(使用 compctl),
为 Fraise.app(OS X)添加语法高亮(感谢 Vincent Ambo)。
* net/textproto:处理多行响应(感谢 Evan Shaw)。
* net:添加 LookupMX(感谢 Corey Thomasson)。
* netchan:修复测试中的竞态条件,
将 -1 而非 0 设为无限值(类似 strings.Split 等),
在导出发送时使用确认机制。
新增 Sync 和 Drain 方法用于清理。
* regexp:解释所有 Go 字符转义序列 \a \b \f \n \r \t \v。
* rpc:修复导致私有方法被尝试注册的错误。
* runtime:修正 commonType.kind 值以匹配编译器,
添加 GOOS、GOARCH;修复 FuncLine,
对单词大小的 interface 值特殊处理 copy、equal(感谢 Kyle Consalus)。
* scanner:修复 Next 中错误报告不正确的问题(感谢 Kyle Consalus)。
* spec:澄清数组必须可寻址才能被切片。
* template:修复动作周围的空格处理。
* test/solitaire:回溯和字符串转换的练习。
* test:识别 gccgo 错误消息及其他修复。
* time:在 nil Time 上调用 String 时不再崩溃。
* tutorial:重新生成 HTML 以纳入对 progs/file.go 的更改。
* websocket:修复服务器响应中缺失的 Sec-WebSocket-Protocol(感谢 Jukka-Pekka Kekkonen)。
2010-08-25
此版本包含对构建系统的更改,您可能需要相应修改环境变量和 Makefile。
所有环境变量现在都是可选的:
- $GOOS 和 $GOARCH 现在是可选的;其值现在应由构建系统自动推断,
- $GOROOT 现在是可选的,但如果您选择不设置它,在开发 Go 程序时必须使用 'gomake' 而非 'make' 或 'gmake'(遵循传统 Makefile),
- $GOBIN 仍然可选,现在默认为 $GOROOT/bin;
如果您希望使用此新默认值,请确保它在您的 $PATH 中,并已从 $HOME/bin 中移除现有二进制文件。
作为这些更改的结果,Go 的 Makefile 已经改变。如果您的 Makefile 继承自 Go 的 Makefile,您必须将这行:
include ../../Make.$(GOARCH)
改为:
include ../../Make.inc
此版本还移除了 regexp 和 once 包中已弃用的函数。任何仍使用它们的代码都将失败。
详情请参阅上一版本的说明:
http://golang.org/doc/devel/release.html#2010-08-11
其他更改:
* 6g:为切片、字符串和接口值提供更优的寄存器分配
* 6l:在DWARF格式中包含行号信息
* 构建:$GOBIN默认为$GOROOT/bin,无需设置必需的环境变量
* cgo:新增C.GoStringN函数(感谢Eric Clark)
* codereview:修复CL描述中前导制表符的问题;若CL未发送过邮件则不发送"已放弃"通知
* crypto/ocsp:补充缺失的Makefile
* crypto/tls:支持客户端证书(感谢Mikkel Krautz)
* 文档:更新gccgo信息以适应近期变更;修正《Effective Go》中的错误
* fmt/print:赋予%p优先级(类似%T处理方式);使Print/Println支持Formatter接口
* gc:修复括号匹配检查
* go/ast:新增AST节点打印工具,为后续添加完整类型信息奠定基础
* go/printer:不再修改经tabwriter.Escape处理的文本
* gofmt:不再修改多行字符串字面量;通过-ast标志可打印AST节点
* http:修正http.Request文档中的拼写错误(感谢Scott Lawrence);始终解析查询字符串(不仅限于GET请求)
* image/png:支持16位色深
* io:当min参数大于缓冲区长度时,ReadAtLeast现在会返回错误
* jsonrpc:成功时使用`error: null`而非`error: ""`
* libmach:为32位x86内核实现寄存器获取
* net:使IPv6的String方法符合标准(感谢Mikio Hara)
* os:FileInfo.Permission()现在返回uint32类型(感谢Scott Lawrence);使用Windows原生API实现环境变量处理(感谢Alex Brainman)
* reflect:允许PtrValue.PointTo(nil)
* runtime:修正.goc文件的行号;修复另一个栈分割漏洞;修复freebsd/386的mmap问题
* syscall:为linux/386、linux/amd64和linux/arm重新生成syscall/z*文件
* tabwriter:引入新标志StripEscape
* template:修复动作代码周围的空白处理;确保变量前的空白能被正确解析(感谢Roger Peppe)
* test:新增会导致gccgo崩溃的测试用例
* time:解析时区时不再要求必须提供分钟数(感谢Jan H. Hosang)
* yacc:修复错误恢复中的边界检查
2010-08-11
本次发布包含一些包结构变更。如果您使用了once、regexp、image或exp/draw包,可能需要修改代码。
sync包中新增了Once类型。新的sync.Once将替代once包提供的功能。我们计划在本版本之后移除once包。详见:
http://golang.org/pkg/sync/#Once
标准库中所有once实例已替换为sync.Once。查阅这些变更可能有助于您修改现有代码。相关变更集:
http://code.google.com/p/go/source/detail?r=fa2c43595119
正则表达式包regexp新增了一组方法,提供统一命名的方式查找文本中的模式匹配,详情参见包文档:
http://golang.org/pkg/regexp/
这些新方法将在后续版本中替代旧的子字符串匹配方法。以下方法已被弃用:
Execute(请使用FindSubmatchIndex)
ExecuteString(请使用FindStringSubmatchIndex)
MatchStrings(请使用FindStringSubmatch)
MatchSlices(请使用FindSubmatch)
AllMatches(请使用FindAll;注意n<0表示"所有匹配";原为n<=0)
AllMatchesString(请使用FindAllString;注意n<0表示"所有匹配";原为n<=0)
(另有十个您未知但实用的新方法。)
请在下个版本前更新代码以使用新方法。
image.Image现在包含Bounds矩形,此前其范围是从(0, 0)到(Width, Height)。原有的循环结构:
for y := 0; y < img.Height(); y++ {
for x := 0; x < img.Width(); x++ {
// 处理img.At(x, y)
}
}
应改为:
b := img.Bounds()
for y := b.Min.Y; y < b.Max.Y; y++ {
for x := b.Min.X; x < b.Max.X; x++ {
// 处理img.At(x, y)
}
}
Point和Rectangle类型也从exp/draw移至image包。
其他更改:
* arm:错误修复与系统调用改进(感谢Kai Backman)
* asn1:修复有符号整数的错误编码(感谢Nicholas Waples)
* big:修复位运算函数(感谢Evan Shaw)
* bytes:新增IndexRune、FieldsFunc和To*Special函数(感谢Christian Himpel)
* encoding/binary:新增复数支持(感谢Roger Peppe)
* exp/iterable:新增UintArray(感谢Anschel Schaffer-Cohen)
* godoc:当包或文件未找到时返回404状态码
* gofmt:改进意外分号错误的报告机制
* html:新增HTML词法分析器包
* image:将图像表示从切片切片改为线性缓冲区;引入Decode和RegisterFormat函数;新增Transparent和Opaque类型;用Bounds替代Width和Height,新增Point和Rect类型
* libbio:修复Bprint以处理6g在大型数据结构中的问题
* math:修复amd64架构的Hypot函数(感谢Charles L. Dorian)
* net/textproto:新增包,附带net/dict示例
* os:修复ForkExec()在envv==nil时的处理(感谢Alex Brainman)
* png:新增灰度图支持(感谢Mathieu Lonjaret)
* regexp:说明反斜杠是转义字符
* rpc:捕获ReadResponseBody的错误
* runtime:内存释放修复(感谢Alex Brainman)
* template:为template.Template新增ParseFile方法
* test/peano:使用直接递归类型定义
2010-08-04
本次发布包含os.Open(及相关函数)的变更。文件权限参数已改为uint32类型。您的代码可能需要修改——最多只需进行简单的类型转换。其他变更:
* amd64:使用段式内存实现线程本地存储。
* arm:为安卓启动脚本添加gdb支持,
修复若干错误(栈覆盖、索引问题),
禁用另一个不稳定测试,
从gotest中移除旧版qemu依赖。
* bufio:引入Peek方法。
* bytes:为explode函数添加空白字符串测试用例(感谢Scott Lawrence)。
* cgo:修正多返回值函数调用(感谢Christian Himpel)。
* crypto/x509:解包Subject Key Identifier(感谢Adam Langley)。
* gc:索引边界测试及其他修复。
* gofmt/go/parser:加强语法检查。
* goinstall:检查exec.*Cmd.Wait()的错误返回(感谢Alex Brainman)。
* image/png:使用图像专用方法检查透明度。
* image:引入Gray和Gray16类型,
移除Black和White之外的其他命名颜色。
* json:对象成员必须包含值(感谢Anthony Martin)。
* misc/vim:仅在注释中高亮拼写错误的单词(感谢Christian Himpel)。
* os:空设备支持(感谢Peter Mundy)。
* runtime:避免SIGBUS/SIGSEGV信号处理中的错误穿透。
* strings:修复Split("", "", -1)(感谢Scott Lawrence)。
* syscall:避免Go错误与Windows错误冲突(感谢Alex Brainman)。
* test/run:支持新旧版本差异对比,
* websocket:修正challenge响应(感谢Tarmigan Casebolt),
修复头部键包含空格的问题(感谢Bill Neubauer)。
---
2010-07-29
* 5g:增强软浮点支持并修复多个错误。
* asn1:支持Enumerated、Flag和GeneralizedTime类型。
* build:clean.bash脚本增加GOOS和GOARCH环境变量检查。
* bytes:新增IndexFunc和LastIndexFunc函数(感谢Fazlul Shahriar),
添加Title方法。
* cgo:当环境变量设置CC时使用自定义编译器而非"gcc",
采用新命令行语法:-- 分隔cgo标志与gcc标志。
* codereview:避免无配置时的崩溃,
不在空文件列表时运行gofmt,
适配Mercurial 1.6的'hg submit'操作。
* crypto/ocsp:新增解析OCSP响应的包。
* crypto/tls:新增客户端SNI支持和PeerCertificates功能。
* exp/bignum:删除该包(功能已被big包吸收)。
* fmt.Print:修复...T引入后空格定位问题。
* fmt.Scanf:处理尾部空格。
* gc:修复接口中小于指针大小的接收器问题,
浮点精度/规范化处理修复,
段错误时优雅退出,
导入点遮蔽错误修复,
多项修复包括更健壮的无效输入处理,
输出导入失败的错误详情。
* gccgo_install.html:添加RTEMS移植说明(感谢Vinu Rajashekhar)。
* gobs:修复单例数组错误。
* godoc:为所有包含文档的包显示概要信息。
* golang:修复部分换行问题。
* http:添加HTTPS客户端支持(感谢Fazlul Shahriar),
内容长度未知时仍写入请求体(感谢James Whitehead)。
* io:新增MultiReader和MultiWriter(感谢Brad Fitzpatrick),
修复管道中的另一个竞态条件。
* ld:多项修复包括更健壮的无效输入处理。
* libmach:正确处理包含D_REGREG地址的.5文件。
* linux/386:使用Xen兼容的ELF TLS指令序列。
* mime:添加AddExtensionType方法(感谢Yuusei Kuwana)。
* misc/vim:语法文件识别1e9等常量(感谢Petar Maymounkov)。
* net:恢复TCPConn.SetNoDelay方法。
* net(windows):修复传入空切片时的Read/Write崩溃(感谢Alex Brainman),
实现LookupHost/Port/SRV(感谢Wei Guangjing),
正确处理(*netFD).Read()中的EOF(感谢Alex Brainman)。
* runtime:修复4a01b8d28570修订引入的错误(感谢Alex Brainman),
将cgo2c/*.cgo重命名为goc2c/*.goc(感谢Peter Mundy)。
* scanner:改进注释说明。
* strings:新增Title方法。
* syscall:Windows平台新增ForkExec和Syscall12(感谢Daniel Theophanes),
改进Windows errno处理(感谢Alex Brainman)。
* syscall(windows):修复FormatMessage(感谢Peter Mundy),
实现Pipe()(感谢Wei Guangjing)。
* time:修复时区中分钟的解析问题。
* utf16(windows):修复测试时的循环依赖(感谢Peter Mundy)。
---
2010-07-14
本次发布包含包变更:container/vector中,Vector、IntVector和StringVector类型移除了Iter方法,同时将Data方法重命名为Copy以更准确地表达其行为。由于Vector现在是切片类型,所有使用v.Iter()或v.Data()的for循环可改为直接遍历v。
其他变更:
* big:改进Rat.SetString(感谢Evan Shaw),
新增sign、abs、Rat.IsInt。
* cgo:多项错误修复。
* codereview:适配Mercurial >= 1.6(感谢Evan Shaw)。
* crypto/rand:新增Windows实现(感谢Peter Mundy)。
* crypto/tls:简化HTTPS服务器创建,
新增客户端OCSP装订支持。
* exp/eval:从bignum迁移至big包(感谢Evan Shaw)。
* gc:实现新的len规范,修复range错误,优化性能。
* go/parser:要求'...'参数后必须跟随类型。
* http:修复ParseURL正确处理//相对路径。
* io:修复SectionReader的Seek逆向查找(感谢Peter Mundy)。
* json:新增HTMLEscape(感谢Micah Stetson)。
* ld:多项错误修复。
* math:amd64平台的log实现(感谢Charles L. Dorian)。
* mime/multipart:新增解析MIME多部分消息和HTTP multipart/form-data的包。
* os:使用默认TempDir的TempFile处理测试文件(感谢Peter Mundy)。
* runtime/tiny:为额外虚拟机添加文档,修复构建(感谢Markus Duft)。
* runtime:改进nil channel的send/recv错误信息。
* spec:明确channel close()语义,
锁定channels和select的部分细节,
限制len(x)为常量的条件,
规范nil切片、映射和channel的len/cap行为。
* windows:二进制文件名自动追加.exe后缀(感谢Joe Poirier)。
---
2010-07-01
本次发布包含可能需修改客户端代码的包变更。2010-07-01
本次发布包含可能需修改客户端代码的包变更。
bytes 和 strings 包中的 Split 函数已更改。
限制返回大小的 count 参数,之前将零视为无限制,现在将 0 视为 0,并返回一个空切片。
要请求无限制的结果,请使用 -1(或其他负值)。
bytes 和 strings 包中新增的 Replace 函数也遵循此行为。
这可能需要您修改现有代码。
gob 包现在允许在顶层传输非结构体值。
因此,rpc 和 netchan 包对其可处理类型的限制更少。例如,netchan 现在可以共享 chan int。
此次发布还包含一个代码走读:“通过通信共享内存”。
它描述了一个使用 goroutine 和 channel 的惯用 Go 程序:
http://golang.org/doc/codewalk/sharemem/
Go 仪表板上新增了一个“项目”页面,列出了 Go 程序、工具和库:
http://godashboard.appspot.com/project
其他变更:
* 6a, 6l: 错误修复。
* bytes, strings: 新增 Replace。
* cgo: 对 .so 引用使用无斜杠的相对路径。
* cmath: 修正参数为 cmplx(Inf, NaN) 时的 IsNaN (感谢 Charles L. Dorian)。
* codereview: 允许在 CONTRIBUTORS 中使用多个电子邮件地址。
* doc/codewalk: 新增“通过通信共享内存”。
* exp/draw/x11: 实现键码到键符的映射。
* fmt: Printf: 修复处理 %#v 的错误,允许切片使用其他动词
Scan: 修复 EOF 处理。
* gc: 错误修复和优化。
* gob: 新增 DecodeValue 和 EncodeValue,
新增对复数的支持。
* goinstall: 支持 Bazaar+Launchpad (感谢 Gustavo Niemeyer)。
* io/ioutil: 为 Windows 新增 TempFile (感谢 Peter Mundy)。
* ld: 新增 -u 标志以检查安全位;废弃旧的 -u, -x 标志。
* math: amd64 版本的 Exp 和 Fabs (感谢 Charles L. Dorian)。
* misc/vim: 始终为 .go 文件覆盖文件类型检测。
* net: 新增对 DNS SRV 请求的支持 (感谢 Kirklin McDonald),
初步尝试实现 Windows 版本 (感谢 Alex Brainman)。
* netchan: 既然 gob 现在可以处理此类数据,现在允许基本类型的 chan,
消除了在 Import 和 Export 中使用指针值的需要。
* os/signal: 仅在导入了 os/signal 包时才捕获所有信号。
* regexp: 错误修复:需要跟踪匹配是否以固定前缀开始。
* rpc: 允许非结构体的参数和回复(它们仍必须是指针)。
* runtime: 错误修复和重组。
* strconv: 修复浮点数和二进制转换中的错误。
* syscall: 将 syscall_bsd.go 添加到 zsycall_freebsd_386.go (感谢 Peter Mundy),
新增 socketpair (感谢 Ivan Krasin)。
* time: 为 Windows 实现时区 (感谢 Alex Brainman)。
* x509: 支持非自签名证书。
2010-06-21
此版本包含一项语言变更。"..." 函数参数形式已移除;"...T" 保留。通常,可以使用 "...interface{}" 代替 "..."。
Printf 的实现方式发生了变化,这微妙地影响了它对 fmt.Stringer 接口的处理。您可能需要修改您的代码。详情请参阅:
https://groups.google.com/group/golang-nuts/msg/6fffba90a3e3dc06
reflect 包已更改。如果您有使用 reflect 的代码,则需要更新。详情请参阅:
https://groups.google.com/group/golang-nuts/msg/7a93d07c590e7beb
其他变更:
* 8l: 修正 8l -K 代码中 sp == 栈顶的测试。
* asn1: 允许 PrintableString 中包含 '*'。
* bytes.Buffer.ReadFrom: 修复错误。
* codereview: 避免 match 中的异常 (感谢 Paolo Giarrusso)。
* 复数除法: 匹配 C99 实现。
* exp/draw: 小的 draw.drawGlyphOver 优化。
* fmt: Print*: 重新实现,首先按类型切换,
Scanf: 改进输入与格式不匹配时的错误信息。
* gc: 为接口失败、转换和未定义符号提供更好的错误信息。
* go/scanner: 报告非法的转义序列。
* gob: 用 slice 替代 map。
* goinstall: 处理 package main 的依赖项 (感谢 Roger Peppe)。
* gopack: 新增 S 标志以强制将包标记为安全,
简化 go 元数据代码。
* html: 同步 testdata/webkit 以匹配 WebKit 最新版。
* http: 自动回复 Expect 100-continue 请求 (感谢 Brad Fitzpatrick)。
* image: 新增 Alpha16 类型。
* ld: 将 Go 符号表填充到页面边界(修复 cgo 崩溃)。
* misc/vim: 重组插件以便于使用 (感谢 James Whitehead)。
* path: 新增 Base,类似于 Unix 的 basename。
* pkg/Makefile: 允许 DISABLE_NET_TESTS=1 以禁用网络测试。
* reflect: 新增 Kind、Type.Bits,移除 Int8Type、Int8Value 等。
* runtime: 额外的 Windows 支持 (感谢 Alex Brainman),
修正 Leopard 上 16 位除法的错误,
修复 386 信号处理程序错误。
* strconv: 新增 AtofN, FtoaN。
* string: 新增 IndexFunc 和 LastIndexFunc (感谢 Roger Peppe)。
* syslog: 使用本地网络进行测试。
2010-06-09
此版本包含许多修复和改进,包括对语言规范的一些澄清和整合。
赋值和转换周围的类型检查规则更简单但更严格:赋值不再隐式地从 *[10]int 转换为 []int(请使用 x[0:] 而非 &x),转换也不能再更改复合类型内部的类型名称。
fmt 包现在包含了灵活的类型驱动(fmt.Scan)和格式驱动(fmt.Scanf)扫描器,适用于所有基本类型。
* big: 修复 Quo 别名问题。
* bufio: 修改 ReadSlice 以匹配描述。
* cgo: 错误修复。
* doc: 添加 Google I/O 演讲和程序,
代码审查 + Mercurial Queues 信息(感谢 Peter Williams)。
* exp/draw: 为 Over 运算符添加快速绘制路径,
添加 Rectangle.Eq 和 Point.In,修复 Rectangle.Clip(感谢 Roger Peppe)。
* fmt: Scan 修复和改进。
* gc: 反斜杠换行在字符串中不再是合法的转义序列,
发现 ~ 运算符时提供更好的错误信息,
修复复杂类型的导出,
新的类型检查规则。
* go/parser: 修正空语句 ';' 的位置。
* gofmt: 修复测试脚本。
* goinstall: 使用 'git pull' 代替 'git checkout'(感谢 Michael Hoisie)。
* http: 添加 Head 函数用于发起 HTTP HEAD 请求,
正确处理状态码 304。
* image: 为图像类型添加 Opaque 方法。
使 Color.RGBA 返回 16 位颜色而非 32 位颜色。
* io/ioutil: 添加 TempFile。
* math: Pow 特殊用例和附加测试(感谢 Charles L. Dorian)。
* netchan: 改进关闭和终止。
* os: 为 Windows 实现 os.FileInfo.*time_ns(感谢 Alex Brainman)。
* os/signal: 修正用于查找 Unix 信号名称的正则表达式(感谢 Vinu Rajashekhar)。
* regexp: 优化(感谢 Kyle Consalus)。
* runtime: 修复 -Inf 的打印(感谢 Evan Shaw),
完成 pchw -> tiny 迁移,为 tiny 添加 gettime(感谢 Daniel Theophanes)。
* spec: 清理和整合。
* syscall: 其他 Windows 兼容性修复(感谢 Alex Brainman)。
* test/bench: 添加 regex-dna-parallel.go(感谢 Kyle Consalus)。
* vector: 特定类型的 Do 函数现在接受 f(type)(感谢 Michael Hoisie)。
2010-05-27
一个相当大的版本发布,包括标准库的改进和一系列编译器错误修复。三周的间隔主要是由于团队在为 Google I/O 做准备。
* big: 添加 Rat 类型(感谢 Evan Shaw),
新功能,大量性能调优、清理工作和更多测试。
* bignum: 通过移入 exp 目录来弃用。
* build: 允许在构建脚本外部设置 MAKEFLAGS(感谢 Christopher Wedgwood)。
* bytes: 添加 Trim、TrimLeft、TrimRight 和通用函数(感谢 Michael Hoisie)。
* cgo: 修复以允许从 init 代码中调用 cgo 回调。
* cmath: 由于带符号零的原因更新 Phase 和 Polar 的范围(感谢 Charles L. Dorian)。
* codereview: 更好地与 mq 配合工作(感谢 Peter Williams)。
* compress: 重命名
NewDeflater -> NewWriter
NewInflater -> NewReader
Deflater -> Compressor
Inflater -> Decompressor
* exp/draw/x11: 尊重 $XAUTHORITY,
以与 x-go-bindings 相同的方式处理 $DISPLAY。
* exp/draw: 字形图像的快速路径,其他优化,
修复 Rectangle.Canon(感谢 Roger Peppe)。
* fmt: Scan, Scanln: fmt 包中简单扫描 API 的开始,
修复当给定额外的 nil 参数时 Printf 崩溃的问题(感谢 Roger Peppe)。
* gc: 计算非整数的余数时提供更好的错误信息(感谢 Evan Shaw),
禁止在 Go 程序中使用 middot,
在错误消息中区分数组和切片字面量,
修复 go.y 导出语法中的移位/规约冲突,
修复对理想常量的 unsafe.Sizeof,
处理在函数调用之外使用内置函数的情况,
许多其他错误修复。
* gob: 添加对映射的支持,
添加对间接映射、切片、数组的测试。
* godoc: 从所有包文件中收集包注释。
* gofmt: 不要丢失必要的分号,
从测试用例中排除语法非法的测试,
修复标签的打印。
* http: 如果远程服务器未响应 "HTTP/" 则防止崩溃。
* json: 在字符串扫描器中接受转义的斜杠(感谢 Michael Hoisie),
修复数组 -> 非数组的解码。
* libmach: 在 OS X 上跳过 __nl_symbol_ptr 部分。
* math: Fdim、Fmax、Fmin 的 amd64 版本,
带符号零的 Sqrt 特殊用例(感谢 Charles L. Dorian)。
* misc/kate: convert 不是内置函数(感谢 Evan Shaw)。
* net: 实现 BindToDevice,
实现原始套接字(感谢 Christopher Wedgwood)。
* netFD: 修复 Close 和 Read/Write 之间的竞态条件(感谢 Michael Hoisie)。
* os: 添加 Chtimes 函数(感谢 Brad Fitzpatrick)。
* pkg/Makefile: 将 netchan 添加到标准包列表。
* runtime: GOMAXPROCS 返回先前的值,
允许大的映射值,
避免对固定字符串进行分配,
正确回溯新生的协程,甚至闭包,
在调整大小期间释放旧的 hashmap 部件。
* spec: 将虚数字面量添加到分号规则(之前缺失),
修复并阐明转换的语法,
简化关于通道类型的部分,
其他次要调整。
* strconv: Btoui64 优化(感谢 Kyle Consalus)。
* strings: 在 Map 中使用 copy 代替 for 循环(感谢 Kyle Consalus)。
* syscall: 实现 BindToDevice(感谢 Christopher Wedgwood),
在 Darwin/FreeBSD 上添加 Utimes,在所有地方添加 Futimes,
为某些平台重新生成系统调用。
* template: 规范化接口、指针和方法的名称查找。
2010-05-04
在此版本中,我们将 Windows 操作系统目标从 'mingw' 重命名为 'windows'。
如果您当前正在为 'mingw' 构建,您应该改为设置 GOOS=windows。* 5l, 6l, 8l, 运行时:使 -s 参数生成的二进制文件可运行。
* 5l, 6l, 8l:修改 ELF 头信息,确保 strip 命令不会破坏二进制文件。
* 8l:修复 Windows 上的绝对路径检测问题。
* big:新增函数、优化及代码清理,
为 Int 类型添加按位运算方法(感谢 Evan Shaw)。
* bytes:修改 IndexAny 以查找 UTF-8 编码字符。
* darwin:bsdthread_create 可能失败;打印清晰的错误信息。
* fmt:%T 对 nil 值缺少打印 ``(感谢 Christopher Wedgwood)。
* gc:多项修复。
* misc/cgo/gmp:修复 SetString 中的错误。
* net:修复 resolv.conf 文件末尾无换行符时的错误(感谢 Christopher Wedgwood)。
* spec:一些小的澄清(无语言变更)。
* syscall:在 sycall_nacl.go 中添加 EWOULDBLOCK,
在 Linux open 系统调用中强制设置 O_LARGEFILE,
处理管道 EOF — Windows 下的特殊情况(感谢 Alex Brainman),
mingw 的 Sleep 实现(感谢 Joe Poirier)。
* test/bench:导入新的 fasta C 参考实现,更新 Go 代码,进行优化。
* test:静态初始化测试(测试失败)。
* vector:在调用 make 时使用正确的容量参数。
* xml:允许文本段在文件末尾(EOF)处结束。
2010-04-27
本次发布包含一个新的 Codelab,演示如何构建一个简单的 wiki Web 应用程序:
http://golang.org/doc/code lab/wiki/
同时包含一个用于文档化代码的 Codewalk 框架。参见:
http://golang.org/doc/codewalk/
其他变更:
* 6g:修复数组索引表达式需要括号的问题。
* 6l, 8l:在文本段的 PT_LOAD 映射中包含 ELF 头信息。
* arm:添加 Android 运行器脚本,
支持浮点数打印。
* big:实现了 Karatsuba 乘法,
多项修复与改进(感谢 Evan Shaw)。
* bytes:为 Buffer 添加 Next 方法,简化 Read 实现,
调整内部实现,使 WriteByte 速度提升 50%。
* crypto/tls:更简洁的记录层实现。
* exp/eval:修复(感谢 Evan Shaw)。
* flag:消除不必要的结构体。
* gc:改进 Windows 支持,
修复 cmplx 类型检查错误,
对顶层语句提供更具体的错误信息。
* go/parser:不再要求不必要的括号。
* godoc:排除重复条目(感谢 Andrei Vieru),
使用 int64 表示时间戳(感谢 Christopher Wedgwood)。
* gofmt:精细调整括号移除规则。
* json:Marshal, Unmarshal 使用新的扫描器,
默认保留字段名大小写,
扫描器, Compact, Indent 及相关测试,
支持流式处理。
* libmach:正确反汇编 MOVLQZX 指令。
* math:为有符号零添加更多特殊案例(感谢 Charles L. Dorian)。
* net:添加 Pipe 函数,
修复 packStructValue 中的错误(感谢 Michael Hoisie),
引入 net.Error 接口。
* os:FileInfo:规范化某些字段的类型,
创建 sys_bsd.go(感谢 Giles Lean),
mingw 错误修复(感谢 Alex Brainman)。
* reflect:添加 FieldByNameFunc(感谢 Raif S. Naffah),
为 PtrValue 和 MapValue 实现 Set(nil), SetValue(nil)。
* regexp:允许转义任意标点符号。
* rpc/jsonrpc:支持 jsonrpc 线编码。
* rpc:抽象客户端和服务器编码,
为 rpc.Client 添加 Close() 方法。
* runtime:修复 Native Client 的闭包和 defer 错误,
重命名 cgo2c, *.cgo 为 goc2c, *.goc 以避免与真正的 cgo 混淆。
多项其他修复。
* scanner:实现 Peek() 方法,可在不移动指针的情况下查看下一个字符。
* strings:为 Reader 添加 ReadRune,添加 FieldsFunc(感谢 Kyle Consalus)。
* syscall:使 linux 的 Setsid 函数签名与 darwin 匹配,
mingw 错误修复(感谢 Alex Brainman)。
* template:修复处理 interface 内部指针的问题。
* test/bench:添加 fannkuch-parallel.go(感谢 Kyle Consalus),
通过使用加法代替移位,使 pidigits 性能提升约 10%。
* time:移除错误的 time.ISO8601,添加 time.RFC3339(感谢 Micah Stetson)。
* utf16:添加 DecodeRune, EncodeRune。
* xml:添加对 XML 序列化嵌入 struct 的支持(感谢 Raif S. Naffah),
新的 "innerxml" 标签用于收集内部 XML。
2010-04-13
本次发布包含多项变更:
* 8l:为 PE 二进制文件添加 DOS 存根(感谢 Evan Shaw)。
* cgo:添加 //export 指令。
* cmath:新的复数数学库(感谢 Charles L. Dorian)。
* docs:更新以匹配当前的编码风格(感谢 Christopher Wedgwood)。
* exp/eval:修复示例并在 Makefile 中添加目标(感谢 Evan Shaw)。
* fmt:修改格式化动词 %b 的行为,使其在负数时与 %x 一致(感谢 Andrei Vieru)。
* gc:将 s == "" 编译为 len(s) == 0,
区分致命编译器错误与错误+退出,
修复非 amd64 架构上的对齐问题,
为 defer func() {} 缺少最终括号提供清晰的语法错误提示,
实现 panic 和 recover,
若函数包含 defer,则在入口处将未命名返回值置零。
* goyacc:修改为可重入(感谢 Roger Peppe)。
* io/ioutil:修复 Open 成功但 Stat 失败时 ReadFile 的错误。
* kate:针对最近的语言变更进行更新(感谢 Evan Shaw)。
* libcgo:初始的 mingw 移植工作 - 可构建但未经测试(感谢 Joe Poirier)。
* math:新增函数及特殊案例(感谢 Charles L. Dorian)。
* net:使用 chan bool 代替 chan *netFD 以避免循环依赖。
* netchan:允许客户端既能发送也能接收。
* nntp:新包,NNTP 客户端(感谢 Conrad Meyer)。
* os:将 os.Dir 重命名为 os.FileInfo。
* rpc:不再记录正常的 EOF 错误,
修复 ServeConn 使其按文档说明阻塞。
* runtime:多项错误修复,改进 ARM 支持。
* strings:添加 IndexRune, Trim, TrimLeft, TrimRight 等(感谢 Michael Hoisie)。
* syscall:实现一些 os 包所需的 mingw 系统调用(感谢 Alex Brainman)。
* test/bench:添加 k-nucleotide-parallel(感谢 Kyle Consalus)。
* Unicode:添加土耳其语大小写映射支持。
* xgb:从主仓库移至 http://code.google.com/p/x-go-binding/
2010-03-30
本次发布包含三项语言变更:
1. 访问映射(map)中不存在的键不再是运行时错误。
它现在会求值为该类型的零值。例如:
x := myMap[i] 现在等价于: x, _ := myMap[i]
2. 现在可以合法地取函数返回值的地址。
返回值仅在延迟函数执行完毕后才复制回调用方。3. 规范中新增了用于报告和恢复故障的函数 `panic`(恐慌)和 `recover`(恢复):
http://golang.org/doc/go_spec.html#Handling_panics
相关变更中,`panicln` 已被移除,`panic` 现在成为单参数函数。恐慌和恢复已被 gc 编译器识别,但新行为尚未实现。
此版本的 ARM 构建已损坏;ARM 用户应停留在 release.2010-03-22 版本。
其他变更:
* bytes, strings: 新增 `IndexAny`。
* cc/ld: 增加对 `#pragma dynexport` 的支持,并将 `dynld` 全面重命名为 `dynimport`。Cgo 用户需要重新运行 cgo。
* expvar: 为 `cmdline`、`memstats` 添加默认发布。
* flag: 新增用户自定义标志类型。
* gc: 常规错误修复。
* go/ast: 推广 ast 过滤。
* go/printer: 在打印中避免使用 reflect。
* godefs: 修复对负常量的处理。
* godoc: 导出 pprof 调试信息和导出变量,支持在 -src 模式下过滤命令行输出,使用 HTTP GET 进行远程搜索而非 rpc。
* gofmt: 不再将多行函数转换为单行,并在多行选择器表达式中保留换行(感谢 Risto Jaakko Saarelma)。
* goinstall: 在错误报告中包含命令名称(感谢 Andrey Mirtchovski)。
* http: 新增 `HandleFunc`,作为 `Handle(path, HandlerFunc(func))` 的快捷方式。
* make: 为安装使用实际依赖项。
* math: 新增 Bessel 函数 `J1`、`Y1`、`Jn`、`Yn`、`J0`、`Y0`(感谢 Charles L. Dorian)。
* prof: 从 google-perftools 新增 pprof。
* regexp: 如果出错,不再返回非 nil 的 `*Regexp`。
* runtime: 新增 `Callers`,增加 malloc 采样和 pprof 接口,添加内存分析功能并向 `runtime.MemStats` 添加更多统计信息,实现缺失的 `destroylock()`(感谢 Alex Brainman),更多 malloc 统计信息,在单个 goroutine 中运行所有析构器,`Goexit` 运行延迟调用。
* strconv: 新增 `Atob` 和 `Btoa`,修复 `Unquote` 在出错时可能错误返回 nil 错误的问题(感谢 Roger Peppe)。
* syscall: 新增 IPV6 常量,为 Darwin 和其他 *BSD 添加 `syscall_bsd.go`(感谢 Giles Lean),实现 `SetsockoptString`(感谢 Christopher Wedgwood)。
* websocket: 实现新协议(感谢 Fumitoshi Ukai)。
* xgb: 修复请求长度和请求大小(感谢 Firmansyah Adiputra)。
* xml: 新增 `CopyToken`(感谢 Kyle Consalus),在语法错误中添加行号(感谢 Kyle Consalus),使用 `io.ReadByter` 代替本地 `readByter`(感谢 Raif S. Naffah)。
2010-03-22
在此版本中,我们宣布 Go 博客上线:
http://blog.golang.org/
首篇文章是自发布以来所发生情况的简要更新。
此版本包含一些新的包和功能,以及多项修复:
* 6g/8g: 修复复杂数据类型相关问题,以及其他错误修复。
* Makefiles: 重构以简化外部 Makefile 的编写。
* crypto/rand: 新包。
* godoc: 通过 RPC 实现命令行搜索;改进注释格式:识别 URL。
* gofmt: const/var 声明格式更加一致。
* http: 新增 `Error` 辅助函数,新增 `ParseQuery`(感谢 Petar Maymounkov),将 `RawPath` 的含义改为原始路径,而非原始的 scheme 之后的所有内容。
* image/jpeg: 修复拼写错误。
* json: 新增 `MarshalIndent`(接受用户指定的缩进字符串)。
* math: 新增 Gamma 函数(感谢 Charles L. Dorian)。
* misc/bbedit: 支持 `cmplx`、`real`、`imag`(感谢 Anthony Starks)。
* misc/vim: 新增复数类型、函数和字面量。
* net: 修复 `IPMask.String` 在全部为 0xff 掩码时不崩溃。
* os: 在正常 `Close` 后丢弃 File 析构器。
* runtime: 新增 `GOROOT` 和 `Version`,锁定析构器表访问。
* sha512: 新增 `sha384`(截断版本)(感谢 Conrad Meyer)。
* syscall: 新增常量 `ARCH`,类似于 `OS`。
* syscall: 进一步完善 mingw 移植(感谢 Alex Brainman)。
* template: 修复 HTML 格式化器处理 []byte 输入的错误。
* utf16: 新包。
* version.bash: 应对古老的 Mercurial。
* websocket: 使用 `URL.RawPath` 构造 `WebSocket-Location:` 头部。
2010-03-15
此版本包含一项语言变更:对复数的支持。
http://golang.org/doc/go_spec.html#Imaginary_literals
http://golang.org/doc/go_spec.html#Complex_numbers
目前尚无库支持。
此版本还包含 goinstall 命令行工具。
http://golang.org/cmd/goinstall/
http://groups.google.com/group/golang-nuts/t/f091704771128e32
* 5g/6g/8g: 修复切片中的双重函数调用问题。
* arm: 清理构建警告。(感谢 Dean Prichard)
* big: 修复 `probablyPrime` 中的错误。
* bufio: 新增 `WriteRune`。
* bytes: 向 `bytes.Buffer` 新增 `ReadRune` 和 `WriteRune`。
* cc: 栈分裂错误修复。
* crypto: 向 sha256 新增 SHA-224,新增 sha512 包。(感谢 Conrad Meyer)
* crypto/ripemd160: 新包。(感谢 Raif S. Naffah)
* crypto/rsa: 不再使用安全素数。
* gc: 避免使用固定长度缓冲区 `cleanbuf`。(感谢 Dean Prichard)
改进浮点数 `+=` 的编译
修复 `make slice` 复杂参数导致的崩溃。
消除重复错误,为 `I.(T)` 提供更好的错误信息。
* godoc: 支持目录中的多个包,以及其他修复。
* gofmt: 错误修复。
* hash: 新增 `Sum64` 接口。
* hash/crc32: 新增 `Update` 函数。
* hash/crc64: 实现 64 位 CRC 的新包。
* math: 新增 `ilogb`、`logb`、`remainder`。(感谢 Charles L. Dorian)
* regexp: 新增 `ReplaceAllFunc`、`ReplaceAllStringFunc`。
* runtime: 基于已分配字节数而非正在使用的页面来调度垃圾回收。
* strings: 使 `Split(s, "", n)` 更快。(感谢 Spring Mc)
* syscall: 最小化的 mingw 版 syscall。(感谢 Alex Brainman)
* template: 新增 `ParseFile`、`MustParseFile`。
2010-03-04
有一项语言变更:支持将字符串转换为 []byte 或 []int。这使得 strings.Bytes 和 strings.Runes 函数被弃用。
您可以使用以下 gofmt 命令转换现有代码:
gofmt -r 'strings.Bytes(x) -> []byte(x)' -w 文件或目录列表
gofmt -r 'strings.Runes(x) -> []int(x)' -w 文件或目录列表
运行这些命令后,您可能需要删除未使用的 "strings" 包导入。
其他变更与修复:
* 6l/8l/5l:新增 -r 选项
* 8g:使 a[byte(x)] 截断 x
* codereview.py:修复与 hg >=1.4.3 的兼容性
* crypto/blowfish:新增包(感谢 Raif S. Naffah)
* dashboard:更多性能优化
* fmt:在 %q 中使用 String 方法获取要加引号的值
* gofmt:若干外观优化
* http:修复 Connection: close 的处理,http.Post 中的 bug
* net:修正 DNS 配置,
修复网络超时边界条件,
在 Dial 中为 IPv6 地址添加 [ ]
* path:新增 Match,
修复 Match 中非贪婪星号的 bug(感谢 Kevin Ballard)
* strings:删除 Bytes、Runes(见上文)
* tests:一个埃拉托斯特尼风格的并发质数筛选器(感谢 Anh Hai Trinh)
2010-02-23
此版本主要是 bug 修复和少量新增代码。
没有语言变更。
6g/5g/8g:bug 修复
8a/8l:新增 FCMOVcc 指令(感谢 Evan Shaw 和 Charles Dorian)
crypto/x509:支持证书创建
dashboard:通过缓存避免数据存储查询
exec:为 Run 新增目录参数
godoc:bug 修复和代码清理
http:持续实现和 bug 修复(感谢 Petar Maymounkov)
json:修复 Marshal 中带引号的字符串(感谢 Sergei Skorobogatov)
math:更多函数、测试用例和基准测试(感谢 Charles L. Dorian)
misc/bbedit:将预声明标识符视为“关键字”(感谢 Anthony Starks)
net:禁用 UDP 服务器测试(在各种架构上不稳定)
runtime:绕过 Linux 内核中 futex 的 bug,
pchw 现在非常小
sync:修复以在 armv5 上工作(感谢 Dean Prichard)
websocket:修复二进制帧大小解码(感谢 Timo Savola)
xml:在非严格模式下允许不加引号的属性值(感谢 Amrut Joshi)
在 Unmarshal 中将 bool 视为值(感谢 Michael Hoisie)
2010-02-17
有两项小的语言变更:
* 源文件中可能拒绝 NUL 字节,并且工具确实会拒绝它们。
* 定义了从 string 到 []int 和 []byte 的转换,但尚未实现。
其他变更与修复:
* 5a/6a/8a/5c/6c/8c:移除 -I 和 -D 选项的固定大小数组(感谢 Dean Prichard)
* 5c/6c/8c/5l/6l/8l:新增 -V 标志以显示版本号
* 5c/6c/8c:外部预处理器使用 "cpp" 而非 "/bin/cpp"(感谢 Giles Lean)
* 8a/8l:新增 CMOVcc 指令(感谢 Evan Shaw)
* 8l:pe 可执行文件构建代码更改,包含 kernel32.dll 函数的导入表(感谢 Alex Brainman)
* 5g/6g/8g:bug 修复
* asn1:bug 修复和补充(包括 marshaling)
* build:修复 Native Client、Linux/ARM 的构建
* dashboard:显示基准测试,新增垃圾回收器基准测试
* encoding/pem:新增 marshaling 支持
* exp/draw:nil mask 的快速路径
* godoc:支持 $GOROOT 之外的目录
* http:将 Response 或 Request 写入线路时排序头部键(感谢 Petar Maymounkov)
* math:特殊情况和新函数(感谢 Charles Dorian)
* mime:新增包,用于 http(感谢 Michael Hoisie)
* net:dns bug 修复 - 使用随机请求 ID
* os:完成 File 的终结,以关闭 fd。
* path:使 Join 可变参数(感谢 Stephen Weinberg)
* regexp:优化 bug 修复
* runtime:杂项修复和优化
* syscall:使 OS X、FreeBSD 上的 Umask 签名与 Linux 匹配。(感谢 Giles Lean)
2010-02-04
有一项语言变更:支持 ...T 参数:
http://golang.org/doc/go_spec.html#Function_types
您现在可以在 Go Dashboard 上检查各种平台的构建状态:
http://godashboard.appspot.com
* 5l/6l/8l:若干小修复
* 5a/6a/8a/5l/6l/8l:避免 symb 缓冲区溢出(感谢 Dean Prichard)
* compress/gzip:gzip deflater(即,写入器)
* debug/proc:新增 mingw 特定构建存根(感谢 Joe Poirier)
* exp/draw:在 Draw 中分离源点和掩码点
* fmt:在 Printf 中安全处理 nil
* gccgo:错误消息现在与 gc 的匹配
* godoc:若干修复
* http:bug 修复,Request/Response 修订(感谢 Petar Maymounkov)
* image:新增 image.A 类型以表示抗锯齿字体字形
新增命名颜色(例如 image.Blue),适用于 exp/draw
* io:修复了 Pipe 中的 bug
* malloc:合并到 package runtime
* math:修复 FreeBSD 上的测试(感谢 Devon H. O'Dell)
新增函数;更新测试和特殊情况(感谢 Charles L. Dorian)
* os/signal:将 SIGCHLD 发送到 Incoming(感谢 Chris Wedgwood)
* reflect:为 reflect 新增 StringHeader
* runtime:新增 SetFinalizer
* time:在中断期间休眠(感谢 Chris Wedgwood)
新增 RFC822 格式
使用两个 goroutine 处理所有 ticker 的实验性 Ticker 实现
* xml:允许 XML 元素名称中的下划线(感谢 Michael Hoisie)
在 xml.Unmarshal 中允许任何标量类型
2010-01-27
有两项小的语言变更:现在定义了 chan <- chan int 的含义,并且返回函数的函数无需对结果类型加括号。
有一项重要的实现变更:编译器可以处理在单个二进制文件中使用相同名称的多个包。
在 gc 编译器中,这需要确保您始终使用一致的导入路径导入特定包。
在 gccgo 编译器中,代价是您必须使用 -fgo-prefix 标志传递唯一的前缀(类似于最终的导入路径)。**5a/6a/8a**: 避免使用固定大小的缓冲区(感谢 Dean Prichard)
**5g, 6g, 8g**: 许多小错误修复
**bufio**: 使 Writer.WriteString 与 bytes.Buffer.WriteString 具有相同的签名
**container/list**: 新增 PushFrontList, PushBackList 方法(感谢 Jan Hosang)
**godoc**: 去除搜索查询中的空格(感谢 Christopher Wedgwood)
**hash**: 说明 Sum 方法不会改变状态,修复加密哈希
**http**: 错误修复,修订 Request/Response(感谢 Petar Maymounkov)
**math**: 处理更多 IEEE 754 特殊情况(感谢 Charles Dorian)
**misc/dashboard**: 新的构建仪表盘
**net**: 允许 UDP 广播,使用 /etc/hosts 解析名称(感谢 Yves Junqueira, Michael Hoisie)
**netchan**: 新的用于通过网络连接 channel 的包雏形
**os**: 允许在 Hostname 测试中使用 FQDN(感谢 Icarus Sparry)
**reflect**: 修复 Call 方法中的垃圾回收 bug
**runtime**: 在 runtime/pchw 中演示 Go 在裸机(模拟)上的运行,修复 OS X 上的性能问题
**spec**: 阐明 `chan <- chan int` 的含义,允许 `func() func() int`,定义 `... T`(尚未实现)
**template**: 可以使用 interface 值
**time**: 修复 +0000 时区问题,增强 tick.Stop 的健壮性
**xgb**: 支持经过认证的连接(感谢 Firmansyah Adiputra)
**xml**: 新增 Escape 函数(感谢 Stephen Weinberg)
2010-01-13
此版本主要是错误修复,附带少量新代码。
没有语言变更。
build: $GOBIN 不再需要必须包含在 $PATH 中(感谢 Devon H. O'Dell),新增包目标 "make bench" 用于运行基准测试
8g: 更快的 float -> uint64 转换(感谢 Evan Shaw)
5g, 6g, 8g:
清理 opnames.h 以避免过时的错误(感谢 Yongjian Xu),若干小的编译器修复
5g, 6g, 8g, 5l, 6l, 8l: 忽略 $GOARCH,它由工具名称隐含
6prof: 支持为 google-perftools 的 pprof 写入输入文件
asn1: 修复一些结构处理 bug
cgo: 许多错误修复(感谢 Devon H. O'Dell)
codereview: 重复执行 "hg mail" 会发送 "please take another look" 提示
gob: 为未来扩展保留 id
godoc: 区分 HTML 生成与纯文本 HTML 转义(感谢 Roger Peppe)
gofmt: 小错误修复,移除 -oldprinter 标志
http: 新增 CanonicalPath(感谢 Ivan Krasin),避免 Response.Write 中的头部重复,正确转义/反转义 URL 各部分
io: 新增接口 ReadByter
json: 改进错误信息,修复 Marshal 中的指针处理(感谢 Ivan Krasin)
libmach: 反汇编 FUCOMI 等指令(感谢 Evan Shaw)
math: 为大多数函数和 386 硬件 Sqrt 处理特殊情况(感谢 Charles Dorian)
misc/dashboard: 在 godashboard.appspot.com 开始构建仪表盘
misc/emacs: 处理新的分号规则(感谢 Austin Clements),修复空缓冲区 bug(感谢 Kevin Ballard)
misc/kate: 高亮改进(感谢 Evan Shaw)
os/signal: 新增信号名称:signal.SIGHUP 等(感谢 David Symonds)
runtime: 初步的 Windows 支持(感谢 Hector Chu),通过抢占轮询减少垃圾回收器暂停
scanner: 新的轻量级 scanner 包
template: 修复涉及分隔块前空格的 bug
test/bench: 更新计时
time: 新的 Format, Parse 函数
2010-01-05
此版本主要是错误修复。没有语言变更。
6prof: 现在可以在 386 上工作
8a, 8l: 新增 FCOMI, FCOMIP, FUCOMI, 和 FUCOMIP(感谢 Evan Shaw)
big: 修复小数上的 ProbablyPrime
container/vector: 更快的基于 [] 的实现(感谢 Jan Mercl)
crypto/tls: 扩展和下一协议协商
gob: 一个编码错误修复,一个解码错误修复
image/jpeg: 支持 RST 标记
image/png: 支持透明调色板图像
misc/xcode: 改进支持(感谢 Ken Friedenbach)
net: Dial 出错时返回 nil Conn(感谢 Roger Peppe)
regexp: 新增 Regexp.NumSubexp(感谢 Peter Froehlich)
syscall: 在 FreeBSD 上新增 Nanosleep(感谢 Devon H. O'Dell)
template: 可以在 .repeated 部分中使用 map
现在有一个公开的路线图,在代码仓库中和线上均可访问:
https://golang.org/doc/devel/roadmap.html(已不再可用)。
2009-12-22
自上一版本以来,语言进行了一次大的语法变更,已在本邮件列表中进行了广泛讨论:现在,在语句结束标记和换行符之间会隐式插入分号。
详见 http://groups.google.com/group/golang-nuts/t/5ee32b588d10f2e9。
默认情况下,gofmt 现在解析并打印新的、更轻量的语法。
要转换用旧语法编写的程序,可以使用:
gofmt -oldparser -w *.go
由于所有内容都需要重新格式化,我们借此机会改变了 gofmt 进行对齐的方式。现在 gofmt 在行首使用制表符进行基本的代码对齐,但使用空格进行内部列的对齐。因此,在一个使用等宽字体的编辑器中,你可以选择自己的制表符大小来更改缩进,无论你选择什么制表符大小,列都会正确对齐。
除了语法和格式变更之外,还有许多小的修复和更新:
**6g、8g、5g**:修复众多错误,改进寄存器分配优化;修复了涉及 mkbuiltin 的构建过程问题(感谢 Yongjian Xu);为具体类型添加方法表达式
**8l**:支持 Windows PE 文件(感谢 Hector Chu)
**bytes**:更高效的 Buffer 处理
**bytes、strings**:新增函数 Fields(感谢 Andrey Mirtchovski)
**cgo**:处理枚举类型(感谢 Moriyoshi Koizumi);处理含位域的结构体,支持多文件(感谢 Devon H. O'Dell);支持将 .so 安装到非标准路径
**crypto/sha256**:新增 SHA 256 包(感谢 Andy Davis)
**encoding/binary**:支持固定大小值的切片(感谢 Maxim Ushakov)
**exp/vector**:实验性的替代向量表示(感谢 Jan Mercl)
**fmt**:支持对 chan、map、slice 类型使用 %p 格式
**gob**:修复若干错误
**http**:支持基本身份验证(感谢 Ivan Krasin)
**image/jpeg**:基础 JPEG 解码器
**math**:在 Pow 函数中正确处理 Inf 和 NaN(感谢 Charles Dorian)
**misc/bash**:bash 补全文件(感谢 Alex Ray)
**os/signal**:支持处理 Unix 信号(感谢 David Symonds)
**rand**:生成齐普夫分布的随机值(感谢 William Josephson)
**syscall**:修复 32 位机器上错误的返回错误(感谢 Christopher Wedgwood)
**syslog**:新增用于写入 Unix syslog 守护进程的包(感谢 Yves Junqueira)
**template**:将自动调用无参方法
**time**:新增 ISO8601 格式生成器(感谢 Ben Olive)
**xgb**:将生成器转换为新语法(感谢 Tor Andersson)
**xml**:改进标签名到 Go 标识符的映射(感谢 Kei Son);改进对意外 EOF 的处理(感谢 Arvindh Rajesh Tamilmani)
---
2009-12-09
自上次发布以来,语言有两处变更:
* 新增内置函数 copy(dst, src),它将 n = min(len(dst), len(src)) 个元素从 src 复制到 dst,并返回 n。
即使 dst 和 src 有重叠也能正确工作。bytes.Copy 已移除。
请使用以下命令转换您的程序:
gofmt -w -r 'bytes.Copy(d, s) -> copy(d, s)' *.go
* 新增语法 x[lo:] 是 x[lo:len(x)] 的简写。
请使用以下命令转换您的程序:
gofmt -w -r 'a[b:len(a)] -> a[b:]' *.go
此外,还有许多较小的修复和更新:
* 6g/8g/5g:修复众多错误
* 8g:修复 386 浮点栈错误(感谢 Charles Dorian)
* all.bash:现在即使 $GOROOT 路径包含空格也能工作(感谢 Sergio Luis O. B. Correia),
开始支持使用 mingw 构建(感谢 Hector Chu),
支持 FreeBSD(感谢 Devon O'Dell)
* big:在 386 上性能大幅提升
* bytes:新增函数 IndexByte,汇编实现;
新增函数 Runes(感谢 Peter Froehlich),
对 bytes.Buffer 进行性能调优
* codereview:修复各种错误
* container/vector:New 函数已移除;只需声明一个 Vector。
调用 Resize 来设置长度和容量。
* cgo:修复众多错误(感谢 Eden Li)
* crypto:新增 MD4(感谢 Chris Lennert),
新增 XTEA(感谢 Adrian O'Grady)。
* crypto/tls:基础客户端
* exp/iterable:新增函数(感谢 Michael Elkins)
* exp/nacl:native client 树再次构建成功
* fmt:初步性能调优
* go/ast:更强大的 Visitor(感谢 Roger Peppe)
* gob:修复若干错误
* gofmt:改进标准输入处理和错误报告(感谢 Fazlul Shahriar),
新增 -r 标志用于程序重写
* gotest:支持 Benchmark 函数(感谢 Trevor Strohman)
* io:ReadFile、WriteFile、ReadDir 现在位于独立的 io/ioutil 包中。
* json:新增 Marshal 函数(感谢 Michael Hoisie),
改进空白符处理(感谢 Andrew Skiba),
解码到原生数据结构(感谢 Sergey Gromov),
处理 nil 接口值(感谢 Ross Light)。
* math:正确处理大角度的 sin/cos
* net:改进 Close 处理(感谢 Devon O'Dell 和 Christopher Wedgwood),
支持 UDP 广播(感谢 Jonathan Wills),
支持空数据包
* rand:顶层函数现在可安全地从多个协程调用
(感谢 Roger Peppe)。
* regexp:一些简单的优化
* rpc:改进错误处理,修复若干错误
* runtime:改进 OS X 上的信号处理,修复 malloc 问题,
移除了全局 channel 锁。
* sync:RWMutex 现在允许并发读取(感谢 Péter Szabó)
* template:可以使用映射作为数据(感谢 James Meneghello)
* unicode:更新至 Unicode 5.2。
* websocket:新增包(感谢 Fumitoshi Ukai)
* xgb:初步的 X Go 绑定(感谢 Tor Andersson)
* xml:修复崩溃问题(感谢 Vish Subramanian)
* misc:bbedit 配置(感谢 Anthony Starks),
kate 配置(感谢 Evan Shaw)