从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
	}
}
相关推荐
Victor3565 分钟前
MongoDB(24)如何对查询结果进行排序?
后端
怕浪猫22 分钟前
第21章:微服务与分布式架构中的Go应用
后端·go·编程语言
武子康35 分钟前
大数据-239 离线数仓 - 广告业务实战:Flume 导入日志到 HDFS,并完成 Hive ODS/DWD 分层加载
大数据·后端·apache hive
摸鱼的春哥1 小时前
Agent教程15:认识LangChain(中),状态机思维
前端·javascript·后端
风象南8 小时前
我把大脑开源给了AI
人工智能·后端
橙序员小站12 小时前
Agent Skill 是什么?一文讲透 Agent Skill 的设计与实现
前端·后端
怒放吧德德12 小时前
Netty 4.2 入门指南:从概念到第一个程序
java·后端·netty
雨中飘荡的记忆14 小时前
大流量下库存扣减的数据库瓶颈:Redis分片缓存解决方案
java·redis·后端
开心就好202515 小时前
UniApp开发应用多平台上架全流程:H5小程序iOS和Android
后端·ios
悟空码字16 小时前
告别“屎山代码”:AI 代码整洁器让老项目重获新生
后端·aigc·ai编程