Mình được vài đồng nghiệp khuyên là mỗi năm nên học 1 ngôn ngữ lập trình mới, viết một chương trình với ngôn ngữ đó, mở mang thêm kiến thức của mình về thế giới lập trình.
Xuất thân từ một lập trình viên PHP – một ngôn ngữ thông dịch, mình thấy khá thú vị với các ngôn ngữ biên dịch như Java, Golang.
Xin gửi đến các bạn series “Golang cơ bản”.
Giới thiệu
Phần cứng của máy tính trong kỉ nguyên “big data” đã phát triển không ngừng, các ngôn ngữ lập trình thì không như vậy. Các server mạnh mẽ xuất hiện với số “nhân” lên tới 64, 128 hoặc hơn. Nhưng nhiều ngôn ngữ lập trình chỉ dùng 1 core
Đi cùng với phần cứng, kĩ thuật lập trình cũng phát triển. Ngày nay, hiếm có chương trình phần mềm nào được viết với chỉ một người. Một dự án lớn được chia thành nhiều dự án nhỏ, mọi người có nhu cầu “đóng gói code” để cùng nhau sử dụng chung.
Một số ngôn ngữ đã ra đời để giải quyết các vấn đề trên, trong đó có Golang.
Golang là một ngôn ngữ mã nguồn mở dạng biên dịch được Google giới thiệu vào năm 2009 với tiêu chí dễ chơi, dễ trúng thường.
Golang tập trung vào các vấn đề sau:
- Tăng tốc độ phát triển: khi so với Java, C hay C++, Golang có tốc độ biên dịch vượt trội.
- Concurrency: với goroutines, việc lập trình tận dung tối đa sức mạnh phần cứng.
- Quản lý bộ nhớ.
- Đơn giản: dễ code, tái sử dụng code.
Hello Golang
Golang hỗ trợ cả ba nền tảng Mac, Windows, Linux. Bạn cài đặt bạn có thể xem hướng dẫn tại đây
Tạo file hello.go
package main
import "fmt"
func main() {
fmt.Println("Hello, Go")
}
Chạy một chương trình Go ta gõ lệnh
/* chạy file hello ngay lập tức */ go run hello.go
hoặc
/* biên dịch ra file hello */ go build hello.go ./hello

Các keyword trong Golang
Tên function, variable, constant, type, và package luôn bắt đầu bằng chứ viết thường.
Như các ngôn ngữ khác, Golang có các keyword quan trọng, chúng ta không thể dùng đặt tên.
break default func interface select case defer go map struct chan else goto package switch const fallthrough if range type continue for import return var
Ngoài ra, còn các constant, type, function.
Constants:
true false iota nil
Types:
int int8 int16 int32 int64 uint uint8 uint16 uint32 uint64 uintptr float32 float64 complex128 complex64 bool byte rune string error
Functions:
make len cap new append copy close delete complex real imag panic recover
Khai báo biến
Để khai báo biến ta dùng từ khóa var
var i, j, k int // int, int, int var b, f, s = true, 2.3, "four" // bool, float64, string
Khai báo ngắn gọn
anim := gif.GIF{LoopCount: nframes}
freq := rand.Float64() * 3.0
Pointers
x := 1 p := &x // p có kiểu dữ liệu *int fmt.Println(*p) // "1" *p = 2 // equivalent to x = 2 fmt.Println(x) // "2"
Type Declarations
Trong Golang, ta có thể tự định nghĩa ra kiểu dữ liệu từ những kiểu dữ liệu cơ bản. Ngoài ra, ta có thể viết thêm phương thức cho kiểu dữ liệu ra vừa định nghĩa.
package tempconv
import "fmt"
type Celsius float64
type Fahrenheit float64
const (
AbsoluteZeroC Celsius = -273.15
FreezingC Celsius = 0
BoilingC Celsius = 100
)
func CToF(c Celsius) Fahrenheit { return Fahrenheit(c*9/5 + 32) }
func FToC(f Fahrenheit) Celsius { return Celsius((f - 32) * 5 / 9) }
fmt.Printf("%g\n", BoilingC-FreezingC) // "100" °C
boilingF := CToF(BoilingC)
fmt.Printf("%g\n", boilingF-CToF(FreezingC)) // "180" °F
fmt.Printf("%g\n", boilingF-FreezingC) // compile error: type mismatch
Trong ví dụ trên, hai kiểu dữ liệu Celsius và Fahrenheit được khai báo, cả 2 đều có kiểu dữ liệu cơ bản là float64.
Celsius khai báo phương thức CToF, và Fahrenheit khai báo thêm phương thức FToC.
Tuy cả hai cùng kiểu dữ liệu cơ bản là float, nhưng chúng không cùng “kiểu” với nhau.









(4 lượt thả tim)



