从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
	}
}
相关推荐
stm 学习ing9 分钟前
FPGA 第十讲 避免latch的产生
c语言·开发语言·单片机·嵌入式硬件·fpga开发·fpga
Estar.Lee10 分钟前
查手机号归属地免费API接口教程
android·网络·后端·网络协议·tcp/ip·oneapi
湫ccc1 小时前
《Python基础》之字符串格式化输出
开发语言·python
mqiqe2 小时前
Python MySQL通过Binlog 获取变更记录 恢复数据
开发语言·python·mysql
AttackingLin2 小时前
2024强网杯--babyheap house of apple2解法
linux·开发语言·python
2401_857610032 小时前
SpringBoot社团管理:安全与维护
spring boot·后端·安全
Ysjt | 深2 小时前
C++多线程编程入门教程(优质版)
java·开发语言·jvm·c++
凌冰_2 小时前
IDEA2023 SpringBoot整合MyBatis(三)
spring boot·后端·mybatis