在开始进行Go开发之前,我强烈推荐你阅读以下Goland的三种设置选项

这篇文章是2018年俺的日历活动中第6天的文章。

已完成

    • 開発環境をDocker化してローカル環境から切り離す

go fmtやgoimportsなどの各種静的解析/整形ツールをファイル保存時に自動実行するようにする

File Watchers設定ファイルをimportして各種リントを自動実行するように設定している

pre-commitファイルを設定して、golintがエラーを出力する場合にはcommit自体できないようにする

将开发环境转换为Docker环境.

创建Docker容器 Docker

    1. 如果没有安装Docker,将在机器上安装Docker。

 

    1. 启动Goland,并从插件中安装Docker集成,然后重新启动Goland。

 

    1. 创建一个新项目,然后在Docker选项卡中按右键选择Docker→images,如图1所示,选择Pull Image…。

 

    1. 在Repository中输入golang,然后按OK,应该会拉取golang:latest的Docker镜像。

 

    1. 在images中将创建golang:latest,然后按右键选择Create container,选择Create…。

 

    设置和确认Name/Image ID/Container Name,如图2所示,然后按Run。
image.png
image.png

编辑执行配置

您好,生成一个显示”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。

image.png
image.png

这样就完成了将执行环境Docker化。

在文件保存时自动运行 go fmt 等各种代码整形工具。

安装插件

从插件中安装File Watchers,并重新启动Goland。
然后,请根据您要使用的以下格式化工具进行设置。
【2019/09/03补充】
我已在以下的gist中放置了包含所有文件的文件,您也可以将其保存到本地并导入,以完成设置。
– File Watchers配置文件

image.png

我在导入文件后,将文件监视器的应用级别设置为全局,并且按照上面的图片进行操作。这样一来,我就可以在每个项目上都不需要重复以下步骤,而是始终以相同的方式使用相同的代码检查工具!

运行 go fmt/goimports

image.png

翻译:进行高尔夫击球技术训练

请执行下面的操作来安装golint:在终端中使用命令”go get -u golang.org/x/lint/golint”来安装golint。然后在文件监视器的设置界面中选择”自定义”,并进行以下设置。

image.png

改写成中文的唯一一个选择:
返回

在sourcegraph.com/sqs/goreturns上获取-goreturns,然后在File Watchers的配置页面中选择,并进行以下设置。

image.png

去兽医那里

在”文件监视器”的设置页面中,选择””,然后按照下面的方式进行设置。

image.png

我试着运行一下并确认。

我将创建一个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

请善用上述工具来创建更好的开发环境!如果还有其他方便的工具,请在评论中分享给我,不胜感激!

广告
将在 10 秒后关闭
bannerAds