gonew 介绍

前几周。在关注的 go 提案每周会议中,发现了一条比较感兴趣的内容:gonew: templates for new modules ,通过标题可以猜到 gonew 应该是一个通过配置项目模板生成新项目的模块。 通过对 discussions 中 rsc 所描述的内容进行分析,可以得知为什么要启动这么一个新项目: go 团队经常收到用户的请求,想要通过模板启动一个新项目,即以某种基本的项目模板来创建一个新 Go module。Russ 私下编写了一个实现这个功能的小工具:rsc.io/tmp/gonew. Russ 在 google 内部宣传该工具后,Google 内部的一些团队便定制了一些模板 (template) ,尤其是 ServiceWeaver 团队的响应尤为积极。这一切最终让 Russ 决定引入 golang.org/x/tools/cmd/gonew。 gonew 工具的引入大幅简化了 Go 项目的创建,同时由于对自定义项目模板的支持,也可以提高 Go 项目的标准化水平。目前 gonew 工具是实验性的,后续可能会增加新的特性,但目前的核心功能是会保留的。 通过对 discussions 中社区用户开发着的回应可以看出,大家纷纷讲述了没有 gonew 前所使用的工具,并对 gonew 建言献策,可以看出大部分的开发者都十分欢迎这个新功能的。 接下来就由我来介绍 gonew。 安装 通过以下命令安装 gonew: go install golang.org/x/tools/cmd/gonew@latest $ go install golang.org/x/tools/cmd/gonew@latest go: downloading golang.org/x/tools v0.12.0 go: downloading golang.org/x/mod v0.12.0 执行 gonew: ...

八月 19, 2023 · overstarry

遍历 map 列表的 Golang 模板

遍历 map 列表的 Golang 模板遇到的问题及解决方式 出现了什么问题? 今天在使用 go template 渲染文本的时候,在运行的时候,遇到了一个问题导致渲染不成功,具体的问题是: 2021/09/10 09:47:05 template: test:2:3: executing "test" at <.Attributes>: can't evaluate field Attributes in type interface {} 具体的代码如下: package main import ( "log" "os" "strings" "text/template" ) type TestData struct { Name string `json:"name"` Attributes map[string]interface{} } const testTemplate = `{{ range $key, $value := .Attributes }} {{.Name}} {{ $key }}: {{ $value }}{{- end }}` func main() { tmpl, err := template.New("test").Parse(strings.TrimSpace(testTemplate)) if err != nil { log.Println(err) return } data := TestData{ "hello", map[string]interface{}{ "key": "hello", "value": "json", }, } err = tmpl.Execute(os.Stdout, data) if err != nil { log.Println(err) return } } 问题出现的原因? 模板在 range 循环中会把。设置为当前 Attributes 变量,在 Attributes 变量中没有 name 这个成员结构,这就导致模板没有渲染成功。 ...

九月 10, 2021 · overstarry