Bắt đàu nghiên cứu 09/2007 và được phát triển năm 2008 là ngôn ngữ lập trình mỡ, xử lý đa luồng, song song và tức thời.
- Biên dịch (compile language) nhanh chóng code sau khi biên dịch là nhị phân nên mức độ làm việc từ machine nhanh hơn.
- Được phát triển dựa trên cải tiến từ C và C ++ nên Go lang là một ngôn ngữ biên dịch mạnh cho người coder cảm nhận là ngôn ngữ kịch bản (scripting language) hơn là ngôn ngữ biên dich.
- Tính tương thích cao do cách thức xử lý đa luồng nên coder không bị mất quyền truy cập hệ thống khi hệ thống đang xử lý và đông thời Go cũng có thể liên kết với thư viên C ở bên ngoài hoặc xử lý các tác nhiệm Native của hệ thống
- Tính tiện lợi cao vì cảm nhận coding như scripting language nên Go cũng như Python cho coder cảm nhận Go lang có thể đáp ứng mọi nhu cầu lập trình phổ biến nhất. Các tính năng mới đều được cập nhật vào ngôn ngữ chính như goroutines là hàm dành cho concurrency.
- Go có tính năng quản lý cung cấp bộ nhớ xử lý tự động như Python và hỗ trợ những tính năng mở rộng theo Package nên việc phát triển của ngôn ngữ là rất lớn dựa vào cộng đồng.
- Đa hỗ trợ do Go lang complie là binary nên hầu hết các operater system để có thể hiểu được nên Linux, MacOS hoặc Windows đều có thể hiểu được Go lang giống như là Docker
- Tốc độ làm việc ở tính tương đối ở các công việc nhỏ nhưng Go lang thể hiện là ngôn ngữ thích nghi với các dự án lớn đa số, hiệu suất làm việc của Go tốt ngang trong những phần công việc lớn và nhanh hơn so với các ngôn ngữ lập trình đã được đánh giá trước đó.
- Tính linh hoạt việc executable file được thực hiện trên toolchain độc lập với hệ điều hành nên Go lang cực kỳ linh hoạt
- Go lang không hỡ trợ chức năng quá tải nên khả năng dẫn đễn crash project là có. (Có hỗ trợ tương đối).
- Qui tắc làm việc củ Go lang nghiêm ngặt (b thích chỗ này hỗ trợ rõ ràng khi coding) nên đôi khi cũng là 1 nhược điểm cho các coder...
- Go lang có quá trình chạy không quá mạnh mẽ và an toàn khi làm làm việc. (Có hỗ trợ tương đối).
- Go lang là ngôn ngữ mới nên các gói thư viện hỗ trợ ít và các gói thư viện chuẩn GO đã có đầy đủ nên việc tiếp cận khó đối với người mới.
- Go lang không hỗ trợ Generic thường thì đặt cấu trúc struct chiếm đa số trong Go.
- Go lang là ngôn ngữ đa luồng nên việc Err là việc diễn ra khắp nơi trong Go lang chính vì vậy đòi hỏi coder có hệ logic tốt để có thể catch các trường hợp Err giúp Go tránh việc xung đột bộ nhớ dẫn đến Crash process. Nó đi ngược với thói quen của các coder đơn đơn luồng ngại đụng chạm err.
- Go lang xủa lý đa luồng và giúp cảm nhận người dùng tốt,... đồng nghĩa việc xử dụng bộ nhớ của hệ thống rất nhiều nêu dù là 1 câu lệnh đơn giản nhưng Go lang đã tiêu tốn khá nhiều dữ liệu của bộ nhớ chính vì vậy Go lang chỉ tương thích các dự án lớn.
- Go phát triển tốt trên nền tảng phát triển cloud-native sự kết hợp tốt của network và concurrency. Thực tế Google plat form dùng Go để phát triển nền tảng ứng dụng trên đó.
- Go dùng phát triển các dự án phân phối dịch vụ mạng, các ứng dụng mạng hiện nay phụ thuộc vào concurrency và những tính năng native concurrency do Go cung cấp.
- Dùng để thay thế cho cơ sở hạ tầng đang hiện có. Các chuyên gia cho rằng hạ tầng mạng hiện nay là lạc hậu.
- Go lang tự thúc đẩy bỏi nhu cầu sử dụng nó bằng cách hỗ trợ thêm các nhu cầu từ người dùng lấy Generic là ví dụ chẳng hạn.
- Ngôn ngữ lập trình mỡ nên việc phát triển luôn cần thời gian và các cuộc khảo sát cho thấy chuyển đổi tới Go lang từ java, javascript, python là rất cao.
brew services stop postgresql
brew services start postgresql
psql postgres
username: benpro initdb --pgdata=./data/db1 --username="benpro"
subl ./data/db1/postgresql.conf wal_level = replica archive_mode = on synchronous_commit = remote_apply wal_log_hints = on
pg_ctl --pgdata=/Users/benthai/Working/go/go-gin-restful/mnt/database/data/db1 --options="--port=5433" start pg_ctl --pgdata=./data/db1 --options="--port=5433" start
SELECT * FROM pg_create_physical_replication_slot('slot1');
select * from pg_replication_slots;
pg_basebackup --pgdata=./data/db2 --write-recovery-conf --slot="slot1" --host=localhost --port=5433 --username="benpro"
pg_basebackup --pgdata=./data/db2 --write-recovery-conf --slot="slot1" --username="benpro"
pg_ctl --pgdata=./data/db2 --options="--port=5434" start
select * from pg_replication_slots;
- kiểm tra version của go:
go version
go version go1.18.7 darwin/amd64- Tạo module (thư viện) cho project
go mod init demo-app
go: creating new go.mod: module demo-app
go: to add module requirements and sums:
go mod tidy- Cài thư viên cho project
go get gorm.io/gorm- Kiểm toán lại thư viện cho project
go mod tidyFlow Demo App
https://github.com/huybinhvn/go_langcd go_lang/go-gin-restful
go mod tidygo build main.gogo run main.gohttp://localhost:8008
import Go_Gin_Gorm.postman_collection.json
- channel,
- wait group,
- deadlock,
- mutex
- Giống redux của react dùng để giao tiếp giá trị tham chiếu (tự hiểu) giữa các goroutines
- Vì là tham chiều nên nó cũng có cơ chế như 1 tham chiếu bình thường có CRUD.
[channel_name] := make(chan [type])
processDone := make(chan bool)[channel_name] <- [value]
processDone <- false[param] <- [channel_name]
processing := <- processDoneclose([channel_name])
close(processDone)https://github.com/oktadev/okta-go-gin-vue-example https://github.com/wpcodevo/golang-gorm-postgres.git
go test ./testing
go test ./testing -timeout 120s -v -short -cover -coverprofile=coverage.out
go tool cover -html=coverage.out
go tool cover -html cover.out -o cover.html


