从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
	}
}
相关推荐
Gofarlic_oms114 小时前
利用API实现ANSYS许可证管理自动化集成
运维·服务器·开发语言·matlab·自动化·负载均衡
AI+程序员在路上15 小时前
VS Code 完全使用指南:下载、安装、核心功能与 内置AI 编程助手实战
开发语言·人工智能·windows·开源
invicinble15 小时前
这里对java的知识体系做一个全域的介绍
java·开发语言·python
小码哥_常15 小时前
MyBatis-Plus:让数据库操作飞起来的神器
后端
catchadmin15 小时前
使用 PHP TrueAsync 改造 Laravel 协程异步化的可行路径
开发语言·php·laravel
wbs_scy15 小时前
【Linux 线程进阶】进程 vs 线程资源划分 + 线程控制全详解
java·开发语言
2301_8112743116 小时前
基于SpringBoot的智能家居管理系统
spring boot·后端·智能家居
AI人工智能+电脑小能手16 小时前
【大白话说Java面试题】【Java基础篇】第15题:JDK1.7中HashMap扩容为什么会发生死循环?如何解决
java·开发语言·数据结构·后端·面试·哈希算法
舒一笑16 小时前
我把设备指纹生成逻辑拆开了:它到底凭什么区分不同设备?
后端·程序员·掘金技术征文
Nicander16 小时前
多数据源下@transcation事务踩坑
java·后端