Hiện nay anh em Dev có rất nhiều sự lựa chọn ngôn ngữ lập trình để phát triển Web, 2 trong số đó là NodeJS và Golang. Cùng được giới thiệu vào năm 2009, một thời gian dài trước đây, NodeJS luôn tỏ ra vượt trội về thị phần hơn so với Golang. Tuy nhiên những năm gần đây, với sự thay đổi về công nghệ thì Golang đang cho thấy nhiều ưu điểm hơn nhất là về hiệu năng. Bài viết này chúng ta cùng nhau so sánh Golang và NodeJS xem đâu sẽ là lựa chọn của bạn cho dự án Web sắp tới nhé. Golang là gì? Golang, còn được gọi là Go, là ngôn ngữ lập trình mã nguồn mở được phát triển bởi Google. Go là một ngôn ngữ strongy typed (kiểu mạnh) và có cú pháp giống với ngôn ngữ lập trình C, tập trung vào sự đơn giản và dễ đọc. Được thiết kế với sự đơn giản, hiệu quả và đáng tin cậy giúp nó trở thành [...]
Read more →Go hay Golang là ngôn ngữ lập trình do Google thiết kế và phát triển từ năm 2009, ra đời với mục đích khai thác tối đa nền tảng đa lõi của bộ vi xử lý và hoạt động đa nhiệm tốt hơn. Với sức mạnh của Golang, hiện nay có khá nhiều dự án đang lựa chọn ngôn ngữ lập trình này để phát triển, và vì thế nhu cầu tuyển dụng Golang ngày càng lớn hơn. Trong bài viết này chúng ta cùng nhau tìm hiểu top 10 câu hỏi phỏng vấn Golang Developer để cùng có sự chuẩn bị tốt nhất trước cơ hội việc làm này nhé. Câu 1: Bạn có thể nói gì về ngôn ngữ lập trình Golang Go hay Golang là một ngôn ngữ lập trình mã nguồn mở giúp xây dựng phần mềm một cách dễ dàng, tin cậy và hiệu quả do các kỹ sư hàng đầu của Google phát triển. Golang được khởi nguồn từ năm 2007 [...]
Read more →Golang là một trong những ngôn ngữ lập trình phổ biến nhất trên thế giới, đứng sau thành công của nhiều phần mềm nổi tiếng như Docker hay Kubernetes. Độ “nóng” của ngôn ngữ ngữ này giúp cho việc phát triển nguồn mở của dân dev ngày càng trở nên dễ dàng hơn. Bài viết này sẽ giúp bạn hiểu hơn về Golang và cung cấp danh sách top framework hàng đầu giúp bạn đi xa hơn trong lĩnh vực GO. Hãy lưu lại lại để dùng dần nha! Giới thiệu về ngôn ngữ Golang Golang (hay còn gọi là Go) là một ngôn ngữ lập trình được phát triển bởi Google vào năm 2007 và ra mắt chính thức vào năm 2009. Golang được thiết kế để có thể xử lý các công việc đa nhiệm và đa luồng một cách hiệu quả, đồng thời hỗ trợ tốt việc lập trình hệ thống. Điểm khác biệt của Golang so với cá [...]
Read more →Bài viết được sự cho phép của tác giả Code Toàn Bug Lỗi là một điều gì đó bất thường xảy ra trong chương trình, nhưng ở Golang lỗi lại mang một ý nghĩa khác. Lỗi chỉ là một giá trị hàm có thể trả về nếu có gì đó không mong đợi xảy ra. Nếu bạn đã viết mã bằng Golang, ắt hẳn bạn sẽ gặp kiểu error. Go sử dụng các giá trị error để chỉ ra sự bất thường của ứng dụng. Cho ví dụ, hàm os.Open trả về 1 giá trị error khi không mở được tệp: 1 func Open(name string) (file *File, err error) Đoạn mã sau sử dụng os.Open để mở một tệp. Nếu một lỗi xảy ra, nó sẽ gọi log.Fatal để in thông báo lỗi và dừng lại: 1 f, err := os.Open("filename.ext") 2 if err != nil { 3 log.Fatal(err) 4 } 5 // do something with the open *File f Bạn có thể làm được nhiều việc với kiểu error trong Go, nhưng trong bài viết này, chúng ta sẽ xem xét kỹ hơn về lỗi và thảo luậ [...]
Read more →Bài viết được sự cho phép của tác giả Lê Xuân Quỳnh Trong phần 1, chúng ta đã tìm hiểu về cách dùng interfaces và về interface rỗng. Phần này, chúng ra sẽ nghiên cứu tiếp: Con trỏ và interfaces Một điểm tinh tế khác của interface là định nghĩa interface không quy định liệu người triển khai có nên triển khai interface bằng cách sử dụng kiểu con trỏ hay kiểu giá trị hay không. Khi bạn được cung cấp một giá trị interface, không có gì đảm bảo rằng nó là kiểu thông thường hay là kiểu con trỏ. Trong ví dụ bài trước, chúng ta đã định nghĩa các function của interface trên các kiểu thông thường. Bây giờ chúng ta sẽ thay đổi 1 chút để triển khai thành kiểu con trỏ: func (c *Cat) Speak() string { return "Meow!" } Nếu bạn thay đổi chương trình như https://go.dev/play/p/TvR758rfre, và bạn cố tình chạy nó bạn sẽ nhận được lỗi sau: cannot use Cat{} (type Cat) as type Animal in slice literal: Cat [...]
Read more →Bài viết được sự cho phép của tác giả Lê Xuân Quỳnh Để kiến thức của bài học sẽ không trôi đi mất sau khi đọc xong, bạn hãy mở Visual Code hay bất cứ IDE nào có thể code được Golang ra và thực hành. Giới thiệu về interfaces Interfaces là gì? Một interface có 2 điểm: Nó là 1 tập hợp các phương thức (methods), nhưng cũng là 1 kiểu. Trước tiên chúng ta hãy tập hợp vào điểm thứ nhất là tập hợp các methods. Thông thường, chúng ta sẽ giới thiệu về interfaces thông qua các ví dụ cụ thể, dễ hiểu. Hãy xem xét 1 ví dụ thực tế là giả sử chúng ta cần định nghĩa kiểu dữ liệu Động vật (Animal). Kiểu Animal có 1 interface đó là động vật có thể giao tiếp được bằng tiếng. Gà kêu ò ó o, chó sủa gâu gâu, mèo kêu meo meo.. chẳng hạn như vậy. Đây là khái niệm cốt lõi trong Golang, thay vì thiết kế các loại giao [...]
Read more →Bài viết được sự cho phép của tác giả Lê Xuân Quỳnh Tóm tắt về Go và C ++ Go là một ngôn ngữ có mục đích chung đơn giản, gọn nhẹ và đa năng. C ++ là một ngôn ngữ đa năng, nhanh nhưng phức tạp. Cả Go và C ++ là ngôn ngữ biên dịch và có cộng đồng người dùng mạnh mẽ. C++ được sử dụng trong nhiều loại ứng dụng, trong khi Go được sử dụng nhiều nhất cho các phần mềm backend web. C++ được sử dụng rộng rãi. Là một ngôn ngữ lập trình hệ thống, nó đóng vai trò là xương sống cho số lượng lớn các chương trình, tác vụ tính toán và các ngôn ngữ lập trình khác. Nó nằm dưới rất nhiều nền tảng và được sử dụng để phát triển mọi thứ từ trò chơi điện tử đến các chương trình điều khiển tàu thăm dò không gian. Nó đã được sử dụng trong một thời gian dài và [...]
Read more →Bài viết được sự cho phép của tác giả Lê Xuân Quỳnh Qua 1 vòng Google để tìm hiểu về JWT thì không thấy ông Việt Nam nào nói cho tử tế và đầy đủ để 1 thằng newbie như mình hiểu. Sau đó vô tình mình tìm kiếm một bài viết mình cho là ổn nhất về JWT, nên mạo phép vừa dịch vừa sử dụng theo ý mình, những ai đọc được tiếng Anh có thể xem ở đây cho chuẩn: https://medium.com/swlh/building-a-user-auth-system-with-jwt-using-golang-30892659cc0 Vậy JWT là gì? Chúng ta đều biết rằng, để nâng cao tính bảo mật khi làm các ứng dụng client-server thì cần có các cơ chế sinh token nhằm xác định request hợp lệ, tránh tình huống bị tấn công bởi các hacker vào hệ thống. JWT = JSON Web Token, hiểu nôm na là xác thực người dùng từ phía máy chủ bằng JSON. Theo cách tiếp cận truyền thống, chúng ta có các sessions để xác thực người dùng, khi mà người dùng đăng [...]
Read more →Bài viết được sự cho phép của tác giả Huy Trần Ở bài trước mình có giới thiệu về kĩ thuật lập trình GPU với OpenCL bằng C/C++. Hôm nay mình sẽ giới thiệu tiếp kĩ thuật này trên Go. Sử dụng C/C++ trong Go Một đặc điểm của Golang là chúng ta có thể thoải mái import các thư viện C/C++ và biên dịch bằng sự hỗ trợ của Cgo, các bác có thể xem lại bài Một số kinh nghiệm làm việc với Cgo để biết thêm chi tiết. Về cách sử dụng thì chúng ta chỉ đơn giản là viết đoạn code C/C++ trong phần comment đầu file và biên dịch: package main /* #include <stdio.h> void sayHello() { printf("YOLO!") } */ import "C" func main() { C.sayHello() } Cho nên chúng ta hoàn toàn có thể include thư viện OpenCL từ bên phía C/C++ vào Go để chạy bằng Cgo. Tất nhiên phải chỉ định framework cần dùng ở đầu chương trình luôn, ví dụ: /* #cgo CFLAGS: -Wall #cgo LDFLAGS: [...]
Read more →Bài viết được sự cho phép của tác giả Lê Xuân Quỳnh Trong bài #1, tôi đã nói qua loa về mô hình này. Tuy nhiên, sau một khoảng thời gian đọc hiểu các bài viết từ các site nước ngoài, tôi nhận ra là Clean architecture trong Golang nó khác nhiều so với lập trình iOS mà tôi đã triển khai. Lý do viết bài này hơi chậm là do tôi cần thời gian đọc hiểu, ngâm cứu. Nói là ăn xổi nhưng mà cũng phải từ từ mới chén được các bạn à. Okey, vậy hôm nay chúng ta có gì? [irp posts="6794" name="Channel trong Golang là gì? So sánh Callback function và mutex lock với channel"] [irp posts="35748" name="Clean Architecture: Đứng trên vai những gã khổng lồ"] Xem thêm tuyển dụng Golang hấp dẫn trên TopDev Clean architecture trong Golang. Trong bài 1 tôi có đưa các bạn 1 đường dẫn Github. Tuy nhiên sau 1 tuần tôi mới biết là những thứ tôi viết đó còn thô sơ lắm, nếu đư [...]
Read more →Bài viết được sự cho phép của tác giả Lê Xuân Quỳnh Lời giới thiệu Tôi gọi nó là ăn xổi vì thực tế tôi không có code backend bao giờ. Và đây là lần đầu tiên tôi nghĩ rằng mình cần học backend để hiểu hơn về công việc của các dev bên backend. Với 1 lập trình viên frontend – cụ thể là iOS, việc làm việc thường xuyên với các APIs dạng restful là thường xuyên. Bạn sẽ dùng Alamofire, Moya… để request lên server, lấy data dạng JSON trả về, convert chúng sang object và xử lý business cho nó. Do vậy tôi cũng nắm được đôi chút phần nào về dạng của API: chúng ta sẽ có 1 đường link để gọi, các tham số cho header như: Content-Type: application/json Authorization: token.. Các params gửi lên, token để authenticate, các thông báo lỗi, response trả về, method của API như GET, POST, PUT, DELETE… [irp posts="139" name="Chiến trường sinh tử phiên bản lập trình : Python vs Ruby vs Golang"] [irp posts="30278" name="Golang là [...]
Read more →Bài viết được sự cho phép của tác giả Kiên Nguyễn Được biết tới là một trong những ngôn ngữ hỗ trợ mạnh mẽ concurrency, Golang Goroutines và Channels thật ra có ý nghĩa như thế nào?. Có sự khác biệt nào giữa Golang Concurrency và Java Concurrency hay không?. [irp posts="6794" name="Channel trong Golang là gì? So sánh Callback function và mutex lock với channel"] [irp posts="30278" name="Golang là gì và tại sao bạn nên học Go?"] Trước khi bắt đầu tìm hiểu sâu hơn, hãy cùng bắt đầu với hai khái niệm cơ bản nhất, Routines và Channels. A hero – Goroutines with channel Ngoài ra, golang cũng hỗ trợ functional programming. Có thể tìm hiểu qua về functional programming qua bài viết này. Ok, bắt đầu ngay thôi! 1. Concurrency Trước khi bắt đầu tìm hiểu Routines và Channels, hãy nắm bắt khái niệm về Concurrency (Tính toán đồng thời). Making process on more than one task simultaneously is known as concurrency Việc thực hiện nhiều hơn một task trên một process được biết tới là [...]
Read more →Bài viết được sự cho phép của tác giả Võ Xuân Phong Mở đầu Để biết Golang làm được những gì và nó lợi hại như thế nào thì mình hãy bắt tay vào việc cài đặt Go lên máy và thực hành thôi nào. [irp posts="6794" name="Channel trong Golang là gì? So sánh Callback function và mutex lock với channel"] [irp posts="8395" name="Golang là gì? 9 Framework tối ưu “cực căng” cho Golang"] Nếu các bạn thích đọc hướng dẫn và tài liệu bằng tiếng anh và ví dụ cụ thể thì có thể tham khảo các nguồn sau đây mình cũng học và tham khảo trên các trang này: Go by example: https://gobyexample.com/ The Tour of Go: https://tour.golang.org How To Write Go Code: https://golang.org/doc/code.html Để download gói cài đặt các bạn vào trang này để lấy gói phù hợp với máy các bạn: https://golang.org/dl/ Cài đặt Golang trên Windows. Cài đặt Các bạn vào trang download của Golang mình đã để link phía trên và tím đế [...]
Read more →Bài viết được sự cho phép của tác giả Võ Xuân Phong Trong bài viết này, mình sẽ trình bày cho anh em về Graceful Shutdown với ngôn ngữ lập trình Golang. Chúng ta sẽ đi tìm hiểu về Graceful Shutdown là gì? Tại sao chúng ta lại cần áp dụng nó và nó có mang lại lợi ích gì hay không? [irp posts="6794" name="Channel trong Golang là gì? So sánh Callback function và mutex lock với channel"] [irp posts="139" name="Chiến trường sinh tử phiên bản lập trình : Python vs Ruby vs Golang"] Graceful Shutdown là gì? Hãy tưởng tượng rằng, chúng ta đang có một web service đang tiếp nhận yêu cầu (request) của các client để truy xuất dữ liệu từ database, vì dữ liệu truy xuất lớn nên phản hồi (response) phải mất một thời gian mới truy xuất xong. Trong khi đó anh em lại muốn tắt web service đó đi để bảo trì hệ thống hoặc triển khai (deploy) mới, bằng các thao tác kill ứng dụng web service đang chạy, có thể [...]
Read more →Bài viết được sự cho phép của tác giả Nguyễn Hữu Đồng Khi làm việc với một ngôn ngữ, do giới hạn của các thư viện có sẵn, chúng ta chắc hẳn đều viết ra một thư viện riêng hoặc ít nhất là dùng thư viện của người khác viết. Do mỗi người đều có một phong cách viết hay cách tiếp cận khác nhau nên sinh ra chuyện rất khó để mọi người có thể dùng các thư viện của nhau, và thậm chí trong mỗi phiên bản của một cá nhân đều có như thay đổi khiến cho việc sử dụng của người khác bị ảnh hưởng. [irp posts="6794" name="Channel trong Golang là gì? So sánh Callback function và mutex lock với channel"] [irp posts="139" name="Chiến trường sinh tử phiên bản lập trình : Python vs Ruby vs Golang"] Và để giải quyết vấn đề này, cộng đồng sẽ quy định ra một tiêu chuẩn chung cho một thư viện được viết ra tuân thủ [...]
Read more →