Golang で Hyperscript っぽい事をするライブラリを作った
読了まで:約2分
とり
これは何をするライブラリか
一言で
[[Golang]] で
[[Hyperscript]] っぽい事を する [[ライブラリ]]
なんだけども、
package main
import (
"log"
"strings"
"golang.org/x/net/html"
. "github.com/nyarla/hypercode/dsl"
)
func main() {
desc := H(`p`, A{`id`: `msg`}, T(`hello, world!`))
node := new(html.Node)
if err := desc.Describe(node); err != nil {
log.Fatal(err)
}
b := new(strings.Builder)
html.Render(b, node)
log.Println(b.String()) // => <p id="msg">hello, world!</p>
}
何故、このライブラリを作ったか
これもまぁ一言で
[[Golang]] で
[[hyperscript]] っぽく [[HTML as code]] な 感じで [[HTML 生成]] が したかった
と
- golang で
個人的に [[Google App Engine]] /Go な [[Web Application]] を 作っていた - が、
作ってる 途中で、 HTML の テンプレートを 書いて golang の ファイルに bundle して 云々 ……が 面倒に 感じた - なので、
HTML ファイルを 直接は 記載しない、 hyperscript っぽい ライブラリが 欲しくなった。 が、 無かったので 作った
と
あと細かい話
今回作った
golang.org/x/net/html
でツリー構造を 作って、 それを golang.org/x/net/html#Render
でio.Writer
に書き出す
みたいなgolang.org/x/net/html
追記: [[2018-04-20]] 仮想 DOM っぽいの
- → [[GopherJS で
hyperapp.js.org っぽい事を する ライブラリ作った ]]
それと、golang.org/x/net/html#Node
html#Node
package describers
import (
"golang.org/x/net/html"
)
type Describer interface {
Describe(target *html.Node) error
}
type DescriberFunc func(target *html.Node) error
func (d DescriberFunc) Describe(target *html.Node) error {
return d(target)
}
とdescribers#Describer
の
以上
と
と
あと
を
もし GitHub に
課金する 事を 考えているのなら、 GitLab に 課金した方が 嬉しいかなー
なんて