从0开始学go第二天

template初识

大佬博客:https://www.liwenzhou.com/posts/Go/template/

第一个坑:

HTTP server start failed , err : listen tcp: address 9090: missing port in address

解决:

吾甚是愚蠢,抄都抄错了,写端口的时候

Go 复制代码
":9000" 写成了 "9000",忘记加冒号了

代码1

Go 复制代码
package main

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

func sayHello(w http.ResponseWriter, r *http.Request) {
	//解析模板
	t, err := template.ParseFiles("./hello.tmpl")
	if err != nil {
		fmt.Printf("Parse template failed,err : %v\n", err)
		return
	}
	//渲染模板
	err = t.Execute(w, "jzy")
	if err != nil {
		fmt.Printf("render template failed,err : %v\n", err)
		return
	}
}

func main() {
	http.HandleFunc("/", sayHello)
	err := http.ListenAndServe(":9000", nil)
	if err != nil {
		fmt.Printf("HTTP server start failed , err : %v\n", err)
		return
	}
}

代码2:

Go 复制代码
package main

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

type User struct {
	Name   string
	Gender string
	Age    int
}

func sayHello(w http.ResponseWriter, r *http.Request) {
	//定义模板

	//解析模板
	t, err := template.ParseFiles("./hello.tmpl")
	if err != nil {
		fmt.Printf("parse template failed , err : %v\n", err)
		return
	}
	//渲染模板
	//结构体 内容首字母大写
	u1 := User{
		Name:   "蒋志宇",
		Gender: "男",
		Age:    18,
	}

	//map首字母不用大写
	m1 := map[string]interface{}{
		"Name":   "老马",
		"Gender": "男",
		"Age":    18,
		"td":     "一开枪就马",
	}
	t.Execute(w, map[string]interface{}{
		"u1": u1,
		"m1": m1,
	})
}

func main() {
	http.HandleFunc("/", sayHello)
	err := http.ListenAndServe(":9000", nil)
	if err != nil {
		fmt.Printf("HTTP server start failed , err : %v\n", err)
		return
	}
}

今天主要是学了学这个template模板库

Go语言标准库之http/template | 李文周的博客 (liwenzhou.com)

代码2:

Go 复制代码
package main

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

func f1(w http.ResponseWriter, r *http.Request) {
	//定义一个函数
	//要么只有一个返回值,要么第二个返回值必须是err类型
	kua := func(arg string) (string, error) {
		return arg + "真帅", nil
	}
	//自定义的函数要想使用,就要告诉我们的模板现在多了一个函数,要在解析模板之前
	//定义模板
	t := template.New("hello.tmpl")
	//告诉模板引擎,现在多了一个函数kua
	t.Funcs(template.FuncMap{
		"kua": kua,
	})

	//如果要用NEW,模板名称一定要一样才行

	//解析模板
	_, err := t.ParseFiles("./hello.tmpl")
	if err != nil {
		fmt.Printf("parse template failed , err : %v\n", err)
		return
	}
	name := "jzy"
	t.Execute(w, name)
	//渲染模板
}

func demo1(w http.ResponseWriter, r *http.Request) {
	//定义模板
	//解析模板,解析多个时,把被包含的写到后面
	t, err := template.ParseFiles("./t.tmpl", "./ul.tmpl")
	if err != nil {
		fmt.Printf("parse template failed , err : %v\n", err)
		return
	}
	name := "jzy大帅哥"
	//渲染模板
	t.Execute(w, name)
}

func main() {
	http.HandleFunc("/", f1)
	http.HandleFunc("/tmpldemo", demo1)
	err := http.ListenAndServe(":9000", nil)
	if err != nil {
		fmt.Printf("HTTP server start failed , err : %v\n", err)
		return
	}
}
相关推荐
OneWind2 分钟前
使用CloudFlare R2上传图片慢怎么解决
后端
River4165 分钟前
Javer 学 c++(十六):对象特性篇(上)
c++·后端
文心快码BaiduComate12 分钟前
轻松实践:用Python实现“名字大作战”游戏,表白Zulu!
前端·后端·微信小程序
bobz96513 分钟前
tc 的锁问题
后端
空想兔15 分钟前
JeecgBoot SkyWalking 分布式链路跟踪配置
后端·elasticsearch
sunbin32 分钟前
稀土掘金我要吐槽你
后端
程序员鱼皮2 小时前
我代表编程导航,向大家道歉!
前端·后端·程序员
zjjuejin2 小时前
Maven 生命周期与插件机制
后端·maven
阿杆2 小时前
为什么我建议你把自建 Redis 迁移到云上进行托管
redis·后端
Java水解3 小时前
go语言教程(全网最全,持续更新补全)
后端·go