# Học Go qua Tests

![](/files/DZ7LEHMFa3W5OkIwc4xc)

[Minh hoạ bởi Denise](https://twitter.com/deniseyu21)

## Ủng hộ tác giả

Tác giả rất tự hào khi cung cấp những tài nguyên này miễn phí, nếu bạn muốn đóng góp thêm

* [Tweet tác giả @quii](https://twitter.com/quii)
* [Mastodon](https://mastodon.cloud/@quii)
* [Buy me a coffee](https://www.buymeacoffee.com/quii)
* [Tài trợ trên GitHub](https://github.com/sponsors/quii)

## Test-Driven Development với Go

* Khám phá ngôn ngữ Go thông qua viết test.
* **Nắm vững nền tảng TDD**. Go là một ngôn ngữ lý tưởng để học TDD vì nó dễ học và có hệ thống test tích hợp sẵn.
* Hãy tự tin rằng bạn sẽ xây dựng các hệ thống Go vững chắc và được test cẩn thận ngay từ đầu.

Các bản dịch:

* [Tiếng Việt](https://sons-organization-15.gitbook.io/learn-go-with-tests)
* [Tiếng Anh (bản gốc)](https://quii.gitbook.io/learn-go-with-tests)

## Kinh nghiệm

Tác giả đã giới thiệu Go cho các nhóm phát triển phần mềm cũng như thử nhiều phương pháp giảng dạy khác nhau để giúp họ thành thạo trong việc xây dựng hệ thống chất lượng cao bằng Go.

### Những cách không hiệu quả

#### Đọc *sách*

Một cách tiếp cận mà tác giả đã thử là sử dụng [cuốn sách Go](https://www.amazon.co.uk/Programming-Language-Addison-Wesley-Professional-Computing/dp/0134190440), thảo luận mỗi chương mới cùng với các bài tập mỗi tuần.

Tuy nhiên cách làm này đòi hỏi sự cam kết cao. Cuốn sách này giải thích rất chi tiết về các khái niệm, điều này rất hữu ích, nhưng cũng khiến tốc độ học tập chậm đi - điều này không phù hợp với tất cả mọi người.

Lúc này tác giả nhận ra rằng, trong khi một số ít người thực sự đọc chương X và làm bài tập, thì nhiều người khác lại không theo kịp.

#### Các vấn đề

Các bài luyện tập lập trình [kata](https://en.wikipedia.org/wiki/Kata#Outside_martial_arts) rất thú vị, nhưng chúng thường có hạn chế khi học một ngôn ngữ lập trình. Bạn khó có thể sử dụng goroutines để giải một bài tập kiểu này.

Một vấn đề khác là sự chênh lệch về mức độ hứng thú trong học tập. Một số người học và tìm hiểu nhiều hơn những người khác, và khi trình bày bài làm của mình, họ vô tình sử dụng những tính năng mà những người khác chưa từng tiếp xúc, khiến mọi người bị bối rối.

Điều này khiến quá trình học tập trở nên khá *thiếu cấu trúc* và mang *tính tự phát* (ad hoc).

### Phương pháp hiệu quả

Tác giả khuyến khích học qua thực hành tại [go by example](https://gobyexample.com/) so với việc "đọc chương X như bài tập về nhà".

Khi đã xây dựng được nền tảng chắc, từ đó có thể bắt đầu phát triển các hệ thống thực tế.

### Phương pháp phù hợp với tác giả

Khi học một ngôn ngữ lập trình mới, tác giả thường bắt đầu bằng cách thử nghiệm trong một [môi trường REPL](https://en.wikipedia.org/wiki/Read%E2%80%93eval%E2%80%93print_loop). Nhưng sau cùng, tác giả thấy rằng vẫn cần một cách tiếp cận có cấu trúc hơn.

Các bài test giúp tác giả xác minh tính đúng đắn của code và còn đóng vai trò như tài liệu về những tính năng đã học.

Từ kinh nghiệm học tập trong nhóm và phương pháp cá nhân của riêng mình, tác giả sẽ cố gắng tạo ra một cách tiếp cận có thể hữu ích cho các nhóm khác. Học các khái niệm nền tảng thông qua việc viết các bài test nhỏ, từ đó áp dụng kỹ năng thiết kế phần mềm phù hợp để xây dựng những hệ thống chất lượng.

## Đối tượng phù hợp

* Những ai muốn học Go
* Những người muốn hiểu sâu hơn về Go cũng như testing

## Bạn cần gì?

* Một chiếc máy tính!
* [Cài đặt Go](https://golang.org/)
* Một trình soạn thảo code
* Một chút kinh nghiệm lập trình. Hiểu ý tưởng của `if`, biến, hàm,....
* Biết cách sử dụng terminal

## Phản hồi

* Thêm issues hoặc tạo PRs [tại đây (bản gốc)](https://github.com/quii/learn-go-with-tests) hoặc [tweet tác giả @quii](https://twitter.com/quii)

## Dịch giả

* Dịch giả [Soren](https://github.com/bjergsen243)
* Đóng góp về bản dịch của tôi [tại đây](https://github.com/bjergsen243/learn-go-with-tests)

[MIT license](https://github.com/quii/learn-go-with-tests/blob/main/LICENSE.md)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://sons-organization-15.gitbook.io/learn-go-with-tests/gb-readme.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
