Lịch sử phát hành trước Go 1
Trang này tóm tắt các thay đổi giữa các bản phát hành ổn định của Go trước Go 1. Xem trang Lịch sử phát hành để biết ghi chú về các bản phát hành gần đây.
r60 (released 2011/09/07)
Bản phát hành r60 tương ứng với
weekly.2011-08-17.
Phần này nêu bật những thay đổi quan trọng nhất trong bản phát hành này.
Để xem tóm tắt chi tiết hơn, xem
ghi chú phát hành hàng tuần.
Để xem thông tin đầy đủ, xem
danh sách thay đổi Mercurial.
Ngôn ngữ
Khối "else" hiện được yêu cầu phải có dấu ngoặc nhọn ngoại trừ khi phần thân của "else" là một "if" khác. Vì gofmt luôn đặt những dấu ngoặc nhọn đó vào, các chương trình được định dạng bằng gofmt sẽ không bị ảnh hưởng. Để sửa các chương trình khác, hãy chạy gofmt.
Các gói
Mã phân tích URL và thoát truy vấn của Package http
(như ParseURL và URLEscape) đã được chuyển sang
gói url mới, với một số đơn giản hóa tên.
Mã client có thể được cập nhật tự động bằng gofix.
Package image đã có những thay đổi đáng kể đối với
trường Pix của các kiểu struct như
image.RGBA và
image.NRGBA.
Tuy nhiên, kiểu interface image.Image không thay đổi,
và bạn không cần thay đổi mã của mình nếu bạn không tham chiếu rõ ràng đến các trường Pix.
Ví dụ, nếu bạn giải mã một số hình ảnh
bằng gói image/jpeg, kết hợp chúng bằng
image/draw, rồi mã hóa kết quả bằng
image/png, thì mã của bạn vẫn hoạt động như
trước.
Nếu mã của bạn có tham chiếu đến các trường Pix, xem
weekly.2011-07-19
trong ghi chú snapshot để biết cách cập nhật mã của bạn.
Package template đã được thay thế bằng một
gói tạo template mới (trước đây là exp/template). Gói template
gốc vẫn còn có dạng old/template.
Gói old/template đã bị deprecated và sẽ bị xóa.
Cây Go đã được cập nhật để sử dụng gói template mới. Chúng tôi khuyến khích
người dùng gói template cũ chuyển sang gói mới. Mã sử dụng
template hoặc exp/template sẽ cần thay đổi dòng
import thành "old/template" hoặc "template",
tương ứng.
Công cụ
Goinstall hiện sử dụng cơ chế chọn tag mới.
Khi tải xuống hoặc cập nhật, goinstall tìm kiếm tag hoặc nhánh có tiền tố
"go." tương ứng với phiên bản Go cục bộ. Đối với Go
release.r58, nó tìm go.r58. Đối với
weekly.2011-06-03, nó tìm go.weekly.2011-06-03.
Nếu tag hoặc nhánh go.X cụ thể không được tìm thấy, nó chọn phiên bản
gần nhất trước đó. Nếu tìm thấy tag hoặc nhánh phù hợp, goinstall
sử dụng phiên bản mã đó. Nếu không, nó sử dụng phiên bản mặc định được chọn
bởi hệ thống kiểm soát phiên bản. Các tác giả thư viện được khuyến khích sử dụng
các tên tag hoặc nhánh phù hợp trong kho lưu trữ của họ để làm cho thư viện
dễ tiếp cận hơn.
Các bản sửa đổi nhỏ
r60.1 bao gồm một
bản sửa lỗi trình liên kết, một cặp
bản sửa lỗi goplay
,
một bản sửa lỗi gói json và
một tùy chọn thẻ struct mới.
r60.2 sửa một rò rỉ bộ nhớ liên quan đến map.
r60.3 sửa một lỗi reflect.
r59 (released 2011/08/01)
Bản phát hành r59 tương ứng với
weekly.2011-07-07.
Phần này nêu bật những thay đổi quan trọng nhất trong bản phát hành này.
Để xem tóm tắt chi tiết hơn, xem
ghi chú phát hành hàng tuần.
Để xem thông tin đầy đủ, xem
danh sách thay đổi Mercurial.
Ngôn ngữ
Bản phát hành này bao gồm một thay đổi ngôn ngữ hạn chế việc sử dụng
goto. Về cơ bản, một câu lệnh goto bên ngoài một khối
không thể nhảy đến nhãn bên trong khối đó. Mã của bạn có thể cần thay đổi nếu nó
sử dụng goto.
Xem changeset này để biết quy tắc mới ảnh hưởng đến cây Go như thế nào.
Các gói
Như thường lệ, gofix sẽ xử lý phần lớn các việc viết lại cần thiết cho những thay đổi đối với API gói.
Package http có một
interface FileSystem mới cung cấp quyền truy cập
vào các tệp. Hàm trợ giúp FileServer hiện nhận một
đối số FileSystem thay vì thư mục gốc tệp hệ thống rõ ràng. Bằng cách
triển khai FileSystem của riêng bạn, bạn có thể sử dụng
FileServer để phục vụ dữ liệu tùy ý.
Kiểu ErrorString của Package os đã bị
ẩn. Hầu hết các lần sử dụng os.ErrorString có thể được thay thế bằng
os.NewError.
Package reflect hỗ trợ cơ chế thẻ struct mới cho phép chia sẻ thẻ struct giữa nhiều gói. Trong cơ chế này, các thẻ phải có dạng:
`key:"value" key2:"value2"`
Trường Tag của kiểu StructField hiện
có kiểu StructTag, có
phương thức Get. Các client của json và
xml sẽ cần được cập nhật. Mã viết như thế này
type T struct {
X int "name"
}
nên được chuyển thành
type T struct {
X int `json:"name"` // or `xml:"name"`
}
Sử dụng govet để xác định các thẻ struct cần được thay đổi để sử dụng cú pháp mới.
Kiểu IntArray của Package sort đã được
đổi tên thành IntSlice, và tương tự cho
Float64Slice và
StringSlice.
Hàm Split của Package strings
đã được tách thành Split và
SplitN.
SplitN giống như Split cũ.
Split mới tương đương với SplitN với đối số cuối cùng là -1.
Công cụ
Goinstall hiện cài đặt các gói và lệnh từ các kho lưu trữ từ xa tùy ý (không chỉ Google Code, GitHub, v.v.). Xem tài liệu goinstall để biết chi tiết.
r58 (released 2011/06/29)
Bản phát hành r58 tương ứng với
weekly.2011-06-09
cùng với các bản sửa lỗi bổ sung.
Phần này nêu bật những thay đổi quan trọng nhất trong bản phát hành này.
Để xem tóm tắt chi tiết hơn, xem
ghi chú phát hành hàng tuần.
Để xem thông tin đầy đủ, xem
danh sách thay đổi Mercurial.
Ngôn ngữ
Bản phát hành này sửa một lỗi sử dụng bộ nhớ chưa được khởi tạo trong các chương trình dùng sai goto.
Các gói
Như thường lệ, gofix sẽ xử lý phần lớn các việc viết lại cần thiết cho những thay đổi đối với API gói.
Package http bỏ giá trị trả về finalURL
khỏi phương thức Client.Get. Giá trị
hiện có thể truy cập qua trường Request mới trên http.Response.
Hầu hết các trường hợp sử dụng kiểu map[string][]string đã được
thay thế bằng kiểu Values mới.
Package exec đã được thiết kế lại với API tiện lợi và súc tích hơn.
Hàm Quote của Package strconv
hiện chỉ thoát những điểm mã Unicode không được phân loại là có thể in
bởi unicode.IsPrint.
Trước đây Quote sẽ thoát tất cả các ký tự không phải ASCII.
Điều này cũng ảnh hưởng đến chỉ thị định dạng "%q" của gói fmt.
Hành vi trích dẫn trước đây vẫn có thể dùng qua
hàm QuoteToASCII mới của strconv.
Các kiểu Signal và UnixSignal của Package os/signal đã được chuyển sang gói os.
Package image/draw là tên mới của
exp/draw. Mã liên quan đến GUI từ exp/draw hiện
nằm trong gói exp/gui.
Công cụ
Goinstall hiện tuân theo biến môi trường GOPATH để biên dịch và cài đặt mã của riêng bạn và các thư viện bên ngoài bên ngoài cây Go (và tránh phải viết Makefile).
Các bản sửa đổi nhỏ
r58.1 thêm các thay đổi biên dịch và thời gian chạy để Go chạy trên OS X 10.7 Lion.
r57 (released 2011/05/03)
Bản phát hành r57 tương ứng với
weekly.2011-04-27
cùng với các bản sửa lỗi bổ sung.
Phần này nêu bật những thay đổi quan trọng nhất trong bản phát hành này.
Để xem tóm tắt chi tiết hơn, xem
ghi chú phát hành hàng tuần.
Để xem thông tin đầy đủ, xem
danh sách thay đổi Mercurial.
Công cụ gofix mới tìm các chương trình Go sử dụng API cũ và viết lại chúng để sử dụng các API mới hơn. Sau khi bạn cập nhật lên bản phát hành Go mới, gofix giúp thực hiện những thay đổi cần thiết cho chương trình của bạn. Gofix sẽ xử lý các thay đổi gói http, os và syscall được mô tả bên dưới, và chúng tôi sẽ cập nhật chương trình để theo kịp các thay đổi thư viện trong tương lai. Gofix không thể xử lý tất cả các tình huống một cách hoàn hảo, vì vậy hãy đọc và kiểm tra các thay đổi nó tạo ra trước khi commit chúng. Xem bài đăng blog về gofix để biết thêm thông tin.
Ngôn ngữ
Cú pháp gán nhiều biến thay thế hàm closed.
Cú pháp nhận giá trị từ channel
cho phép giá trị được gán thứ hai tùy chọn, một giá trị boolean
cho biết channel có bị đóng hay không. Mã này:
v := <-ch
if closed(ch) {
// channel is closed
}
nay nên được viết như:
v, ok := <-ch
if !ok {
// channel is closed
}
Các nhãn chưa được sử dụng hiện bị bất hợp lệ, giống như các biến cục bộ chưa được sử dụng.
Các gói
Package gob sẽ mã hóa và giải mã các giá trị của các kiểu triển khai các interface GobEncoder và GobDecoder. Điều này cho phép các kiểu có các trường không được xuất truyền các mô tả nhất quán; ví dụ bao gồm big.Int và big.Rat.
Package http đã được thiết kế lại. Đối với client, có các abstraction Client và Transport mới cho phép kiểm soát nhiều hơn các chi tiết HTTP như header được gửi và chuyển hướng được theo dõi. Các abstraction này giúp dễ dàng triển khai các client tùy chỉnh bổ sung chức năng như OAuth2. Đối với server, ResponseWriter đã bỏ các phương thức không cần thiết. Các phương thức Hijack và Flush không còn bắt buộc nữa; mã có thể kiểm tra chúng bằng cách kiểm tra xem một giá trị cụ thể có triển khai Hijacker hay Flusher hay không. Các phương thức RemoteAddr và UsingTLS được thay thế bằng các trường RemoteAddr và TLS của Request. Phương thức SetHeader được thay thế bằng phương thức Header; kết quả của nó, kiểu Header, triển khai Set và các phương thức khác.
Package net
bỏ đối số laddr khỏi Dial
và bỏ giá trị trả về cname
khỏi LookupHost.
Triển khai hiện sử dụng cgo để triển khai
tra cứu tên mạng bằng hàm getaddrinfo(3) của thư viện C
khi có thể. Điều này đảm bảo rằng chương trình Go và C
phân giải tên theo cùng một cách và cũng tránh được
tường lửa cấp ứng dụng OS X.
Package os giới thiệu các hàm Open và Create đơn giản hóa. Open ban đầu hiện có thể dùng dưới dạng OpenFile. Ba đối số cuối của StartProcess đã được thay thế bằng một con trỏ đến ProcAttr.
Package reflect đã được thiết kế lại.
Type hiện là một interface triển khai
tất cả các phương thức kiểu có thể có.
Thay vì một type switch trên một Type t, hãy switch trên t.Kind().
Value hiện là một giá trị struct
triển khai tất cả các phương thức giá trị có thể có.
Thay vì một type switch trên một Value v, hãy switch trên v.Kind().
Typeof và NewValue nay được gọi là TypeOf và ValueOf.
Để tạo một Value có thể ghi, dùng New(t).Elem() thay vì Zero(t).
Xem mô tả thay đổi
để biết đầy đủ chi tiết.
API mới cho phép triển khai Value hiệu quả hơn
tránh được nhiều phân bổ bộ nhớ mà API trước yêu cầu.
Hãy nhớ rằng gofix sẽ xử lý phần lớn các việc viết lại cần thiết cho những thay đổi đối với API gói.
Công cụ
Gofix, một lệnh mới, được mô tả ở trên.
Gotest hiện là chương trình Go thay vì shell script.
Cờ -test.short mới kết hợp với hàm Short của gói testing
cho phép bạn viết các bài kiểm thử có thể chạy ở chế độ bình thường hoặc “ngắn”;
all.bash chạy kiểm thử ở chế độ ngắn để giảm thời gian cài đặt.
Các Makefile biết về cờ này: dùng make testshort.
Hỗ trợ thời gian chạy hiện triển khai profiling CPU và bộ nhớ.
Các cờ -test.cpuprofile và
-test.memprofile mới của Gotest giúp dễ dàng
profiling các bài kiểm thử.
Để thêm profiling vào web server, xem tài liệu http/pprof.
Cho các mục đích sử dụng khác, xem tài liệu runtime/pprof.
Các bản sửa đổi nhỏ
r57.1 sửa một lỗi tham chiếu con trỏ nil trong http.FormFile.
r57.2 sửa một lỗi sử dụng bộ nhớ chưa được khởi tạo trong các chương trình dùng sai goto.
r56 (released 2011/03/16)
Bản phát hành r56 là bản phát hành ổn định đầu tiên và tương ứng với
weekly.2011-03-07.1.
Việc đánh số bắt đầu từ 56 vì trước bản phát hành này,
những gì chúng tôi hiện gọi là snapshot hàng tuần được gọi là bản phát hành.