+7

[Go Lang] lập trình golang căn bản - Xây dựng ứng dụng web đầu tiên

Trong bài viết này, Tôi sẽ hướng dẫn xây dựng một trang web sử dụng golang và html/css đơn giản. Bạn cần cài đặt golang nếu bạn chưa cài đặt thì có thể cài đặt tại đây https://golang.org/doc/install hoặc xem lại hướng dẫn cài đặt p1

Bước 1: Thiết lập cấu trúc thư mục

Vào trong thư mục src của go Tạo một thư mục welcome-app. mkdir welcome-app
cd welcome-app
Cấu trúc thư mục của bạn sẽ trông giống như thế này

/ home 
  / <your-username> 
    / go 
      bin / 
      src / 
        / welcome-app

Bước 2: Xây dựng giao diện người dùng

Tạo một thư mục templates trong ~/go/src/welcome-app để lưu trữ các file html
mkdir templates
Tạo một thư mục stylesheets trong ~/go/src/welcome-app/static để lưu trữ các file css, js..
mkdir -p static/stylesheets
Tạo file html welcome-template.html trong templates
Tạo file html welcome-template.css trong static/stylesheets

Thư mục của bạn sẽ trông giống như thế này.

  1. HTML: templates/welcome-template.html
<!DOCTYPE html>

<html>
   <head>
         <meta charset="UTF-8">
         <link rel="stylesheet" href="/static/stylesheets/welcome-template.css">
         <title>Welcome {{.Name}}</title>
   </head>
   <body>
      <div class="welcome center">Welcome {{.Name}}, it is {{.Time}}</div>
   </body>
</html>

2.CSS: static/stylesheets/welcome-template.css

.welcome {
   font-family: 'Segoe UI', 'Tahoma', 'Geneva', 'Verdana', 'sans-serif';
   font-size: 3rem;
   color: aliceblue;
}

.center {
   height: 100vh;
    display: flex;
    justify-content: center;
    align-items: center
}

Bước 3: xây dựng Go server

tạo file main.go

package main
import (
	"fmt"
	"html/template"
	"net/http"
	"time"
)

type Welcome struct {
	Name string
	Time string
}

func main() {
	welcome := Welcome{"Anonymous", time.Now().Format(time.Stamp)}

	templates := template.Must(template.ParseFiles("templates/welcome-template.html"))

	http.Handle("/static/",
		http.StripPrefix("/static/",
			http.FileServer(http.Dir("static"))))

	http.HandleFunc("/" , func(w http.ResponseWriter, r *http.Request) {
		if name := r.FormValue("name"); name != "" {
				welcome.Name = name;
		}
		if err := templates.ExecuteTemplate(w, "welcome-template.html", welcome); err != nil {
			http.Error(w, err.Error(), http.StatusInternalServerError)
		}
	})

	// Start web server, và sét cổng 8080
	fmt.Println("Listening");
	fmt.Println(http.ListenAndServe(":8080", nil));
}

Giải thích chút nhé ! chỗ này là để import các pakages cần thiết

import (
	"fmt"
	"html/template"
	"net/http"
	"time"
)

Tạo dữ liệu struct với 2 biến là name và time

type Welcome struct {
	Name string
	Time string
}

khởi tạo struct welcome với 2 giá trị Name và Time ngẫu nhiên
welcome := Welcome{"Anonymous", time.Now().Format(time.Stamp)}

gọi đến dướng dẫn chứa file html, gọi trong hàm template.Must() khi chương trình lỗi sẽ dừng chương trình lại
templates := template.Must(template.ParseFiles("templates/welcome-template.html"))

sử dụng handle để lấy file css trong static

 http.Handle("/static/",
	http.StripPrefix("/static/",
		http.FileServer(http.Dir("static"))))

phương thức có URL "/" Và trả về ResponseWriter và http request
http.HandleFunc("/" , func(w http.ResponseWriter, r *http.Request) {

lấy tên từ URL với url http://127.0.0.1:8080/?name=Thinh thì r.FormValue("name") sẽ có giá trị là "Thinh"

   if name := r.FormValue("name"); name != "" {
			welcome.Name = name;
	}

Nếu lỗi sẽ hiển thị error message, thành công sẽ trả về welcome-template.html

if err := templates.ExecuteTemplate(w, "welcome-template.html", welcome); err != nil {
		http.Error(w, err.Error(), http.StatusInternalServerError)
}

Start web server, và sét cổng 8080

fmt.Println(http.ListenAndServe(":8080", nil));

Bước 4: Chạy chương trình

chạy lệnh tại thư mục project
go run main.go bật trình duyệt truy câp vào http://localhost:8080?name=thinh và tận hưởng thành quả

kết bài

Trên đây là hướng dẫn run 1 web golang cơ bản, bài sau mình sẽ hướng dẫn làm các chức năng đơn giản cho trang web. Cảm ơn các bạn đã đón đọc.


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí