Cài đặt Go từ mã nguồn

Trang này mô tả cách biên dịch và chạy Go từ mã nguồn. Để cài đặt bằng trình cài đặt, xem Tải xuống và cài đặt.

Giới thiệu

Go là một dự án mã nguồn mở, phân phối theo giấy phép kiểu BSD. Tài liệu này giải thích cách lấy mã nguồn, biên dịch trên máy của bạn và chạy chúng.

Hầu hết người dùng không cần thực hiện điều này mà sẽ cài đặt từ các gói nhị phân được biên dịch sẵn như mô tả trong Tải xuống và cài đặt, một quy trình đơn giản hơn nhiều. Tuy nhiên, nếu bạn muốn tham gia phát triển những gói nhị phân đó, hãy tiếp tục đọc.

Có hai bộ công cụ biên dịch Go chính thức. Tài liệu này tập trung vào trình biên dịch và công cụ Go gc. Để biết cách làm việc với gccgo, một trình biên dịch truyền thống hơn sử dụng back end của GCC, xem Thiết lập và sử dụng gccgo.

Các trình biên dịch Go hỗ trợ các tập lệnh sau:

amd64, 386
Tập lệnh x86, 64-bit và 32-bit.
arm64, arm
Tập lệnh ARM, 64-bit (AArch64) và 32-bit.
loong64
Tập lệnh LoongArch 64-bit.
mips64, mips64le, mips, mipsle
Tập lệnh MIPS, big-endian và little-endian, 64-bit và 32-bit.
ppc64, ppc64le
Tập lệnh PowerPC 64-bit, big-endian và little-endian.
riscv64
Tập lệnh RISC-V 64-bit.
s390x
Kiến trúc IBM z/Architecture.
wasm
WebAssembly.

Các trình biên dịch có thể nhắm đến các hệ điều hành AIX, Android, DragonFly BSD, FreeBSD, Illumos, Linux, macOS/iOS (Darwin), NetBSD, OpenBSD, Plan 9, Solaris và Windows (mặc dù không phải tất cả hệ điều hành đều hỗ trợ mọi kiến trúc).

Danh sách các cổng được coi là "hạng nhất" có tại trang wiki first class ports.

Tập hợp đầy đủ các tổ hợp được hỗ trợ được liệt kê trong phần thảo luận về biến môi trường bên dưới.

Xem trang Go Wiki MinimumRequirements để biết yêu cầu hệ thống tổng thể.

Cài đặt các tệp nhị phân trình biên dịch Go để khởi động

Bộ công cụ Go được viết bằng Go. Để biên dịch nó, bạn cần có một trình biên dịch Go đã được cài đặt. Các script thực hiện việc biên dịch ban đầu tìm kiếm lệnh "go" trong $PATH, vì vậy miễn là bạn đã cài đặt Go trong hệ thống và cấu hình trong $PATH, bạn đã sẵn sàng để biên dịch Go từ mã nguồn. Hoặc nếu muốn, bạn có thể đặt $GOROOT_BOOTSTRAP thành thư mục gốc của một bản cài đặt Go để sử dụng biên dịch bộ công cụ Go mới; $GOROOT_BOOTSTRAP/bin/go là lệnh go sẽ được dùng.

Phiên bản Go tối thiểu cần thiết phụ thuộc vào phiên bản Go mục tiêu:

Có bốn cách để lấy bộ công cụ khởi động:

Các phương pháp này được mô tả chi tiết bên dưới.

Bộ công cụ khởi động từ bản phát hành nhị phân

Để sử dụng một bản phát hành nhị phân làm bộ công cụ khởi động, xem trang tải xuống hoặc sử dụng bất kỳ bản phân phối Go đóng gói nào đáp ứng yêu cầu phiên bản tối thiểu.

Bộ công cụ khởi động từ mã nguồn biên dịch chéo

Để biên dịch chéo một bộ công cụ khởi động từ mã nguồn, điều này là cần thiết trên các hệ thống mà Go 1.4 không nhắm đến (ví dụ linux/ppc64le), hãy cài đặt Go trên một hệ thống khác và chạy bootstrap.bash.

Khi chạy như (ví dụ)

$ GOOS=linux GOARCH=ppc64 ./bootstrap.bash

bootstrap.bash biên dịch chéo một bộ công cụ cho tổ hợp GOOS/GOARCH đó, để lại cây kết quả trong ../../go-${GOOS}-${GOARCH}-bootstrap. Cây đó có thể được sao chép sang một máy có kiểu mục tiêu tương ứng và được dùng làm GOROOT_BOOTSTRAP để khởi động một bản biên dịch cục bộ.

Bộ công cụ khởi động sử dụng gccgo

Để sử dụng gccgo làm bộ công cụ khởi động, bạn cần sắp xếp để $GOROOT_BOOTSTRAP/bin/go là công cụ go đi kèm với gccgo 5. Ví dụ trên Ubuntu Vivid:

$ sudo apt-get install gccgo-5
$ sudo update-alternatives --set go /usr/bin/go-5
$ GOROOT_BOOTSTRAP=/usr ./make.bash

Bộ công cụ khởi động từ mã nguồn C

Để biên dịch bộ công cụ khởi động từ mã nguồn C, sử dụng nhánh git release-branch.go1.4 hoặc go1.4-bootstrap-20171003.tar.gz, chứa mã nguồn Go 1.4 cùng các bản sửa lỗi tích lũy để giữ cho công cụ hoạt động trên các hệ điều hành mới hơn. (Go 1.4 là bản phân phối cuối cùng mà bộ công cụ được viết bằng C.) Sau khi giải nén mã nguồn Go 1.4, cd vào thư mục con src, đặt CGO_ENABLED=0 trong môi trường, và chạy make.bash (hoặc, trên Windows, make.bat).

Sau khi giải nén mã nguồn Go 1.4 vào thư mục GOROOT_BOOTSTRAP, bạn phải giữ bản clone git này ở nhánh release-branch.go1.4. Cụ thể, đừng cố tái sử dụng bản clone git này ở bước sau có tên "Fetch the repository." Bộ công cụ khởi động go1.4 phải có khả năng duyệt đúng cây mã nguồn go1.4 mà nó giả định là nằm trong thư mục gốc kho lưu trữ này.

Lưu ý rằng Go 1.4 không chạy trên tất cả các hệ thống mà các phiên bản Go sau này hỗ trợ. Đặc biệt, Go 1.4 không hỗ trợ các phiên bản macOS hiện tại. Trên những hệ thống như vậy, bộ công cụ khởi động phải được lấy bằng một trong các phương pháp khác.

Cài đặt Git (nếu cần)

Để thực hiện bước tiếp theo, bạn phải có Git đã được cài đặt. (Kiểm tra rằng bạn có lệnh git trước khi tiếp tục.)

Nếu bạn chưa có cài đặt Git hoạt động, hãy làm theo hướng dẫn trên trang Git downloads.

(Tùy chọn) Cài đặt trình biên dịch C

Để biên dịch cài đặt Go có hỗ trợ cgo, cho phép các chương trình Go import thư viện C, trước tiên phải cài đặt một trình biên dịch C như gcc hoặc clang. Hãy thực hiện bằng phương pháp cài đặt tiêu chuẩn của hệ thống.

Để biên dịch mà không có cgo, đặt biến môi trường CGO_ENABLED=0 trước khi chạy all.bash hoặc make.bash.

Tải kho lưu trữ về máy

Chuyển đến thư mục nơi bạn muốn cài đặt Go, và đảm bảo thư mục goroot chưa tồn tại. Sau đó clone kho lưu trữ và checkout tag phát hành hoặc nhánh phát hành mới nhất (go1.22.0, hoặc release-branch.go1.22, chẳng hạn):

$ git clone https://go.googlesource.com/go goroot
$ cd goroot
$ git checkout <tag>

Trong đó <tag> là chuỗi phiên bản của bản phát hành.

Go sẽ được cài đặt trong thư mục nơi nó được checkout. Ví dụ, nếu Go được checkout trong $HOME/goroot, các tệp thực thi sẽ được cài đặt trong $HOME/goroot/bin. Thư mục có thể có bất kỳ tên nào, nhưng lưu ý rằng nếu Go được checkout trong $HOME/go, nó sẽ xung đột với vị trí mặc định của $GOPATH. Xem GOPATH bên dưới.

Nhắc nhở: Nếu bạn đã chọn cũng biên dịch các tệp nhị phân khởi động từ mã nguồn (ở một phần trước), bạn vẫn cần git clone lại tại điểm này (để checkout <tag> mới nhất), vì bạn phải giữ kho lưu trữ go1.4 của mình tách biệt.

Nếu bạn dự định sửa đổi mã nguồn go và đóng góp các thay đổi vào dự án, hãy chuyển kho lưu trữ của bạn khỏi tag phát hành, sang nhánh master (phát triển). Nếu không, bỏ qua bước này.

$ git checkout master

Cài đặt Go

Để biên dịch bản phân phối Go, chạy

$ cd src
$ ./make.bash

(Để biên dịch trên Windows, dùng make.bat.)

Nếu mọi thứ diễn ra tốt, quá trình sẽ kết thúc bằng cách in ra:

---
Installed Go for linux/amd64 in /home/you/go.
Installed commands in /home/you/go/bin.
*** You need to add /home/you/go/bin to your $PATH. ***

trong đó các chi tiết trên vài dòng cuối phản ánh hệ điều hành, kiến trúc và thư mục gốc được dùng trong quá trình cài đặt.

Để biết thêm thông tin về các cách kiểm soát quá trình biên dịch, xem phần thảo luận về biến môi trường bên dưới. Bạn cũng có thể chạy all.bash (hoặc all.bat) để chạy các bài kiểm thử quan trọng cho Go, có thể mất nhiều thời gian hơn so với việc chỉ biên dịch Go.

Kiểm tra cài đặt

Kiểm tra rằng Go đã được cài đặt đúng bằng cách biên dịch một chương trình đơn giản.

Tạo một tệp tên hello.go và đặt chương trình sau vào đó:

package main

import "fmt"

func main() {
	fmt.Printf("hello, world\n")
}

Sau đó chạy nó bằng công cụ go:

$ go run hello.go
hello, world

Nếu bạn thấy thông báo "hello, world" thì Go đã được cài đặt đúng.

Thiết lập môi trường làm việc

Bạn gần xong rồi. Chỉ cần thực hiện thêm một vài bước thiết lập.

Cách viết mã Go Tìm hiểu cách thiết lập và sử dụng các công cụ Go

Tài liệu Cách viết mã Go cung cấp hướng dẫn thiết lập cần thiết để sử dụng các công cụ Go.

Cài đặt các công cụ bổ sung

Mã nguồn của một số công cụ Go (bao gồm gopls) được lưu trữ trong kho lưu trữ golang.org/x/tools. Để cài đặt một trong các công cụ (gopls trong trường hợp này):

$ go install golang.org/x/tools/gopls@latest

Tài nguyên cộng đồng

Các tài nguyên cộng đồng thông thường được liệt kê trên trang trợ giúp có các nhà phát triển tích cực có thể giúp bạn giải quyết vấn đề khi cài đặt hoặc phát triển. Đối với những ai muốn cập nhật thường xuyên, còn có một danh sách thư khác, golang-checkins, nhận thông báo tóm tắt mỗi lần có commit vào kho lưu trữ Go.

Có thể báo cáo lỗi bằng trình theo dõi vấn đề Go.

Cập nhật theo các bản phát hành

Các bản phát hành mới được thông báo trên danh sách thư golang-announce. Mỗi thông báo đề cập đến tag phát hành mới nhất, ví dụ go1.9.

Để cập nhật một cây nguồn đã có lên bản phát hành mới nhất, bạn có thể chạy:

$ cd go/src
$ git fetch
$ git checkout <tag>
$ ./all.bash

Trong đó <tag> là chuỗi phiên bản của bản phát hành.

Các biến môi trường tùy chọn

Các công cụ Go có thể được tùy chỉnh thông qua biến môi trường. Không có biến nào là bắt buộc khi biên dịch, nhưng bạn có thể muốn đặt một số để ghi đè các giá trị mặc định. Đặt các biến môi trường này trong khi chạy make.bash sẽ thiết lập giá trị mặc định cho bộ công cụ mới biên dịch. Khi sử dụng công cụ, bạn có thể ghi đè các giá trị mặc định này cho một bản biên dịch cụ thể, như được mô tả trong tài liệu lệnh go.

Lưu ý rằng $GOARCH$GOOS xác định môi trường mục tiêu, không phải môi trường bạn đang chạy. Thực chất, bạn luôn biên dịch chéo. Theo kiến trúc, chúng tôi muốn nói đến loại tệp nhị phân mà môi trường mục tiêu có thể chạy: một hệ thống x86-64 đang chạy hệ điều hành chỉ 32-bit phải đặt GOARCH thành 386, không phải amd64.

Nhắc lại, không cần đặt bất kỳ biến nào trong số này để biên dịch, cài đặt và phát triển cây Go.