Từ 2018, Golang nổi lên là một ngôn ngữ lập trình rất phù hợp để lập trình web, microservice cạnh tranh mạnh với (Node.js + JavaScript), (ASP.net Core + C#), (Spring Boot + Java), (Laravel + PHP). Đặc điểm của Golang là ngôn ngữ lập trình đơn giản dễ học, không có những pattern OOP phức tạp như C++, Java, C#, nhưng lại bổ xung tính năng xử lý đa nhiệm co-routine nhẹ và hiệu suất cao hơn tính năng multi-thread, khả năng trao đổi dữ liệu giữa 2 co-routing chạy song song. Golang được thiết kế để tối ưu hiệu suất thực thi đồng thời cho những nhiệm vụ kiểu như web application, microservice, multi-tasking processing.

Lập trình networking, TCP server bằng Golang cũng đơn giản như Node.js với event loop, non-blocking I/O, chính vì vậy mà có rất nhiều web framework được viết bằng Golang. Các start up sử dụng Golang sớm nhất và nhiệt tình nhất bởi vì học Golang dễ hơn Java, C# rất nhiều, code ngắn hơn, bộ nhớ tiêu thụ cũng ít hơn. Trung Quốc có Alibaba, Tencent, Baidu, ở Nga có cả một hàng sử dụng Golang xây dựng hệ thống core banking, Uber, Grab sử dụng Golang làm back end service, ở Nhật có Line, ở VN có VinID, Lazada, FPT, Viettel, ..sử dụng Golang cho microservice. Trong bài này, tôi sẽ so sánh 2 web framework nổi tiếng viết bằng Golang: GoginIris được nhiều công ty ưa dùng và giải thích trong trường nào nên dùng framework gì?

Đánh giá qua Github

  Iris Gogin
Ra đời 9/2016 6/2014
Watch (theo dõi) 701 1300
Star (thích) 19k 41.5k
Số commit 2045 1400
Tần suất cập nhật Khoảng 4 ngày Khoảng 1 tháng
Tài liệu kỹ thuật Cực tốt Vừa phải
Ví dụ mẫu Nhiều, chi tiết
Iris Examples
Ít và đơn giản
Gogin Examples

Khác biệt lớn nhất giữa Iris và Gogin là gì?

Tác giả iris mong muốn chọn lựa những tính năng tốt nhất, tối ưu nhất tích hợp luôn vào Iris. Do đó framework Iris gọi là full battery, full option (món đồ chơi có đầy đủ pin và phụ kiện). Iris được thiết kế và lập trình theo chủ ý của tác giả khá nhiều (biased). Ngược lại Gogin thiết kế tối giản, không tích hợp nhiều chức năng có sẵn, lập trình viên tự chọn lựa bổ xung thêm.

Iris framework hỗ trợ đến 8 loại view template rendering engine (xem tại đây https://www.iris-go.com/docs#/?id=template-rendering). Gogin hỗ trợ 1 view emplate engine (https://gin-gonic.com/docs/examples/html-rendering/), muốn dùng các template engine khác phải dùng lệnh router.SetHTMLTemplate. Không có gì đảm bảo gin hỗ trợ các view template engine khác nhau tốt.
Ví dụ Gogin sử dụng custom view template engine

import "html/template"

func main() {
	router := gin.Default()
	html := template.Must(template.ParseFiles("file1", "file2"))
	router.SetHTMLTemplate(html)
	router.Run(":8080")
}

Iris cho phép sử dụng nhiều View Template Engine trong một ứng dụng. Mỗi nhóm Party có thể sử dụng View Template Engine.

// Register a view engine per group of routes.
adminGroup := app.Party("/admin")
adminGroup.RegisterView(iris.Blocks("./views/admin", ".html"))

Tác giả Iris luôn nỗ lực bổ xung tính năng mới nhất vào Iris. Còn tác giả của Gogin ưu tiên ổn định hoá tính năng căn bản.

Những chức năng có trong Iris mà chưa có trong Gogin:

So sánh tốc độ

Tôi có sử dụng 2 mã nguồn tối giản nhất, trả về đoạn text "Hello World!" ở cổng 8080. Công cụ để kiểm tra tốc độ là Rakyll Hey https://github.com/rakyll/hey.

Lệnh gõ kiểm tra tốc độ như sau. -n là tổng số các request sẽ gửi lên server, -c số request sẽ gửi đồng thời.

hey -n 200000 -c 300 http://localhost:8080

Các bạn có thể xem chi tiết kết quả kiểm thử ở "Phụ lục so sánh tốc độ". Nhìn vào kết quả có thể kết luận tốc độ xử lý request của Gogin ngang với Iris.

Gogin

package main

import (
	"fmt"
	"net/http"
	"github.com/gin-gonic/gin"
)

func main() {
	gin.SetMode(gin.ReleaseMode)
	r := gin.New()
	r.GET("/", func(c *gin.Context) {
		c.String(http.StatusOK, "Hello World!")
	})
	fmt.Println("listen at port 8080")
	r.Run(":8080") // listen and serve on 0.0.0.0:8080
}

Iris

package main

import "github.com/kataras/iris"

func main() {
    app := iris.Default()
    app.Logger().SetLevel("error")
    app.Get("/", func(ctx iris.Context) {
        ctx.WriteString("Hello World!")
    })
    // listen and serve on http://0.0.0.0:8080.
    app.Run(iris.Addr(":8080"))
}

Ưu điểm của Iris so với Gogin

  1. Iris là framework đầy đủ tính năng hơn
  2. Dễ học hơn
  3. Tài liệu viết chi tiết hơn, được dịch ra nhiều thứ tiếng: Nga, Việt, Trung....
  4. Ví dụ đầy đủ, đa dạng hơn.
  5. Phù hợp để tạo REST API và cả ứng dụng Web Application

Ưu điểm của Gogin so với Iris

  1. Ra đời trước 2 năm. Cộng đồng lập trình viên biết đến nhiều hơn
  2. Code base gọn hơn. Nếu chỉ dùng để tạo REST API thì ok

Phụ lục so sánh tốc độ

hey -n 200000 -c 300 http://localhost:8080
-------- Gogin
Summary:
  Total:	4.8086 secs
  Slowest:	0.0479 secs
  Fastest:	0.0001 secs
  Average:	0.0071 secs
  Requests/sec:	41550.7312

  Total data:	2397600 bytes
  Size/request:	12 bytes

Summary:
  Total:	4.8625 secs
  Slowest:	0.0504 secs
  Fastest:	0.0001 secs
  Average:	0.0072 secs
  Requests/sec:	41089.5571

Summary:
  Total:	4.7234 secs
  Slowest:	0.0460 secs
  Fastest:	0.0001 secs
  Average:	0.0070 secs
  Requests/sec:	42300.2147


Summary:
  Total:	4.7603 secs
  Slowest:	0.0817 secs
  Fastest:	0.0001 secs
  Average:	0.0070 secs
  Requests/sec:	41971.7996

-------- Iris
Summary:
  Total:	4.9347 secs
  Slowest:	0.0960 secs
  Fastest:	0.0001 secs
  Average:	0.0073 secs
  Requests/sec:	40488.8482

  Total data:	2397600 bytes
  Size/request:	12 bytes

Summary:
  Total:	4.8456 secs
  Slowest:	0.0451 secs
  Fastest:	0.0001 secs
  Average:	0.0071 secs
  Requests/sec:	41233.4082

  Total data:	2397600 bytes
  Size/request:	12 bytes


Summary:
  Total:	4.9660 secs
  Slowest:	0.0574 secs
  Fastest:	0.0001 secs
  Average:	0.0073 secs
  Requests/sec:	40233.6628

Summary:
  Total:	4.8202 secs
  Slowest:	0.0564 secs
  Fastest:	0.0001 secs
  Average:	0.0071 secs
  Requests/sec:	41450.9022

Summary:
  Total:	4.8840 secs
  Slowest:	0.0827 secs
  Fastest:	0.0001 secs
  Average:	0.0072 secs
  Requests/sec:	40909.4933

Kết luận

  1. Tốc độ Iris và Gogin tương đương nhau
  2. Chức năng Iris đa dạng hơn còn Gogin thì tối giản
  3. Tốc độ nâng cấp phiên bản Iris cũng cao, có thể rủi ro hơn xét về khía cạnh bảo mật
  4. Iris phù hợp phát triển ứng dụng web và REST. Còn Gogin chỉ phù hợp phát triển ứng dụng REST, nếu lập trình Web App tương đối vất vả.