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ư ParseURLURLEscape) đã đượ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.RGBAimage.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 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 jsonxml 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 Float64SliceStringSlice.

Hàm Split của Package strings đã được tách thành SplitSplitN. 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.

Package image/draw's hàm Draw hiện nhận thêm một đối số, toán tử kết hợp. Nếu không chắc, hãy sử dụng draw.Over.

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 SignalUnixSignal 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ịchthờ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 GobEncoderGobDecoder. Đ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.Intbig.Rat.

Package http đã được thiết kế lại. Đối với client, có các abstraction ClientTransport 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 OpenCreate đơ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à TypeOfValueOf. Để 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-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.