0
0
Lập trình
TT

Tổng hợp kiến thức cơ bản về Golang cho lập trình viên

Đăng vào 4 tháng trước

• 4 phút đọc

Tổng hợp kiến thức cơ bản về Golang cho lập trình viên

Golang, hay còn gọi là Go, là một ngôn ngữ lập trình mã nguồn mở được phát triển bởi Google. Với hiệu suất cao, dễ dàng phát triển và khả năng xử lý đồng thời, Golang đang ngày càng trở nên phổ biến trong cộng đồng lập trình viên. Bài viết này sẽ tổng hợp những kiến thức cơ bản và các mẹo hữu ích để bạn có thể bắt đầu với Golang.

Mục lục

  1. Cơ bản về Golang
  2. Biến và hằng số
  3. Cấu trúc điều khiển
  4. Hàm
  5. Cấu trúc và phương thức
  6. Mảng, slice và map
  7. Con trỏ
  8. Giao diện
  9. Xử lý lỗi
  10. Thực hành tốt nhất
  11. Cạm bẫy thường gặp
  12. Mẹo tối ưu hiệu suất
  13. Khắc phục sự cố

Cơ bản về Golang

go Copy
package main

import "fmt"

func main() {
    fmt.Println("Hello, Go!")
}
  • package main → điểm vào chính
  • import → nhập các gói cần thiết
  • func main() → điểm khởi đầu của chương trình

Biến và hằng số

go Copy
var name string = "Mie"
age := 35 // khai báo ngắn
const Pi = 3.14
  • var → khai báo biến rõ ràng
  • := → khai báo ngắn gọn (trong hàm)
  • const → giá trị không thay đổi

Cấu trúc điều khiển

go Copy
if x > 10 {
    fmt.Println("Big")
} else {
    fmt.Println("Small")
}

for i := 0; i < 5; i++ {
    fmt.Println(i)
}

for _, v := range []string{"a", "b", "c"} {
    fmt.Println(v)
}

switch day {
case "Mon":
    fmt.Println("Start")
default:
    fmt.Println("Other")
}

Hàm

go Copy
func add(a int, b int) int {
    return a + b
}

// Trả về nhiều giá trị
func swap(x, y string) (string, string) {
    return y, x
}

// Trả về có tên
func split(sum int) (x, y int) {
    x = sum * 4 / 9
    y = sum - x
    return
}

Cấu trúc và phương thức

go Copy
type Person struct {
    Name string
    Age  int
}

// phương thức với giá trị
func (p Person) Greet() {
    fmt.Println("Hello, my name is", p.Name)
}

// phương thức với con trỏ
func (p *Person) HaveBirthday() {
    p.Age++
}

Mảng, slice và map

go Copy
arr := [3]int{1, 2, 3}

slice := []int{1, 2, 3}
slice = append(slice, 4)

m := map[string]int{"a": 1, "b": 2}
fmt.Println(m["a"])

delete(m, "b")

Con trỏ

go Copy
x := 10
p := &x     // con trỏ đến x
fmt.Println(*p) // giải dereference → 10
*p = 20
fmt.Println(x)  // 20

Giao diện

go Copy
type Speaker interface {
    Speak() string
}

type Dog struct{}

func (d Dog) Speak() string {
    return "Woof!"
}

func main() {
    var s Speaker = Dog{}
    fmt.Println(s.Speak())
}

Xử lý lỗi

go Copy
import "errors"

func div(a, b int) (int, error) {
    if b == 0 {
        return 0, errors.New("division by zero")
    }
    return a / b, nil
}

func main() {
    res, err := div(10, 0)
    if err != nil {
        fmt.Println("Error:", err)
        return
    }
    fmt.Println("Result:", res)
}

Thực hành tốt nhất

  • Luôn sử dụng error để kiểm tra lỗi và không bỏ qua chúng.
  • Tối ưu hóa mã bằng cách sử dụng các phương thức và interface.
  • Tận dụng defer để xử lý tài nguyên hợp lý.

Cạm bẫy thường gặp

  • Bỏ qua kiểm tra lỗi có thể gây ra sự cố nghiêm trọng trong ứng dụng.
  • Sử dụng con trỏ mà không kiểm tra tính hợp lệ có thể dẫn đến lỗi.

Mẹo tối ưu hiệu suất

  • Sử dụng các slice thay vì mảng khi kích thước không cố định.
  • Tránh tạo quá nhiều goroutine nếu không cần thiết.

Khắc phục sự cố

  • Kiểm tra các lỗi trả về trong các hàm để xác định nguyên nhân.
  • Sử dụng công cụ gprof để phân tích hiệu suất và tìm bottleneck.

Kết luận

Golang là một ngôn ngữ mạnh mẽ cho lập trình viên, và việc nắm vững các kiến thức cơ bản sẽ giúp bạn phát triển ứng dụng hiệu quả. Hãy bắt đầu khám phá và thực hành với Golang ngay hôm nay!

FAQ

1. Golang có dễ học không?
Golang được thiết kế với cú pháp đơn giản, dễ tiếp cận cho lập trình viên mới.

2. Golang có hỗ trợ lập trình hướng đối tượng không?
Golang hỗ trợ lập trình hướng đối tượng thông qua các cấu trúc và phương thức.

3. Tại sao nên sử dụng Golang?
Golang có hiệu suất cao, hỗ trợ đồng thời tốt và dễ dàng phát triển ứng dụng web.

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào