在开始进行Go开发之前,我强烈推荐你阅读以下Goland的三种设置选项
这篇文章是2018年俺的日历活动中第6天的文章。
已完成
-
- 開発環境をDocker化してローカル環境から切り離す
go fmtやgoimportsなどの各種静的解析/整形ツールをファイル保存時に自動実行するようにする
File Watchers設定ファイルをimportして各種リントを自動実行するように設定している
pre-commitファイルを設定して、golintがエラーを出力する場合にはcommit自体できないようにする
将开发环境转换为Docker环境.
创建Docker容器 Docker
-
- 如果没有安装Docker,将在机器上安装Docker。
-
- 启动Goland,并从插件中安装Docker集成,然后重新启动Goland。
-
- 创建一个新项目,然后在Docker选项卡中按右键选择Docker→images,如图1所示,选择Pull Image…。
-
- 在Repository中输入golang,然后按OK,应该会拉取golang:latest的Docker镜像。
-
- 在images中将创建golang:latest,然后按右键选择Create container,选择Create…。
- 设置和确认Name/Image ID/Container Name,如图2所示,然后按Run。
编辑执行配置
您好,生成一个显示”Hello, World!”的文件,并编辑执行配置以使其可以在Docker环境中运行。
首先,创建以下的执行文件。
package main
import "fmt"
func main() {
fmt.Println("Hello, World!")
}
接下来,按照以下图片的方式,编辑运行配置。
– 将Command更改为go run /go/src/golang-sample/hello.go。
– 将Run options更改为-v [项目根路径]:/go/src/golang-sample。
这样就完成了将执行环境Docker化。
在文件保存时自动运行 go fmt 等各种代码整形工具。
安装插件
从插件中安装File Watchers,并重新启动Goland。
然后,请根据您要使用的以下格式化工具进行设置。
【2019/09/03补充】
我已在以下的gist中放置了包含所有文件的文件,您也可以将其保存到本地并导入,以完成设置。
– File Watchers配置文件
我在导入文件后,将文件监视器的应用级别设置为全局,并且按照上面的图片进行操作。这样一来,我就可以在每个项目上都不需要重复以下步骤,而是始终以相同的方式使用相同的代码检查工具!
运行 go fmt/goimports
翻译:进行高尔夫击球技术训练
请执行下面的操作来安装golint:在终端中使用命令”go get -u golang.org/x/lint/golint”来安装golint。然后在文件监视器的设置界面中选择”自定义”,并进行以下设置。
改写成中文的唯一一个选择:
返回
在sourcegraph.com/sqs/goreturns上获取-goreturns,然后在File Watchers的配置页面中选择,并进行以下设置。
去兽医那里
在”文件监视器”的设置页面中,选择””,然后按照下面的方式进行设置。
我试着运行一下并确认。
我将创建一个Go文件,用于加载和显示像下面这样的JSON文件。
我会故意添加不必要的换行符和混乱的导入顺序,以确保它会被lint自动格式化。
package main
import (
"encoding/json"
"fmt"
"log"
"io/ioutil"
)
type Product struct {
Id int
Name string
Price int
}
func main() {
bytes, err := ioutil.ReadFile("vro.json")
if err != nil {
log.Fatal(err)
}
var products []Product
if err := json.Unmarshal(bytes, &products); err != nil {
log.Fatal(err)
}
for _, p := range products {
fmt.Printf("%d : %s: %d\n", p.Id, p.Name, p.Price)
}
}
尝试用 ⌘+S 或 Ctrl+S 对此文件进行保存时,应该会自动整理该文件的导入顺序并删除不必要的换行,使其变得如下所示。
package main
import (
"encoding/json"
"fmt"
"io/ioutil"
"log"
)
type Product struct {
Id int
Name string
Price int
}
func main() {
bytes, err := ioutil.ReadFile("vro.json")
if err != nil {
log.Fatal(err)
}
var products []Product
if err := json.Unmarshal(bytes, &products); err != nil {
log.Fatal(err)
}
for _, p := range products {
fmt.Printf("%d : %s: %d\n", p.Id, p.Name, p.Price)
}
}
地味的是文件末尾的换行也被添加进去了。另外,如果应用了golint规则,lint的结果应该会显示在屏幕底部的Run窗口中。
/go/bin/golint /go/src/golang-sample/json_reader.go
/go/src/golang-sample/json_reader.go:10:6: exported type Product should have comment or be unexported
/go/src/golang-sample/json_reader.go:11:2: struct field Id should be ID
阅读结果后,虽然没有出现错误,但在之前的Go文件中,似乎发现了以下改进点:
– 应该在Product上写上评论
– 最好将Id的名称更改为ID
只需按照提出的指正进行修正并重新保存文件,即可确认上述指正已消失。
使用pre-commit来阻止不好的源代码提交
pre-commit是什么?
这是在.git/hooks/下的文件之一。
.git/hooks/中的文件是用来执行与某个事件相关的处理的。
pre-commit是其中的一种,在执行commit之前被调用。通过编辑它,可以在commit之前运行golint,并且如果结果是NG的话,就不能进行提交。
预提交文件
将下面的文件保存为.git/hooks/pre-commit,即可创建一个使git commit失败的环境。
请注意,前提是需要安装golint,如果未安装,请先执行go get -u golang.org/x/lint/golint。
#!/usr/bin/env bash
failed=false
for file in "$@"; do
# redirect stderr so that violations and summaries are properly interleaved.
if ! golint -set_exit_status "$file" 2>&1
then
failed=true
fi
done
if [[ $failed == "true" ]]; then
exit 1
在创建上述文件后,尝试将之前的json_reader.go文件的ID更改为Id并提交时,会出现以下结果,导致提交失败。
~/g/s/golang-sample> git commit -m "test commit"
On branch master
Changes not staged for commit:
modified: json_reader.go
请善用上述工具来创建更好的开发环境!如果还有其他方便的工具,请在评论中分享给我,不胜感激!