Golang Thực thi mẫu html

Các bạn đọc like ủng hộ MUO nhé. Khi bạn mua hàng bằng các liên kết trên trang web của chúng tôi, chúng tôi có thể kiếm được hoa hồng liên kết. Đọc thêm

Khi bạn đang xây dựng một trang web, thông thường bạn sẽ tự động tạo một số nội dung cuối cùng của mình. Sau đó, bạn sẽ muốn đưa dữ liệu đó vào các trang web cuối cùng của mình để hiển thị trên trình duyệt

Bạn có thể thực hiện một trong hai cách tiếp cận. nhúng cấu trúc trang của bạn vào chương trình của bạn hoặc kết hợp dữ liệu cuối cùng của bạn với các tệp mẫu riêng biệt

Tạo khuôn mẫu cung cấp sự phân tách các mối quan tâm để có một cơ sở mã dễ bảo trì hơn. Nó cũng giúp dễ dàng phân chia các nhiệm vụ front-end và back-end, phân bổ chúng cho các thành viên khác nhau trong nhóm. Go có hỗ trợ tạo khuôn mẫu tuyệt vời trong thư viện tiêu chuẩn của nó

Bắt đầu với việc tạo khuôn mẫu trong Go

Go có hai gói tạo khuôn mẫu trong thư viện chuẩn. văn bản/mẫu và html/mẫu. Gói văn bản/mẫu có chức năng phân tích tệp văn bản, trong khi html/mẫu xử lý HTML. Bằng cách sử dụng html/mẫu, bạn được bảo vệ khỏi các cuộc tấn công cross-site scripting (XSS) do Go thoát khỏi mục nhập dữ liệu trong quá trình kết xuất. Đây là một lợi thế khác của việc tạo khuôn mẫu so với cách tiếp cận thủ công

Vì gói mẫu là một phần của thư viện chuẩn nên bạn sẽ không cần cài đặt bất kỳ phần phụ thuộc nào;

 import "html/template"

Bắt đầu bằng cách tạo tệp HTML để sử dụng làm mẫu cho ứng dụng của bạn. Bạn có thể sử dụng tiêu chuẩn. phần mở rộng html hoặc một trong hai. gohtml hoặc. tmpl, cả hai đều phổ biến. Dù bạn sử dụng tiện ích mở rộng nào, chức năng trong ứng dụng của bạn sẽ giống nhau. Một số trình soạn thảo văn bản có thể áp dụng đánh dấu cú pháp khác nhau tùy thuộc vào phần mở rộng của mẫu của bạn. Đây là một bộ xương cơ bản

 <!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>

</body>
</html>

Lưu tệp này vào thư mục chương trình Go của bạn. Bây giờ bạn có thể bắt đầu làm việc với nó, như một mẫu, trong chương trình của bạn

Tạo một phiên bản toàn cầu của phương thức Mẫu của gói mẫu. Bạn sẽ truy cập phiên bản mẫu này từ các phần khác nhau trong chương trình của mình

 var tmplt *template.Template

Bạn sẽ phải tạo một máy chủ đơn giản để kết xuất và hiển thị các mẫu của mình. Đây là cách khởi động một máy chủ đơn giản trong Go bằng gói net/http

 func runServer() {
    http.HandleFunc("/home", handlePage)
    err := http.ListenAndServe("localhost:8080", nil)

    if err != nil {
        log.Fatalln("There's an error with the server:", err)
    }
}

Bạn sẽ gọi hàm runServer từ hàm chính của mình để khởi động máy chủ. Máy chủ chỉ có một tuyến, tuyến /home, sẽ hiển thị trang của bạn. Tham số handlePage là tên của hàm xử lý sẽ hiển thị trang của bạn. Phương thức ListenAndServe khởi động máy chủ lắng nghe trên cổng 8080 trên máy chủ cục bộ, tôi. e. máy tính của riêng bạn

Truyền biến cho mẫu

Tạo một cấu trúc toàn cầu có tên Tin tức

 type News struct {
    Headline string
    Body string
}

Bạn sẽ sử dụng cấu trúc này để lưu trữ dữ liệu và chuyển nó vào mẫu của bạn để hiển thị trên trang cuối cùng của bạn. Trong mẫu của bạn, sau đó bạn có thể sử dụng cú pháp này để thêm dữ liệu

 {{ name }} 

Trong đó tên là tên của một biến bạn đã chuyển vào mẫu của mình. Khi bạn kết xuất mẫu, nó sẽ thay thế các giá trị trong dấu ngoặc nhọn bằng dữ liệu tương ứng từ mã Go của bạn. Vì ví dụ sau sẽ truyền một cấu trúc, nên bạn sẽ sử dụng ký hiệu dấu chấm để truy cập các trường của nó

 <body>
    <h1>{{ .Headline }}</h1>
    <p> {{ .Body }} </p>
</body>

Thay thế phần tử nội dung trống trong phần đánh dấu khung của mẫu bằng mã ở trên

Hàm xử lý handlePage sẽ xác minh rằng yêu cầu cho trang là yêu cầu GET. Sau đó, nó điền vào một cấu trúc với dữ liệu mẫu trước khi hiển thị mẫu và phục vụ trang cuối cùng

 func handlePage(writer http.ResponseWriter, request *http.Request) {
    if request.Method == "GET" {
        tmplt, _ = template.ParseFiles("tutorial.html")

        event := News{
            Headline: "makeuseof.com has everything Tech",
            Body: "Visit MUO for anything technology related",
        }

        err := tmplt.Execute(writer, event)

        if err != nil {
            return
        }
    }
}

Phương thức ParseFiles phân tích cú pháp tệp HTML mà bạn chỉ định. Biến sự kiện là cấu trúc được khởi tạo. Phương thức Execute sẽ đưa dữ liệu được cung cấp vào trang cuối cùng, theo các trình giữ chỗ trong mẫu. Execute lấy một ResponseWriter và dữ liệu, trong trường hợp này là cấu trúc

Đây là kết quả từ việc chạy máy chủ và truy cập trang

A web page with a heading and a paragraph of text

Sử dụng cấu trúc điều khiển trong mẫu

Bạn cũng có thể sử dụng các cấu trúc điều khiển như câu điều kiện và vòng lặp trong mẫu của mình

Một vòng lặp cho phép bạn xuất một số giá trị và sử dụng lại cấu trúc giống nhau cho từng giá trị. Sử dụng từ khóa phạm vi để xác định phần đầu của nội dung lặp lại và từ khóa kết thúc cho phần cuối. Trong vòng lặp, bạn có thể sử dụng {{. }} cú pháp để thêm giá trị hiện tại

________số 8

Sau đó, bạn sẽ chuyển tên của cấu trúc dữ liệu mà bạn muốn lặp qua dưới dạng tham số cho phương thức Execute

 makeUseOfCategories := []string{"Technology Explained", "Programming", "Linux",
   "Android", "iOS", "Many More................"}

err := tmplt.Execute(writer, makeUseOfCategories)

if err != nil {
    return
}

Biến makeUseOfCategories là một lát chuỗi để chuyển thành tham số dữ liệu. Đây là kết quả của việc lặp qua lát cắt

A web page showing a list of MUO categories

Bạn có thể sử dụng câu lệnh có điều kiện trong mẫu của mình để kiểm tra giá trị của biến boolean. Tạo một cấu trúc với các trường boolean, như thế này

 <!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>

</body>
</html>
0

Để sử dụng điều kiện, hãy đặt từ khóa if trong dấu ngoặc kép trước tên của biến cần kiểm tra. Kết thúc khối điều kiện bằng từ khóa end trong dấu ngoặc nhọn

 <!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>

</body>
</html>
1

Khởi tạo một cấu trúc trong Go sẽ đặt các giá trị thành false theo mặc định, vì vậy nếu bạn không khởi tạo một trường, nó sẽ đánh giá thành false. Khi khởi tạo cấu trúc và chuyển biến dưới dạng dữ liệu vào mẫu, chỉ những trường đánh giá đúng mới khiến đầu ra xuất hiện

 <!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>

</body>
</html>
2

Đầu ra cuối cùng chỉ bao gồm một đoạn văn vì chỉ có trường isTrue đánh giá là đúng

A web page showing a single occurrence of the phrase 'evaluates true'.

Bạn không cần phải sử dụng các mẫu cho các ứng dụng phụ trợ của mình

Tạo khuôn mẫu không phải là một yêu cầu đối với các ứng dụng Go của bạn. Bạn có thể sử dụng các cách tiếp cận khác như nhúng cấu trúc trang vào chương trình của mình, bên cạnh logic của nó và các hành vi khác

Tuy nhiên, cuối cùng bạn sẽ kiếm được nhiều việc hơn cho chính mình. Tạo khuôn mẫu giúp ngăn chặn các cuộc tấn công XSS và giúp dễ dàng phân tách công việc trên cấu trúc trang khỏi logic phụ trợ