从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
	}
}
相关推荐
小码哥_常2 分钟前
一套自己部署的 IM,客户端是同一份 Flutter
前端·后端
紧跟先前的步伐3 小时前
Go AI Agent 实战 24|工具系统工程化收尾与阶段验收
人工智能·ai·golang·1024程序员节
学长毕设3 小时前
基于SpringBoot的实验室资产管理系统
java·spring boot·后端
C^h3 小时前
c++ string
开发语言·c++
raindayinrain3 小时前
c++高性能--原子操作,无锁编程,操作顺序
开发语言·c++·性能优化
学逆向的3 小时前
C++ 合并命名空间
开发语言·c++·网络安全
Zhao-Jichao4 小时前
VS2026 打包 C++ 程序生成 EXE,借助 Installer Project 扩展工具
开发语言·c++
日日大王学编程4 小时前
#Feed 流项目复盘:Redis 时间线缓存与 Outbox 消息可靠性设计
golang·1024程序员节
学逆向的4 小时前
C 局部静态变量
c语言·开发语言·网络安全
大都督会赢的5 小时前
C++第一节课
开发语言·c++