Hướng dẫn dùng php course trong PHP
Giới thiệuXin chào các bạn, mình thì chủ yếu lập trình web bằng PHP thôi, nhưng dạo gần đây mình tự dưng phải học Go =)) Vâng, cái tên Go chắc hẳn cũng khá nổi tiếng rồi, thực ra mình đã muốn học từ lâu nhưng chưa bao giờ gọi là có thời gian để học nghiêm túc. Giờ cờ đã đến tay ngại gì không thử Go nổi tiếng là vì được thiết kế, phát triển tại Google, bởi các lập trình viên nổi tiếng Ken Thompson, Rob Pike và Robert Griesemer vào năm 2007. Và vì nó liên quan đến khá nhiều phần mềm, tool chúng ta sử dụng hàng ngày như Docker, Kubernetes, Traefik Proxy, Drone CI, Caddy Server, Hugo, Gogs Git service, Influxdb... chủ yếu là các phần mềm hệ thống, cli tool, server, infrastructure, các hệ thống backend cần hiệu năng, tốc độ xử lý cao. Có một sự thật hơi hack đó là source code của Go cũng được viết bằng... Go?? Go được ra đời với mục đích là kết hợp được sự mềm dẻo của các ngôn ngữ thông dịch, dynamic type với hiệu năng và sự an toàn của các ngôn ngữ biên dịch, static type, và tận dụng được kiến trúc CPU đa nhân trên các máy tính hiện đại để xử lý tính toán song song, đồng thời. Go là một ngôn ngữ biên dịch như C/C++, Java,… Nhưng có 1 điểm khác biệt có thể coi là điểm mạnh của Go đó là crosss-compiling, tức là compile cho nhiều nền tảng kiến trúc hay OS khác nhau mà không cần sử dụng OS đó, ví dụ bạn code Go trên Linux nhưng có thể build ra file thực thi (static binary hay executable file) chạy được trên cả Windows và Mac, chỉ cần download về và chạy trực tiếp, không phải config, compile lại trên từng platform như C/C++ nữa. Điều này cũng thúc đẩy sự ra đời của hàng loạt các công cụ, CLI tool phục vụ cho DevOps hay System Admin. Ví dụ, khi làm web chúng ta hay có chức năng gửi email, nguyên tắc là không được dùng các hệ thống mail thật để test vì có thể để lộ thông tin dự án, hoặc code lỗi dẫn đến spam user... nên thường phải có một mail server giả lập để gửi và nhận mail như MailCatcher nhưng vấn đề là mình làm PHP, giờ lại phải cài cả Ruby vào để chạy MailCatcher thì rắc rối quá, giải pháp thay thế đó là MailHog, chỉ cần download từ Github về và run... Triết lý thiết kế của Go đó là đưa ra một solution tốt nhất chứ không phải đưa ra nhiều lựa chọn, chẳng hạn sẽ chẳng có kế thừa, chẳng có toán tử điều kiện 3 ngôi (như Go cũng có nhiều framework phục vụ cho việc phát triển Web, API như PHP. Nói chung PHP làm được gì thì Go cũng làm được. Nhưng nói về Web thì vẫn chưa được phổ cập như PHP. Go có stop được ElePHPant không =)) Bắt đầuHello WorldMở bài có vẻ dài rồi, tiếp theo chúng ta sẽ đi vào làm quen với cú pháp của Go. Ở giai đoạn làm quen này, để mọi thứ đơn giản chúng ta sẽ sử dụng website Go Playground https://play.golang.org/ để thực hành luôn mà không cần phải cài cắm thêm gì cả. Chương trình đơn giản đầu tiên nó trông như thế này và lại là Hello World?!
Điểm khác biệt đầu tiên đó là code Go không cần dấu PackageMọi chương trình viết từ Go đều được
đặt trong 1
Hoặc nhóm lại bằng cặp ngoặc đơn được gọi là "factored" import statement, cú pháp này được prefer hơn:
Exported nameMột điều bạn có thể không quen đó là function Nhưng đối với Go, function được viết hoa ở đầu nó mang một ý nghĩa đặc biệt, đó là => Đây là một convention của Go. Có thể hiểu Khai báo biếnBiến trong Go trước khi sử dụng phải được khai báo bằng từ khóa
Nếu có giá trị khởi tạo cho biến, chúng ta có thể bỏ qua việc khải báo kiểu dữ liệu, Go sẽ tự động đóan kiểu dữ liệu từ giá trị khởi tạo:
Biến được khai báo mà không có giá trị khởi tạo thì sẽ được mặc định gán bằng Zero value:
Hoặc có thể dùng toán tử
Các kiểu dữ liệu cơ bản là:
Ép kiểu bằng biểu thức
Hoặc:
Các biến sau khi được khai báo bằng ConstantConstant được khai báo bằng từ khóa
FunctionFunction trong Go được khai báo bắt đầu bằng từ khóa
Ví dụ hàm
Function trong Go có thể trả về nhiều giá trị, bằng cách nhóm kiểu dữ liệu trả về trong
Flow controlForGo chỉ có một loại vòng lặp đó là
Cấu trúc của
Khác với PHP sau từ khóa
Cả 3 phần là không bắt buộc, khi bỏ 2 phần
Và khi bỏ đi cả 3 phần, chúng ta sẽ có trong tay vòng lặp vô hạn:
Các bạn thấy đấy, chỉ cần IfTương tự với
Các toán tử điều kiện cũng giống như PHP: SwitchLệnh
Ở
đây Điều kiện switch có thể được lược bỏ, khi đó nó tương đương với
Có thể gộp nhiều giá trị vào
DeferTrì hoãn (
=> Kết quả là: Các lệnh được gọi qua từ khóa defer sẽ được đưa vào một ngăn xếp (stack), hoạt động theo cơ chế vào sau ra trước (last-in-first-out). Lệnh nào defer sau sẽ được thực thi trước, giống như xếp 1 chồng đĩa thì chiếc đĩa sau cùng (ở trên cùng) sẽ được lấy ra trước. Ví dụ:
=> Kết quả:
Tổng kếtTrong bài này chúng ta đã đi qua phần giới thiệu về Go và học về các cú pháp khai báo biến với Phần tiếp theo chúng ta sẽ tìm hiểu về một số kiểu dữ liệu cao cấp hơn trong Go như Cảm ơn các bạn đã theo dõi. |