使用库 GoHtml

Version : 1.0 使用go动态生成html。

go get github.com/klarkxy/gohtml


功能

  • GoTag GoTag代表一个Html的Tag。使用String()接口来产生形如<{name} {attr}>{tags}</{name}>的html代码。
  • GoHtml GoHtml代表一个Html的页面。使用String()接口来生成Html字符串,或者使用MinString()接口来生成紧凑的Html字符串
  • GoParser @TODO GoParser是一个Html的解析器,可以将一个符合标准的html文件解析成Gohtml对象。
  • GoSelector @TODO GoSelector是一个选择器,使用类似于jQuery选择器的格式,对Gohtml中的Tags进行批量操作

GoTag

使用gohtml.Tag(name)来创建一个GoTag。

主要接口:

// 将GoTag转化为html字符串输出
func (cur *GoTag) String() string;
// 在当前Tag中插入若干个Tag/Text,返回当前Tag
func (cur *GoTag) Append(tags ...fmt.Stringer) *GoTag;
// 在当前Tag下新建一个Tag,返回新建出来的Tag
func (cur *GoTag) Tag(name string) *GoTag;
// 设置当前Tag为self-Closing,返回当前Tag
func (cur *GoTag) Self() *GoTag;
// 在当前Tag中插入一条string,返回当前Tag
func (cur *GoTag) Text(str string) *GoTag;
// 设置属性,返回当前Tag
func (cur *GoTag) Attr(attrs ...string) *GoTag;

第一个例子

htm1 := gohtml.Tag("p").Text("Hello World!")
fmt.Println(htm.String())

输出

<p>Hello World!
</p>

设置属性

设置一个属性

htm := gohtml.Tag("a").Attr("href", "https://www.zhihu.com/").Text("打开知乎")
fmt.Println(htm.String())

输出

<a href="https://www.zhihu.com/">打开知乎
</a>

设置多个属性

可以多次调用Attr接口,也可以一次性调用中传入多个参数。

htm1 := gohtml.Tag("button").Attr("type", "button").Attr("href", "https://www.zhihu.com/").Text("打开知乎")
htm2 := gohtml.Tag("button").Attr("type", "button", "href", "https://www.zhihu.com/").Text("打开知乎")
fmt.Println(htm1.String())
fmt.Println(htm2.String())

输出

<button type="button" href="https://www.zhihu.com/">打开知乎
</button>
<button type="button" href="https://www.zhihu.com/">打开知乎
</button>

SelfClosing Tag

html的SelfClosing-Tag

htm1 := gohtml.Tag("meta").Attr("http-equiv", "X-UA-Compatible").Attr("content", "IE=edge").Self()
fmt.Println(htm1.String())

输出

<meta http-equiv="X-UA-Compatible" content="IE=edge">

GoTag的嵌套

table := gohtml.Tag("table")
tr1 := table.Tag("tr")
tr1.Tag("th").Text("1")
tr1.Tag("th").Text("2")
tr2 := table.Tag("tr")
tr2.Tag("th").Text("3")
tr2.Tag("th").Text("4")
fmt.Println(table.String())

输出

<table><tr><th>1</th><th>2</th></tr><tr><th>3</th><th>4</th></tr>
</table>

更为优美的书写方式

目前已经支持大部分html-tag,可以直接进行调用。

同时支持gohtml.Xxx()或者GoTag.Xxx()的方式。效果同gohtml.Tag("xxx")或者GoTag.Tag("xxx")

同样,也支持了GoTag.Yyy(val string)的方式,直接设置属性,效果同GoTag.Attr("yyy", val)

详见api.go、attr.go、self.go、singleattr.go

由于html的属性种类繁多,可能会有缺漏,请务必提醒我。

form := gohtml.Form()
form.H2().Text("Please Sign In")
form.Input().Type("username").Placeholder("Username").Required().Autofocus()
form.Input().Type("password").Placeholder("Password").Required()
divlabel := form.Div().Label()
divlabel.Input().Type("checkbox").Value("Remember me")
divlabel.Text("Remember me.")
form.Button().Type("submit").Text("Sign in")
fmt.Println(form.String())

输出

<form><h2>Please Sign In</h2><input type="username" placeholder="Username"><input type="password" placeholder="Password"><div><label><input type="checkbox" value="Remember me">Remember me.</label></div><button type="submit">Sign in</button>
</form>

GoHtml

通常意义上,我们可以把一个html文件分为以下6个部分。

<!DOCTYPE html>
<html><head>{{.Meta}}{{.Link}}{{.HtmlHead}}</head><body>{{.Body}}{{.Script}}</body>{{.Html}}
</html>

我们调用gohtml.NewHtml()来生成一个GoHtml,调用其String()接口来将之转换成html字符串。

常用接口

// 生成一个GoHtml
func NewHtml() *GoHtml;
// 转化为html字符串输出。如果不希望有空格和换行,使用MinString()
func (cur *GoHtml) String() string;
func (cur *GoHtml) MinString() string;
// 获取对应Tag
func (cur *GoHtml) Html() *GoTag;
func (cur *GoHtml) Head() *GoTag;
func (cur *GoHtml) Body() *GoTag;
// 增加一条Tag
func (cur *GoHtml) Meta() *GoTag;
func (cur *GoHtml) Link() *GoTag;
func (cur *GoHtml) Script() *GoTag;
  • 对于Html()接口,调用Tag()接口增加的Tag将会增加在{{.Html}}
  • 对于Head()接口和Body()接口,任何增加属性的行为将会失效
  • 对于Meta()Link()Script()接口,调用接口会增加一条对应的Tag

一个空的GoHtml

htm := gohtml.NewHtml()
fmt.Println("String:")
fmt.Println(htm.String())
fmt.Println("MinString:")
fmt.Println(htm.MinString())

输出

String:
<!DOCTYPE html>
<html><head></head><body></body>
</html>
MinString:
<!DOCTYPE html><html><head></head><body></body></html>

一个基本的Bootstrap3框架

bootstrap := gohtml.NewHtml()
bootstrap.Html().Lang("zh-CN")
// Meta部分
bootstrap.Meta().Charset("utf-8")
bootstrap.Meta().Http_equiv("X-UA-Compatible").Content("IE=edge")
bootstrap.Meta().Name("viewport").Content("width=device-width, initial-scale=1")
// Css引入
bootstrap.Link().Href("https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css").Rel("stylesheet")
// Js引入
bootstrap.Script().Src("https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js")
bootstrap.Script().Src("https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/js/bootstrap.min.js")
// Head
bootstrap.Head().Title().Text("Bootstrap 101 Template")
// Body
bootstrap.Body().H1().Text("Hello World!")fmt.Println(bootstrap.String())

输出

<!DOCTYPE html>
<html lang="zh-CN"><head><meta charset="utf-8"><meta http_equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1"><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css"><title>Bootstrap 101 Template</title></head><body><h1>Hello World!</h1><script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js">    </script><script src="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/js/bootstrap.min.js">    </script></body>
</html>

现在已经加入了Bootstrap模块,使用import "github.com/klarkxy/gohtml/bootstrap"来直接使用吧! github.com/klarkxy/gohtml/bootstrap

golang 解析html相关推荐

  1. go 发送http请求; Golang 解析JSON 篇

    https://www.runoob.com/go/go-fmt-sprintf.html go 发送http请求: package mainimport ("io/ioutil" ...

  2. Golang解析yaml格式文件

    关注公众号 风色年代(itfantasycc) 300G微服务资料等你拿! 作者:会飞的鲶鱼 链接:Golang解析yaml格式文件 - 简书 來源:简书 简书著作权归作者所有,任何形式的转载都请联系 ...

  3. go语言处理html文件,golang解析html网页的方法

    1.先看一下整个结构: 主要是web和html目录,分别存放go代码和html相关的资源文件. 2.html代码比较简单,代码如下: Go web 用户名: 密码: 就是显示一张图片,然后加登陆表单. ...

  4. golang解析数字证书

    golang解析数字证书 基础知识 在解析数字证书之前我们要学习一下数字证书的知识,明白一下数字证书中的一些概念. 下面这些知识是你所要了解的,PKCS#8. PKCS#1.Certificate C ...

  5. Golang——解析GBK编码XML文件

    Golang--解析GBK编码XML文件 对于golang的xml解析,大家应该很熟悉了,或者说golang的xml解析其实很简单.语言本身支持xml解析,通过实例即可快速理解.但是在实际开发中总会遇 ...

  6. golang解析嵌套yaml配置(局部解析)

    golang中解析yaml配置文件 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/Ra ...

  7. golang转word到html,golang 解析word文档操作

    baliance/gooxml gooxml是可以对整个office document提供支持的golang库,功能很强大,这里简单给出对word文档的读取案例 安装 go get baliance. ...

  8. Golang 解析Yaml格式

    Golang官方并没有提供Yaml解析包,所以需要使用第三方包.可用的第三方包有不少,这里选择的是 gopkg.in/yaml.v2,这个包在github上有不少的star,也的确挺好用.其使用的是A ...

  9. golang 解析php序列化,golang实现php里的serialize()和unserialize()序列和反序列方法详解...

    Golang 实现 PHP里的 serialize() . unserialize() 安装 go get -u github.com/techleeone/gophp/serialize 用法 pa ...

最新文章

  1. LeetCode 123. Best Time to Buy and Sell Stock III--Python解法--动态规划--数学题
  2. 锁死AI基础研究的两个「智子」是什么?
  3. C#中使用WeiFenLuo.WinFormsUI.Docking.dll实现窗口停靠效果
  4. Linux下文件查找命令find笔记
  5. js 和java有关系吗,javascript和JAVA有什么关系
  6. jsoup 简单应用
  7. 【蓝桥杯嵌入式】【STM32】3_Buzzer之将JTAG功能相关引脚映射为普通IO、AFIO的使用
  8. 图解Http读完有感
  9. 安卓蓝牙键盘切换输入法_超薄无线蓝牙双模罗技K580键盘,自由切换享受打字快乐...
  10. Halcon 学习总结——基于动态阈值法、GMM(高斯混合模型)、SVM(支持向量机)的网状物缺陷检测
  11. 关于防止表单form重复提交的方式
  12. python中read,readline,和readlines的区别 并逐行输出
  13. Qt配置OpenCV教程,亲测已试过(详细版)
  14. c# 如何调用java的wsdl文件,C#客户端如何调用wsdl文件
  15. 信息内容安全-基于微博热搜的yuqing监测系统
  16. 社交电商概念与特点,十大社交电商平台及产业链模式图解
  17. 关于开发板ping不通主机,360安全卫士阻拦
  18. dll占的究竟是谁的空间?——浅谈Windows内存机制
  19. You Are the One HDU - 4283 区间DP
  20. 50个很棒的免费工具和资源,总有一款适合您!

热门文章

  1. 科幻片天际SKYLINE,喜欢科幻的朋友不要错过。
  2. C#的加密解密算法,包括Silverlight的MD5算法
  3. java线程中等待_Java:线程中的Thread.sleep():没有等待
  4. AD9288的介绍和使用
  5. 串口的硬件流控和软件流控
  6. DAC7612的使用
  7. 线下生意再次“受宠”:大数据给你添点料
  8. 当我们在讨论奢侈品行业时,人工智能可以做什么?
  9. AndroidStudio 3.0升级之compile、implementation简要说明
  10. WCF版的PetShop之一:PetShop简介[提供源代码下载]