Bạn được nghe nói về lập trình, thông qua người quen, hoặc lướt facebook. Bạn chưa hình dung ra lập trình là gì nhưng chắc bạn hẳn cũng được biết những tên tuổi như Mark Zuckerberg phát minh ra Facebook, hay Bill Gates đồng sáng lập Microsoft. Bạn cảm thấy lập trình nghe có vẻ hấp dẫn. Bạn quyết định đi tìm một khóa học ngôn ngữ lập trình nào đó, tùy vào bạn bắt gặp ngôn ngữ nào nhiều mà bạn lựa chọn. Trong chuyên mục này sẽ dành cho những bạn chọn ngôn ngữ Golang. Và mình sẽ chỉ tập trung vào những ví dụ đơn giản, dễ hiểu và giải thích bằng ngôn từ bình dân nhất để giúp các bạn theo kịp khi học trên lớp.

 

Bắt đầu từ những gì đơn giản nhất.

Bất kỳ ngôn ngữ lập trình nào không riêng gì Golang đều khởi đầu từ những thứ đơn giản này, và nếu bạn chưa học lập trình bao giờ bạn cũng hình dung ra được cần phải làm gì trước tiên. Bạn muốn bảo máy tính in một câu văn nào đó. Như kiểu hiển thị "Xin chào, tôi là Đức" lên màn hình trình duyệt.

Điều đầu tiên cần làm là tạo một file với tên bất kỳ có đuôi .go ("main.go", "tutorial.go", "duc.go", "beginner.go",... gì cũng được) trong project, .go để máy tính hiểu đó là một file của ngôn ngữ golang cũng như file .txt máy tính hiểu đó là file word vậy.

Tiếp đến, để có thể bắt đầu thực thi viết code chạy chương trình, bạn hãy gõ những dòng lệnh sau:

package main
import "fmt"

func main() {
	//Mọi đoạn code ví dụ về sau trong bài này sẽ được viết vào đây
}

Trước mắt bạn đừng bận đoạn code phía trên, chỉ cần tập trung những gì bạn chuẩn bị viết trong hàm func main thôi, hãy để quá trình làm việc giúp bạn hiểu ra. Đây sẽ chính là nơi đoạn code bạn gõ ra được thực thi. Từ giờ trở đi mọi đoạn code ví dụ trong bài này bạn sẽ gõ trực tiếp ra hàm func main này. Và lưu ý nữa những đoạn chứa dấu // sẽ chỉ là phần ghi chú giúp bạn hiểu code được viết ra thôi, không cần thiết phải thêm vào trong code các bạn. Bắt đầu nhé!

 

Hiển thị đoạn text ra console

Hãy gõ dòng lệnh sau:

fmt.Println("Xin chào, tôi tên là Đức")

Hẳn bạn cũng đã hình dung ra console sẽ hiển thị:

Thử gõ tiếp một dòng code bên dưới nữa:

fmt.Println("Chào bạn Đức!")

Kết quả hiển thị

 

Một lưu ý nhỏ là fmt.Println chỉ là cách viết ngắn gọn của fmt.Print thêm “/n” vào cuối để xuống dòng. Cụ thể như sau:

fmt.Print("Xin chào, tôi tên là Đức \n")
fmt.Print("Chào bạn Đức! \n")

Nếu bỏ \n ở trên thì 2 câu sẽ được viết trên cùng một dòng như hiển thị sau đây.

 

Ta cũng có thể hiển thị tất cả chỉ trong một đoạn fmt.Print bằng cách:

fmt.Print("Xin chào, tôi tên là Đức \n Chào bạn Đức")

Bạn cũng có thể thấy câu lệnh fmt giống y như trong đoạn import phía trên, giờ hãy thử một bước là xóa import fmt đi, chuyện gì sẽ xảy ra?

Chương trình sẽ báo lỗi:

Điều đó cho thấy khi viết code golang cần phải import những nguyên liệu để có thể sử dụng trong đoạn code của chúng ta. Những nguyên liệu đó được gọi là package, bạn cũng nhận thấy ngay ở dòng đầu là package main. Đây là package duy nhất chứa hàm main mà bạn thấy đó để có thể chạy chương trình trong này. Bạn có thể tạo package ở một file khác (đây sẽ là chủ đề về sau này) hay dùng các package sẵn có mà golang cung cấp cho bạn. “fmt” phía trên là một ví dụ về package có sẵn, và ở đây sử dụng hàm Println để hiển thị đoạn text ra console.

 

Biến (Variables)

Trong bất cứ ngôn ngữ lập trình nào cũng có kiểu khai báo biến. Cũng như biến trong toán học đại diện cho một số ta chưa biết, biến trong lập trình cũng đại diện cho một số, một ký tự, một chuỗi ký tự,…

 

Hãy thử ví dụ khai báo các biến và các cách khai báo như sau:

// Khai báo biến có tên là name với kiểu là string, string là một chuỗi các ký tự
var name string = "nhat duc"

// Khai báo 2 biến tên là ishuman và isanimal có kiểu dữ liệu là bool, bool chỉ chứa 2 giá trị true hoặc false
var ishuman bool = true
var isanimal bool = false

// Khai báo 2 biến tên là j,k có kiểu dữ liệu là int, int là các giá trị số nguyên
var j,k int= 11,10

// Khai báo ngắn gọn biến age và khởi tạo giá trị luôn cho nó, lúc này do 23 là giá trị số nguyên nên biến age sẽ có kiểu int, còn "Xin chào, tôi là" là một chuỗi nên biến text sẽ có kiểu string.
var age = 23 //có thể viết ngắn gọn hơn nữa k := 23
text := "Xin chào, tôi là" 

Giờ hãy in ra màn hình từng biến một

fmt.Println(name) //in biến name với giá trị "nhatduc"
fmt.Println(ishuman) //in biến ishuman với giá trị true
fmt.Println(isanimal) //in biến isanimal với giá trị false
fmt.Println(age) //in biến age với giá trị 23
fmt.Println(j) //in biến j với giá trị 11
fmt.Println(k) //in biến k với giá trị 10
fmt.Println(text) //in biến k với giá trị Xin chào, tôi là

//Lưu ý: nếu biến nào khai báo nhưng không dùng đến chương trình sẽ báo lỗi. Ở đây tất cả các biến đã được hiển thị

Kết quả hiển thị

 

Nhưng làm sao để ghép các biến trong cùng một fmt.Println. Ví dụ muốn hiển thị 3 biến text, name và age ghép vào thành một câu hoàn chỉnh có các cách sau:

//khai báo biến fullnameage lấy giá trị rồi gộp 3 biến name,text, age lại thành 1 biến string
var fullnameage string = text + " " + name + ",tôi năm nay " + strconv.Itoa(age) +" tuổi"
fmt.Println(fullnameage)

//Hoặc fmt.Println(text + " " + name + ",tôi năm nay " + strconv.Itoa(age) +" tuổi")

Để ghép các biến vào chung với nhau, tất cả phải có chung một kiểu dữ liệu, ví dụ phía trên text, name đều là string nhưng age là int. Vì vậy ta cần phải chuyển biến int là age sang kiểu string, để làm được ta dùng strconv.Itoa(age) và import package “strconv”

Kết quả hiển thị

 

Hoặc nếu muốn hiển thị như sau:

Thì có thể viết đoạn code hiển thị dưới đây:

fmt.Println("Thông tin cá nhân:") //Hoặc fmt.Print("Thông tin cá nhân: \n") 
fmt.Printf("Tên : %s, tuổi: %d, là con người: %t, là con vật: %t",name,age,ishuman,isanimal)

Printf để viết liền một mạch câu hiển thị, những chỗ %s, %d, %t là đại diện cho mỗi kiểu biến khác nhau bạn muốn gắn vào . %s đại điện cho kiểu string, %d cho kiểu int, %t cho kiểu bool. Trong chuỗi biến đầu tiên bạn muốn gắn vào là biến name kiểu string nên để %s, sau đấy là biến age kiểu int nên để %d, tiếp đến ishuman kiểu bool nên để %t, rồi cuối cùng isanimal kiểu bool để %t.

 

Nếu bạn muốn thay đổi giá trị biến name = “nam”, age = 24 (tức tăng giá trị thêm 1), thì có thể viết như sau:

name = "nam" //Trường hợp bạn đã khai báo var name string ở trên
age = age + 1 //hoặc age++
fmt.Println("Thông tin cá nhân:") //Hoặc fmt.Print("Thông tin cá nhân: \n")
fmt.Printf("Tên : %s, tuổi: %d, là con người: %t, là con vật: %t",name,age,ishuman,isanimal)

Kết quả:

 

Vòng lặp

Tưởng tượng tôi muốn hiển thị như sau:

Với những gì ta đã được học phía trên, ta có thể dùng

fmt.Print("1 ") 
fmt.Print("2 ") 
fmt.Print("3 ") 
fmt.Print("4 ") 
fmt.Print("5 ")

 

Nhưng bạn có thể thấy mất quá nhiều dòng code lặp chỉ để hiển thị một đoạn đếm theo thứ tự. Đoạn này lặp đi lặp lại theo một quy tắc nhất định, ta có thể đem nó vào vòng lặp for như sau

for i:=1 ;i<=5; i++{ 
	fmt.Print(i + " ")
} 

// i = 1 => fmt.Print(1 + " ") 
// i = 2 => fmt.Print(2 + " ") 
// i = 3 => fmt.Print(3 + " ") 
// i = 4 => fmt.Print(4 + " ") 
// i = 5 => fmt.Print(5 + " ") 
// i = 6 => Không thể chạy tiếp vì điều kiện i <=5 => vòng lặp chấm dứt

Có thể giải thích như sau:

for là để đoạn code trong nó được chạy liên tục nếu không có điều kiện dừng.

Ta đã đặt điều kiện dừng cho vòng lặp này là

đầu tiên khai báo biến i=1

mỗi lần chạy hết code trong vòng lặp biến i sẽ tăng thêm 1

nếu i > 5 vòng lặp sẽ bị thoát ra ngoài không chạy tiếp nữa.

 

Bài tập

Thử làm một bài tập nhỏ nhé.

Hãy viết code để in ra màn hình như sau:

Với hiểu biết về vòng lặp ở trên chắc hẳn bạn cũng hình dung:

 

for i:=1 ;i<=5; i++{
	fmt.Print( "*")
}
fmt.Print("\n")

for i:=1 ;i<=4; i++{
	fmt.Print( "*")
}
fmt.Print("\n")

for i:=1 ;i<=3; i++{
	fmt.Print("*")
}
fmt.Print("\n")

for i:=1 ;i<=2; i++{
	fmt.Print("*")
}
fmt.Print("\n")

fmt.Print( "*")

 

Nhưng lập trình ta cần tránh lặp đi lặp lại code quá nhiều, những gì lặp lại có thể đem vào vòng lặp, thế nhưng với 4 vòng lặp liên tiếp thế kia ta gộp thành 1 thế nào?

Đơn giản, ta sẽ dùng vòng lặp trong vòng lặp như sau:

for i := 1; i <= 5;i++{
	for j := i ; j <= 5; j++ {
		fmt.Print("*")
	}
	fmt.Print("\n")
}

Đoạn code trên chạy qua các bước như sau:

  • i=1: vì ta gán j=i nên j sẽ bắt đầu từ 1 → 5 và hiển thị 5 sao :*****
    Hết vòng lặp trong sẽ chạy fmt.Print("\n") tức xuống dòng trong các lần hiển thị tiếp theo.
  • i=2, lần này j bắt đầu từ 2→5 và hiển thị 4 sao: ****
    Hết vòng lặp bên trong lại chạy fmt.Print("\n") và xuống dòng.
  • i=3, j bắt đầu từ 3→5 và hiển thị 3 sao trên một dòng: ***
    Hết vòng lặp bên trong lại chạy fmt.Print("\n) và xuống dòng.
  • i=4,5 tương tự như trên, i=6 chấm dứt vòng lặp ngoài.

 

Kết luận

Để thành thục bất kỳ ngôn ngữ lập trình nào cũng cần phải bỏ thời gian tự tìm tòi, đọc, nghiên cứu tài liệu nhiều. Và chỉ có đủ động lực, đam mê mới có thể thúc đẩy con người ta chịu khó theo đuổi lâu dài. Hy vọng với những ví dụ nhỏ phía trên có thể giúp các bạn có một bước đệm ban đầu đủ tốt để tiếp tục theo đuổi ngành nghề này mà không cảm thấy bế tắc, chán nản.