Đa Nền Tảng Trong Golang
Dạo gần đây mình đang tìm kiếm và học hỏi thêm về đa nền tảng vì mình cần triển khai một số website và ứng dụng mình lên đa nền tảng và sự hiểu biết thêm về những công nghệ viết lên đa nền tảng và kiến trúc để các công nghệ viết về đa nền tảng với golang.
Huỳnh Nhân Quốc
@huynhnhanquoc
6 phút đọc
04 tháng 12 năm 2024
Câu chuyện khám phá công nghệ đa nền tảng
Tôi bắt đầu đam mê lập trình với C#, và từ đó biết đến Xamarin – công cụ đầu tiên đưa tôi đến khái niệm "cross-platform". Lúc đó, tôi chỉ hiểu đơn giản rằng ứng dụng viết bằng Xamarin có thể chạy trên cả Android và iOS. Tuy nhiên, khi đi sâu hơn, tôi nhận ra rằng Xamarin không phải là giải pháp hoàn hảo. Đặc biệt, việc tích hợp và sử dụng Visual Studio đôi khi trở nên nặng nề và không mấy thoải mái.
Trong thời gian tìm hiểu về lập trình web, tôi nhận thấy Xamarin bị giới hạn – không hỗ trợ xây dựng ứng dụng web. Đây là lúc tôi bắt gặp Ionic, một công cụ mở ra nhiều tiềm năng. Ionic cho phép tôi tạo ra ứng dụng đa nền tảng, nhưng cũng mang theo những hạn chế về giao diện và hiệu năng do phụ thuộc vào WebView. Vì Ionic dựa trên Angular (ở các phiên bản đầu tiên), tôi đã học Angular và kết hợp với Firebase để xây dựng một số ứng dụng. Mặc dù Firebase hoạt động ổn định, chi phí cao và sự cập nhật liên tục của Angular khiến việc duy trì trở nên khó khăn.
Golang và các framework đa nền tảng
Golang là ngôn ngữ tôi yêu thích và đã sử dụng trong nhiều dự án. Tuy nhiên, khi muốn xây dựng ứng dụng di động bằng Golang, tôi nhận ra những hạn chế rõ rệt. Một số framework tôi đã thử nghiệm gồm:
- Fyne: Có thể build đa nền tảng nhưng thiếu hỗ trợ WebView, khiến việc tận dụng các công nghệ web trở nên khó khăn.
- Wails: Hỗ trợ tốt cho Windows, macOS và Linux, nhưng không hỗ trợ di động.
- Gioui: Giao diện hạn chế và không hỗ trợ các tính năng native như quyền truy cập camera.
Những hạn chế này buộc tôi phải tìm đến các nền tảng khác như React Native và Flutter. Dù cả hai đều mạnh mẽ, chúng yêu cầu một đường cong học tập lớn. Tôi từng triển khai dự án kitsend.com qua WebView trên Flutter và React Native, nhưng nhận ra rằng WebView có nhiều giới hạn, đặc biệt khi xử lý các file lớn hoặc giao tiếp blob: trong môi trường peer-to-peer.
Flutter: Khả năng và hạn chế
Flutter, do Google phát triển, cho phép xây dựng ứng dụng đa nền tảng từ một mã nguồn duy nhất. Một số điểm nổi bật của Flutter bao gồm:
- Hiệu năng cao: Flutter vẽ giao diện trực tiếp lên canvas thay vì dựa vào các thành phần UI của nền tảng.
- Cộng đồng mạnh mẽ: Với sự hỗ trợ từ Google, Flutter có hệ sinh thái phong phú và tài liệu chi tiết.
Tuy nhiên, để tận dụng hiệu quả Flutter, bạn cần hiểu sâu về Dart – một ngôn ngữ mới mẻ với nhiều người. Ngoài ra, việc xây dựng cầu nối với các tính năng native đôi khi phức tạp.
React Native: Lựa chọn quen thuộc
React Native, được phát triển bởi Facebook, là framework phổ biến cho ứng dụng di động. Những ưu điểm chính bao gồm:
- Cộng đồng lớn: React Native có một hệ sinh thái mạnh mẽ và nhiều thư viện hỗ trợ.
- Khả năng tái sử dụng mã nguồn: Giảm chi phí phát triển nhờ tái sử dụng phần lớn mã nguồn.
Tuy nhiên, React Native yêu cầu viết thêm bridge code bằng các ngôn ngữ gốc như Java/Kotlin hoặc Objective-C/Swift để tận dụng các tính năng native, làm tăng độ phức tạp.
Lựa chọn của một đường cong học tập
Khi so sánh giữa Flutter và React Native, tôi nhận ra rằng dù cả hai đều giúp phát triển nhanh chóng, nhưng khả năng mở rộng và tái cấu trúc lâu dài lại gặp nhiều rào cản. Nếu lựa chọn các framework của Golang như Fyne, Wails, hoặc Gioui, thì lại tồn tại các hạn chế nghiêm trọng về giao diện và tính năng.
Điều này đưa tôi đến một ý tưởng: tận dụng sức mạnh của web để phát triển đa nền tảng.
Tầm nhìn: Tích hợp web và native với Golang
Tôi đã ấp ủ ý tưởng sử dụng giao diện web kết hợp với các tính năng native qua cầu nối Golang từ khi Progressive Web Apps (PWA) ra đời. PWA là một bước tiến lớn, nhưng vẫn bị hạn chế bởi sự phụ thuộc vào hệ điều hành. Vì vậy, giải pháp của tôi là:
- Xây dựng UI bằng công nghệ web: Sử dụng React JS, Angular, Vue hoặc bất kỳ framework JS ngoài kia kể cả vanilla JS để tạo giao diện nhất quán và dễ bảo trì.
- Kết hợp native bằng Golang: Dùng Go Mobile để tạo cầu nối với các tính năng native như camera, upload/download file.
- Phát triển ứng dụng với tư duy đa nền tảng thực thụ:
- Tận dụng lợi thế của webview để cung cấp giao diện hiện đại.
- Kết hợp khả năng native để giải quyết các vấn đề hiệu năng và truy cập hệ thống.
Góc nhìn về tương lai công nghệ
Trong bối cảnh công nghệ hiện tại, sự phát triển của các công cụ đa nền tảng đang mở ra nhiều cơ hội mới. Dù mỗi công cụ đều có ưu và nhược điểm, tôi tin rằng việc kết hợp linh hoạt giữa web và native sẽ là hướng đi tối ưu. Các framework như Flutter hay React Native sẽ tiếp tục phát triển, nhưng sự xuất hiện của các công cụ mới, đặc biệt những công cụ tận dụng ngôn ngữ mạnh mẽ như Golang, sẽ định hình tương lai của lập trình đa nền tảng.
Một tương lai không giới hạn: Với sự hội tụ của công nghệ web và native, lập trình viên sẽ không còn phải chọn giữa hiệu năng và tính linh hoạt. Thay vào đó, chúng ta có thể hướng tới những giải pháp thực sự tối ưu, nơi sự sáng tạo không còn bị giới hạn bởi nền tảng hay công cụ.
Đối với tôi, hành trình này không chỉ là học hỏi công nghệ, mà còn là việc tìm ra cách tối ưu hóa nguồn lực và tận dụng tối đa những gì tôi đam mê. Và tôi tin rằng, với sự kiên trì và tư duy đúng đắn, mọi rào cản kỹ thuật đều có thể vượt qua.
Mỗi bước đi, dù nhỏ bé, đều là một phần của con đường lớn dẫn tới những hành trình của cuộc đời.
Tận dụng được UI từ website và các thuật toán viết bằng Golang khi sử sử dụng gomobile làm cầu nối.
22
lượt xem
Người viết bài
Bài Viết Liên Quan
Tôi và cô ấy dạo quanh bãi cát. Nói vài câu chuyện. Đi lên rồi lại đi xuống. Tôi không biết cô ấy đang nghĩ gì. Có thể cô ấy đang đợi gì đó từ tôi. Tôi ôm chầm lấy cô ấy. Tình cảm của tôi dành cho cô ấy dâng trào sau bao nhiêu ngày chúng tôi sánh bước bên nhau. Tôi nghe sóng biển dạt dào như tình yêu tôi dành cho cô ấy.
Bây giờ với tôi cảm nhận được sự lạc lõng thật sự. Tôi không thể liên lạc với em cũng chẳng thể gặp em.
Trong quá trình làm việc và triển khai các dự án, tôi đã có cơ hội trải nghiệm nhiều nền tảng cloud khác nhau, từ những tên tuổi lớn như AWS và Google Cloud cho đến các nhà cung cấp nhỏ hơn nhưng linh hoạt như Vultr, DigitalOcean, Tinohost và hiện tại là CloudFly. Mỗi nền tảng đều có những ưu và nhược điểm riêng, phù hợp với từng nhu cầu cụ thể.
Đoạn khúc này viết cho người, anh hùng khí chất hiên ngang ngất trời.
Tôi đã từng, chưa từng hoặc đã từng có thể hack một hệ thống nào đó. Tôi không phải là một hacker. Tôi là một developer.
Có thể gọi vốn được 1 triệu đô.
Tôi là một lập trình viên. Tôi muốn viết nhiều hơn về chính mình. Về nền tảng mình đang làm và giải thích cho mọi người hiểu tôi đang làm gì.Khi thế giới đang theo đuổi những cái đang có. Tôi quay về với cội nguồn và theo đuổi sự thuần khiết trong lĩnh vực của tôi.
Xin trời hoa chết về tay. Để tôi biết được kiếp đây đọa đầy.
Đôi lúc ta sai vì đứng quá lâu trước những ngã rẽ nhưng từ đó ta hiểu được rằng:"Những ngã rẽ sẽ quyết định con đường ta đi"
Em và tôi nếu có gì đi nữa cũng chẳng thể tiến thêm bước nữa đề về chung một nhà vì còn nhiều điều tôi chưa giải quyết được.