真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

GO學(xué)習(xí)筆記-模版渲染及多種輸出

GO學(xué)習(xí)筆記 - 模版渲染及多種輸出

成都創(chuàng)新互聯(lián)公司是一家專注于成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作、外貿(mào)網(wǎng)站建設(shè)與策劃設(shè)計(jì),雙清網(wǎng)站建設(shè)哪家好?成都創(chuàng)新互聯(lián)公司做網(wǎng)站,專注于網(wǎng)站建設(shè)10多年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:雙清等地區(qū)。雙清做網(wǎng)站價(jià)格咨詢:18982081108

本文主題:基于內(nèi)置的text/template實(shí)現(xiàn)Golang模版渲染,并將結(jié)果寫入文件、屏幕、變量。

小慢哥的原創(chuàng)文章,歡迎轉(zhuǎn)載


目錄

? 定義結(jié)構(gòu)體
? 定義模版文本
? 模版渲染及輸出方式
? 完整例子


定義結(jié)構(gòu)體

首先,定義一個(gè)結(jié)構(gòu)體,用于后面的模版渲染

type Person struct {
    Name string
    Age int
    Boy bool
}

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

實(shí)例化結(jié)構(gòu)體,用于模版渲染時(shí)候獲得對(duì)應(yīng)值

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

定義模版文本

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

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)
}

模版渲染及輸出方式

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

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

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

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() {
    // 實(shí)例化結(jié)構(gòu)體
    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}}.
`

    // 根據(jù)指定模版文本生成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())

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

測(cè)試效果

# 編譯
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)內(nèi)容
My name is foo,
I'm 18 years old,
I'm a girl.

文章題目:GO學(xué)習(xí)筆記-模版渲染及多種輸出
網(wǎng)頁URL:http://weahome.cn/article/poioeh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部