Căn bản trong Golang, các định nghĩa, khái niệm về kiểu dữ liệu, các hàm và câu điều kiện luôn là những vấn đề mà những bạn mới bắt đầu tìm hiểu về Golang phải nắm rõ. Hôm nay mình sẽ giới thiệu nhanh qua tất cả định nghĩa căn bản nhất đi kèm với code mẫu để các bạn có khái nhìn tổng quát với ngôn ngữ lập trình đang “hot” tại thời điểm hiện nay.
Nếu hiện tại bạn vẫn đang phân vân có nên học Golang chưa thì hãy đọc qua bài viết này của mình để quyết định nhé: https://huynhphuchuy.com/golang/nhung-ly-do-khien-ban-muon-hoc-golang-ngay-va-luon/
Mình sẽ đi lần lượt qua những khái niệm sau:
- Go là gì?
- Cài đặt và cấu hình
- Chương trình đầu tiên
- Kiểu, biến và phạm vi
- Arrays , Slices và Maps
- If-else và switch
- Loops
- Hàm và Closures
- Structure và Interfaces
Go là gì?
Go chỉ là một ngôn ngữ lập trình khác thui mà. Tuy nhiên lý do mà hiện nay Go đang dần trở nên phổ biến hơn bởi vì hiệu suất của Go không khác với C hay C++. Go giúp cho việc lập trình những microservices trở nên đơn giản và hiệu quả hơn rất nhiều. Chính vì vậy mình đã dần hứng thú với Go và sử dụng trong các dự án gần đây.
Cài đặt và cấu hình
Các bạn ghé thăm trang chủ Golang Website và tải nó về. Trên windows thì cài đặt nó ở C:\Go cho thuận tiện và trên Mac thì /usr/local/go. Cần phải có sự chuẩn bị cần thiết trước khi bắt tay vào coding.
IDE: Mình sử dụng Visual Studio Code cho việc lập trình Go và nhiều ngôn ngữ khác.
GOPATH
Biến môi trường GOPATH chỉ định vị trí workspace của bạn. Đây là biến môi trường duy nhất mà bạn phải thiết lập trước khi bắt đầu code.
Chương trình đầu tiên
Tạo một file đặt tên là main.go
// Chuương trình chính cần khai báo package main package main // import một package để sử dụng import "fmt" func main() { // Println is function of fmt package fmt.Println("Hello Friends") }
Chạy thử nó sử dụng lệnh # go run main.go
=============================================
kết quả:
Hello Friends
=============================================
Bạn cũng có thể chạy nó online trên <a href="https://tour.golang.org/welcome/1">@Go Tour</a>.
Kiểu, Biến và Phạm vi
Numbers
- Integers ( uint8, uint16, uint32, uint64, int8, int16, int32 and int64 )
- Float : Go có 2 kiểu float như sau: float32 và float64
Strings
- “Huy” , “Friends” là string trong Golang .
Booleans
- true và false là 2 trạng thái của boolean
Biến
Biến trong Golang cũng giống như những ngôn ngữ khác. Nhưng cách biểu hiện lại khác. Biến được khai báo như sau:
var variableName variableType
Ví dụ:
package main import "fmt" func main() { // Khái báo biến và gán var myInt int = 10 // Tự động nhận kiểu biến myInt2 := 20 var myStr string = "Hello" myStr2:= "World" fmt.Println(myInt + myInt2) // Nối 2 chuỗi fmt.Println(myStr + myStr2) }
Kết quả: 30 Hello World
Phạm vi của biến
package main import "fmt" // Biến global var x string = "Hello World Global" func main() { fmt.Println(x) f() } func f() { // Biến local var x string = "Hello World Local" fmt.Println(x) }
Arrays và Slices
var a [4]int // Mảng số nguyên có size 4
<strong>b := [2]string{"Penn", "Teller"} // Mảng c</strong>huỗi
Mảng trong Go cũng giống những ngôn ngữ khác, chỉ khác cách khai báo.
package main import "fmt" func main(){ // Mảng var intarray [4]int intarray[0] = 1 intarray[1] = 2 intarray[2] = 3 intarray[3] = 4 fmt.Println(intarray) b := [2]string{"test1", "test2"} fmt.Println(b) b[0] = "new_test" fmt.Println(b) }
Kết quả:
[1 2 3 4]
Ví dụ về Slices
package main import "fmt" func main(){ // Mảng var intarray [4]int intarray[0] = 1 intarray[1] = 2 intarray[2] = 3 intarray[3] = 4 fmt.Println(intarray) // Cắt mảng từ index 1 đến 3 b := intarray[1:3] fmt.Println(b) }
Maps trong Golang
Chúng còn được gọi là dictionaries, ví dụ mẫu dưới đây sẽ giúp các bạn hiểu rõ hơn về Map – một thuộc tính quan trọng vs căn bản trong Golang:
package main import "fmt" func main(){ a := make(map[string]string) a["Myname"] = "Huy" a["MyJob"] = "No Job" fmt.Println(a) fmt.Println(a["Myname"]) fmt.Println(a["MyJob"]) // Kiểm tra không tồn tại fmt.Println(a["Noval"]) }
If-else
package main import "fmt" func main() { // Ví dụ căn bản nhất. if 7%2 == 0 { fmt.Println("7 is even") } else { fmt.Println("7 is odd") } // `if` mà ko cần `else` if 8%4 == 0 { fmt.Println("8 is divisible by 4") } // Có thể gán trong câu điều kiện if num := 9; num < 0 { fmt.Println(num, "is negative") } else if num < 10 { fmt.Println(num, "has 1 digit") } else { fmt.Println(num, "has multiple digits") } name := "rajni" if name == "rajni" { fmt.Println("Hi Huy") } else { fmt.Println("Bye Huy") } }
kết quả: 7 is odd 8 is divisible by 4 9 has 1 digit Hi Huy
Switch-Case
package main import "fmt" import "time" func main() { // Ví dụ căn bản i := 2 fmt.Print("Write ", i, " as ") switch i { case 1: fmt.Println("one") case 2: fmt.Println("two") case 3: fmt.Println("three") } switch time.Now().Weekday() { case time.Saturday, time.Sunday: fmt.Println("It's the weekend") default: fmt.Println("It's a weekday") } // `switch` với điều kiện t := time.Now() switch { case t.Hour() < 12: fmt.Println("It's before noon") default: fmt.Println("It's after noon") } // Gán một biến trong câu điều kiện switch whatAmI := func(i interface{}) { switch t := i.(type) { case bool: fmt.Println("I'm a bool") case int: fmt.Println("I'm an int") default: fmt.Printf("Don't know type %T\n", t) } } whatAmI(true) whatAmI(1) whatAmI("hey") }
Loops
package main import "fmt" func main() { // Vòng `for` đơn giản i := 1 for i <= 3 { fmt.Println(i) i = i + 1 } // Vòng `for` đầy đủ for j := 7; j <= 9; j++ { fmt.Println(j) } // `for` này sử dụng cho trường hợp lặp vô hạn for { fmt.Println("loop") break } // Sử dụng `continue` để chuyển sang giá trị kế tiếp for n := 0; n <= 5; n++ { if n%2 == 0 { continue } fmt.Println(n) } }
Hàm trong Golang
package main import "fmt" // Hàm này sẽ nhận 2 giá trị kiểu `int` và trả về tổng func plus(a int, b int) int { return a + b } // Định nghĩa kiểu dữ liệu cho nhiều tham số đầu vào cùng lúc func plusPlus(a, b, c int) int { return a + b + c } func main() { // Gọi hàm ^^ res := plus(1, 2) fmt.Println("1+2 =", res) res = plusPlus(1, 2, 3) fmt.Println("1+2+3 =", res) }
Closures
Closures giống như lambdas ở một số ngôn ngữ lập trình khác
package main import "fmt" // Hàm `intSeq` trả về một hàm khác func intSeq() func() int { i := 0 return func() int { i += 1 return i } } func main() { // Gọi hàm `intSeq` và gán kết quả trả về cho `nextInt`. nextInt := intSeq() // Tiếp tục gọi hàm `nextInt ` fmt.Println(nextInt()) fmt.Println(nextInt()) fmt.Println(nextInt()) // Gán và gọi một lần nữa để kiểm tra kết quả newInts := intSeq() fmt.Println(newInts()) }
Struct trong Golang
// Go _structs_ are dùng để định nghĩa một tập các trường package main import "fmt" // This `person` struct type has `name` and `age` fields. type person struct { name string age int } func main() { // Tạo một struct mới. fmt.Println(person{"Bob", 20}) // Có thể định nghĩa đầy đủ như này. fmt.Println(person{name: "Alice", age: .30}) // Những trường không có sẽ nhận giá trị rỗng hoặc 0. fmt.Println(person{name: "Fred"}) // `&` để chỉ định con trỏ đến struct. fmt.Println(&person{name: "Ann", age: 40}) // Truy xuất giá trị của một trường trong struct. s := person{name: "Sean", age: 50} fmt.Println(s.name) // Tương tự với con trỏ struct sp := &s fmt.Println(sp.age) // Struct có thể thay đổi giá trị sp.age = 51 fmt.Println(sp.age) }
Phương thức trong Golang
// Go hỗ trợ định nghĩa _methods_ cho struct. package main import "fmt" type rect struct { width, height int } // Phương thức `area` là một _receiver_ of `*rect`. func (r *rect) area() int { return r.width * r.height } // Phương thức có thể được định nghĩa cho giá trị lẫn con trỏ func (r rect) perim() int { return 2*r.width + 2*r.height } func main() { r := rect{width: 10, height: 5} // Gọi 2 phương thức trên. fmt.Println("area: ", r.area()) fmt.Println("perim:", r.perim()) // Go tự động chuyển đổi giá trị và con trỏ trong lời gọi phương thức rp := &r fmt.Println("area: ", rp.area()) fmt.Println("perim:", rp.perim()) }
Interfaces
// _Interfaces_ là một tập hợp các phương thức package main import "fmt" import "math" // Đây là interface cơ bản của một khối hình học. type geometry interface { area() float64 perim() float64 } // Chúng ta hãy định nghĩa các thuộc tính bên trong các struct // `rect` và `circle`. type rect struct { width, height float64 } type circle struct { radius float64 } // Định nghĩa các phương thức cho hình chữ nhật func (r rect) area() float64 { return r.width * r.height } func (r rect) perim() float64 { return 2*r.width + 2*r.height } // Các phương thức cho hình tròn `circle`. func (c circle) area() float64 { return math.Pi * c.radius * c.radius } func (c circle) perim() float64 { return 2 * math.Pi * c.radius } func measure(g geometry) { fmt.Println(g) fmt.Println(g.area()) fmt.Println(g.perim()) } func main() { r := rect{width: 3, height: 4} c := circle{radius: 5} // `circle` và`rect` struct đều // implement `geometry` interface vì thế chúng ta có thể sử dụng // thể hiện của // những struct này như là tham số của `measure`. measure(r) measure(c) }
Đến đây là xong những phần căn bản trong Golang, khái niệm tổng quan nhất của Golang. Các bạn cố gắng nắm vững những khái niệm này để chúng ta có thể bắt đầu vào lập trình mà không gặp nhiều khó khăn, trở ngại.
Hẹn gặp lại các bạn trong các bài viết sắp tới!
10 Tháng Hai, 2021, 4:54 chiều
24 Tháng Hai, 2021, 7:09 chiều
14 Tháng Ba, 2021, 11:54 chiều
16 Tháng Ba, 2021, 12:34 sáng
25 Tháng Ba, 2021, 7:37 sáng
26 Tháng Ba, 2021, 6:59 sáng
7 Tháng Tư, 2021, 5:50 chiều
11 Tháng Tư, 2021, 7:37 chiều
15 Tháng Tư, 2021, 5:26 sáng
23 Tháng Tư, 2021, 5:43 sáng
23 Tháng Tư, 2021, 7:41 chiều
1 Tháng Năm, 2021, 5:39 sáng
2 Tháng Năm, 2021, 3:42 sáng
2 Tháng Năm, 2021, 6:24 chiều
3 Tháng Năm, 2021, 5:34 sáng
22 Tháng Năm, 2021, 6:03 chiều
25 Tháng Năm, 2021, 1:43 sáng
25 Tháng Năm, 2021, 5:33 sáng
1 Tháng Sáu, 2021, 2:22 sáng
5 Tháng Sáu, 2021, 8:10 chiều
14 Tháng Sáu, 2021, 1:47 chiều
16 Tháng Sáu, 2021, 3:42 chiều
16 Tháng Sáu, 2021, 3:47 chiều
22 Tháng Sáu, 2021, 7:33 chiều
26 Tháng Sáu, 2021, 11:32 sáng
26 Tháng Sáu, 2021, 6:53 chiều
26 Tháng Sáu, 2021, 7:27 chiều
26 Tháng Sáu, 2021, 11:07 chiều
27 Tháng Sáu, 2021, 5:57 sáng
27 Tháng Sáu, 2021, 9:04 sáng
28 Tháng Sáu, 2021, 5:36 sáng
2 Tháng Bảy, 2021, 8:19 chiều
3 Tháng Bảy, 2021, 12:42 chiều
3 Tháng Bảy, 2021, 4:23 chiều
3 Tháng Bảy, 2021, 4:44 chiều
5 Tháng Bảy, 2021, 10:27 sáng
10 Tháng Bảy, 2021, 5:45 sáng
22 Tháng Bảy, 2021, 1:01 chiều
26 Tháng Mười Một, 2021, 8:40 sáng
8 Tháng Mười Hai, 2021, 9:23 sáng
29 Tháng Ba, 2022, 2:30 chiều
This is very interesting, You are a very skilled blogger.
I’ve joined your rss feed and look forward to seeking more of
your great post. Also, I’ve shared your site in my social networks!
Take a look at my webpage: buy
17 Tháng Chín, 2022, 1:54 chiều
Miatt nagyon gyakran megtörténik, akkor az bizony nagyon nem
tesz jót sem a fejbőrünknek, sem a hajszálainknak.
➡️ Extrém gyors zsírosodás indul be.
18 Tháng Chín, 2022, 4:57 sáng
Wypadanie włosów u kobiet jest bezpośrednim zagrożeniem ich kobiecości i powoduje duże
napięcia psychiczne, a nawet depresje.
18 Tháng Chín, 2022, 3:58 chiều
कोई फर्क नहीं पड़ता कि आप अपने शिल्प में कितने अच्छे हैं, बुरी समीक्षा एक ऐसी चीज है
जिसे कोई भी लेखक टाल नहीं सकता।
कभी-कभी, ऐसा इसलिए है क्योंकि
हमारे.
2 Tháng Mười, 2022, 7:41 chiều
Video izle kategori en iyi anal seks sahnesi porno video Yasemin seks Siyah en iyi
anal. Rachael Madori büyük göt kız 27 Anal seks Sahnesi video keyfini çıkarın. Ep19 Janet Dumbledore- -x.
21 Tháng Mười Một, 2022, 2:58 sáng
Symptoms of dicycloverine hydrochloride overdosage are headache, dizziness, nausea, dry mouth,
difficulty in Date of Last renewal.
5 Tháng Mười Hai, 2022, 6:47 sáng
What a material of un-ambiguity and preserveness of precious familiarity concerning unexpected feelings.|
27 Tháng Ba, 2023, 10:10 sáng
Cheap insulin online with free delivery Stock up on diabetes meds in bulk, no prescription needed
I need some diabetes medicine, but I don’t have a prescription and I
don’t want to leave my house Buy Glimepiride Online without a Doctor’s Prescription
24 Tháng Tư, 2023, 11:06 chiều
Thanks for sharing. I read many of your blog posts, cool, your blog is very good.
22 Tháng Năm, 2023, 11:34 chiều
I am a student of BAK College. The recent paper competition gave me a lot of headaches, and I checked a lot of information. Finally, after reading your article, it suddenly dawned on me that I can still have such an idea. grateful. But I still have some questions, hope you can help me.
23 Tháng Năm, 2023, 11:29 chiều
Your enticle helped me a lot, is there any more related content? Thanks! https://www.binance.com/en/register?ref=P9L9FQKY
26 Tháng Năm, 2023, 9:48 sáng
I don’t think the title of your enticle matches the content lol. Just kidding, mainly because I had some doubts after reading the enticle. https://www.binance.com/en/register?ref=P9L9FQKY
1 Tháng Sáu, 2023, 3:17 sáng
I may need your help. I tried many ways but couldn’t solve it, but after reading your article, I think you have a way to help me. I’m looking forward for your reply. Thanks.