亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

GO學習筆記 - 模版渲染及多種輸出

發布時間:2020-06-13 20:53:58 來源:網絡 閱讀:591 作者:小慢哥 欄目:編程語言

GO學習筆記 - 模版渲染及多種輸出

本文主題:基于內置的text/template實現Golang模版渲染,并將結果寫入文件、屏幕、變量。

小慢哥的原創文章,歡迎轉載


目錄

? 定義結構體
? 定義模版文本
? 模版渲染及輸出方式
? 完整例子


定義結構體

首先,定義一個結構體,用于后面的模版渲染

type Person struct {
    Name string
    Age int
    Boy bool
}

注意:struct的元素必須要可導出(大寫打頭),否則渲染時候找不到

實例化結構體,用于模版渲染時候獲得對應值

foo := Person{
    Name: "foo",
    Age: 18,
    Boy: false,
}

定義模版文本

接下來,定義一個模版文本,此處直接定義了一個常量,表示模版文本

const text = `My name is {{.Name}},
I'm {{.Age}} years old,
I'm a {{if .Boy}}boy{{else}}girl{{end}}.
`

讀取文本,獲取template的handler

tmpl, err := template.New("").Parse(text)
if err != nil {
    log.Fatalln(err)
}

模版渲染及輸出方式

在渲染時候需要傳遞一個參數,用于指定輸出到何處,常見的有3種目的地:

? 輸出到文件
? 輸出到變量
? 輸出到屏幕

輸出到文件:需要先open一個文件并獲得文件句柄

f, err := os.OpenFile("/tmp/test", os.O_WRONLY|os.O_CREATE, 0644)
defer f.Close()
if err != nil {
    log.Fatalln(err)
}

// 渲染并寫入文件
if err := tmpl.Execute(f, foo); err != nil {
    log.Fatalln(err)
}

輸出到變量

var buf bytes.Buffer

if err := tmpl.Execute(&buf, foo); err != nil {
    log.Fatalln(err)
}
fmt.Println(buf.String())

輸出到屏幕

if err := tmpl.Execute(os.Stdout, foo); err != nil {
    log.Fatalln(err)
}

完整例子

package main

import (
    "log"
    "os"
    "text/template"
)

type Person struct {
    Name string
    Age int
    Boy bool
}

func main() {
    // 實例化結構體
    foo := Person{
        Name: "foo",
        Age: 18,
        Boy: false,
    }

    // 定義模版文本
    const text = `My name is {{.Name}},
I'm {{.Age}} years old,
I'm a {{if .Boy}}boy{{else}}girl{{end}}.
`

    // 根據指定模版文本生成handler
    tmpl, err := template.New("").Parse(text)
    if err != nil {
        log.Fatalln(err)
    }

    // 模版渲染,并寫入文件
    f, err := os.OpenFile("/tmp/test", os.O_WRONLY|os.O_CREATE, 0644)
    defer f.Close()
    if err != nil {
        log.Fatalln(err)
    }
    if err := tmpl.Execute(f, foo); err != nil {
        log.Fatalln(err)
    }

    // 模版渲染,并賦值給變量
    var buf bytes.Buffer
    if err := tmpl.Execute(&buf, foo); err != nil {
        log.Fatalln(err)
    }
    fmt.Println(buf.String())

    // 模版渲染,并輸出到屏幕標準輸出
    if err := tmpl.Execute(os.Stdout, foo); err != nil {
        log.Fatalln(err)
    }
}

測試效果

# 編譯
go build template.go
./template

# 輸出
My name is foo,
I'm 18 years old,
I'm a girl.

My name is foo,
I'm 18 years old,
I'm a girl.

# 查看文件(/tmp/test)內容
My name is foo,
I'm 18 years old,
I'm a girl.
向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

夏河县| 射洪县| 东光县| 菏泽市| 来凤县| 清徐县| 巫山县| 蓝山县| 阿巴嘎旗| 南郑县| 娄底市| 武乡县| 阳西县| 城步| 泰顺县| 开江县| 华亭县| 东乌珠穆沁旗| 会东县| 南溪县| 临潭县| 金塔县| 故城县| 六安市| 北票市| 永清县| 兴海县| 聂拉木县| 天峻县| 海丰县| 大新县| 福安市| 藁城市| 隆昌县| 原平市| 太白县| 固镇县| 泊头市| 福鼎市| 阳西县| 巴彦淖尔市|