GoHTML is an HTML formatter for Go. You can format HTML source codes by using this package.
Example
Example Go source code:
package main
import (
"fmt"
"github.com/yosssi/gohtml"
)
func main() {
h := `<!DOCTYPE html><html><head><title>This is a title.</title><script type="text/javascript">
alert('aaa');
if (0 < 1) {
alert('bbb');
}
</script><style type="text/css">
body {font-size: 14px;}
h1 {
font-size: 16px;
font-weight: bold;
}
</style></head><body><form><input type="name"><p>AAA<br>BBB></p></form><!-- This is a comment. --></body></html>`
fmt.Println(gohtml.Format(h))
}
Output:
<!DOCTYPE html>
<html>
<head>
<title>
This is a title.
</title>
<script type="text/javascript">
alert('aaa');
if (0 < 1) {
alert('bbb');
}
</script>
<style type="text/css">
body {font-size: 14px;}
h1 {
font-size: 16px;
font-weight: bold;
}
</style>
</head>
<body>
<form>
<input type="name">
<p>
AAA
<br>
BBB>
</p>
</form>
<!-- This is a comment. -->
</body>
</html>
You can output formatted HTML source codes with line no by calling FormatWithLineNo
:
package main
import (
"fmt"
"github.com/yosssi/gohtml"
)
func main() {
h := `<!DOCTYPE html><html><head><title>This is a title.</title><script type="text/javascript">
alert('aaa');
if (0 < 1) {
alert('bbb');
}
</script><style type="text/css">
body {font-size: 14px;}
h1 {
font-size: 16px;
font-weight: bold;
}
</style></head><body><form><input type="name"><p>AAA<br>BBB></p></form><!-- This is a comment. --></body></html>`
fmt.Println(gohtml.FormatWithLineNo(h))
}
Output:
1 <!DOCTYPE html>
2 <html>
3 <head>
4 <title>
5 This is a title.
6 </title>
7 <script type="text/javascript">
8 alert('aaa');
9 if (0 < 1) {
10 alert('bbb');
11 }
12 </script>
13 <style type="text/css">
14 body {font-size: 14px;}
15 h1 {
16 font-size: 16px;
17 font-weight: bold;
18 }
19 </style>
20 </head>
21 <body>
22 <form>
23 <input type="name">
24 <p>
25 AAA
26 <br>
27 BBB>
28 </p>
29 </form>
30 <!-- This is a comment. -->
31 </body>
32 </html>
You can format Go html/template package's template's execute result by passing Writer
to the tpl.Execute
:
package main
import (
"os"
"text/template"
"github.com/yosssi/gohtml"
)
func main() {
tpl, err := template.New("test").Parse("<html><head></head><body>{{.Msg}}</body></html>")
if err != nil {
panic(err)
}
data := map[string]interface{}{"Msg": "Hello!"}
err = tpl.Execute(gohtml.NewWriter(os.Stdout), data)
if err != nil {
panic(err)
}
}
Output:
<html>
<head>
</head>
<body>
Hello!
</body>
</html>
Docs