かずきのBlog@hatena

すきな言語は C# + XAML の組み合わせ。Azure Functions も好き。最近は Go 言語勉強中。日本マイクロソフトで働いていますが、ここに書いていることは個人的なメモなので会社の公式見解ではありません。

Go の開発環境を Visual Studio Code に作ってみた on Windows 10

以下のサイトを参考にやってみました。

qiita.com

Go は公式からインストール。

The Go Programming Language

VS Code も公式からインストール。

azure.microsoft.com

Go のインストールは c:\go にしました。インストール後環境変数を見ると GOPATH 環境変数が追加されていてユーザーディレクトリの下の go が設定されていました。

VS Code に Go の拡張機能を入れます。っていうかパブリッシャーがマイクロソフト!?知らんかった…。 少し前の Go の環境構築の記事を見る限り Microsoft ではないパブリッシャーのスクショとかが見受けられるので最近変わったんですかね?

f:id:okazuki:20181018142510p:plain

この段階で .go のファイルのあるフォルダを開いてファイルを適当に開くと以下のツールのインストールをするかという確認が出たので Install All しました。

Installing 12 tools at C:\Users\kaota\go\bin
  gocode
  gopkgs
  go-outline
  go-symbols
  guru
  gorename
  dlv
  gocode-gomod
  godef
  godef-gomod
  goreturns
  golint

ここでインストールしなくても Go: Install/Update tools で同じことが出来ます。

私は、このあと Go: Install/Update tools を実行して全ツールを追加しておきました。

f:id:okazuki:20181019092858p:plain

実行してみよう

GOHOME の下の src フォルダに hello_world というフォルダを作って Visual Studio Code で開きます。 main.go という名前でファイルを開いて以下のようなコードを書きます。

package main

import (
    "fmt"
)

func main() {
    fmt.Print("Hello world")
}

書いてる途中に補間具合を見てみたのですが結構優秀そうです。下の画像のあと Enter キーを押すと import が自動挿入されました。

f:id:okazuki:20181019093043p:plain

Ctrl + Shift + B を押してもタスクが構成されていないと出るので、テンプレートから task.json を生成を選択して Others を選んで出てきた tasks.json を以下のようにしました。

{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "tasks": [
        {
            "label": "run",
            "type": "shell",
            "command": "go",
            "args": [
                "run",
                "${file}"
            ]
        }
    ]
}

もう一度 main.go に行って Ctrl + Shift + B をするとデフォルトのビルドタスクを選択するように言われるので run を選びます。そして、もう一度 main.go に戻って Ctrl + Shift + B をするとちゃんと実行されました。

Hello world

デバッグの画面を出して F5 を押すとデバッグが始まります。ただ、私のところだと少し時間がかかりました。

f:id:okazuki:20181019094403p:plain

単体テストは?

testing というパッケージを使うみたいです。参考にしたページ。

swet.dena.com

ファイル名の終わりは _test.go でテストをする関数は Test で始まって引数に t *testing.T を受け取って色々するみたいですね。 まだ、このページを流し読みしただけですが他の言語でよくある AssertXXX 的なメソッドは標準ではなさそう。

とりあえず、こういうのを書いてみました。

package main

import (
    "testing"
)

func TestSuccess(t *testing.T) {
    var x = 1
    var y = 2

    var expected = 3
    var actual = x + y
    if x+y != 3 {
        t.Errorf("expected: %v, but actual: %v", expected, actual)
    }
}

func TestFailed(t *testing.T) {
    var x = 1
    var y = 2000

    var expected = 3
    var actual = x + y
    if x+y != 3 {
        t.Errorf("expected: %v, but actual: %v", expected, actual)
    }
}

すると、VSCode の画面がこんな感じになりました。

f:id:okazuki:20181019095445p:plain

CodeLens にテスト起動のリンクが…。押してみると実行してくれました。

Running tool: C:\Go\bin\go.exe test -timeout 30s hello_world -coverprofile=C:\Users\kaota\AppData\Local\Temp\vscode-goPdh5s3\go-code-cover

--- FAIL: TestFailed (0.00s)
    c:\Users\kaota\go\src\hello_world\main_test.go:25: expected: 3, but actual: 2001
FAIL
coverage: 0.0% of statements
FAIL    hello_world 0.254s
Error: Tests failed.

凄い。カバレッジもひっそりと出してくれてるみたいですね。可視化したいな。

debug test を押すとちゃんとデバッグしてくれました。

f:id:okazuki:20181019095727p:plain

デバッグ環境も、こちらのサイトを参考に json 手書きかなぁと思ってましたが今は特に必要なさそうです。

qiita.com

まとめ

インストーラー叩いて拡張機能入れたら、あとは従ってるだけですね。 Ctrl + Shift + B で軽く実行したいなと思ったら手で少し json 書くくらいでしょうか。

Ctrl + Shift + P を押して go: で絞り込んでみるとインターフェースのスタブを作ったりテストを生成したりといった機能があるみたいです。これも素敵そうですね。後で触ってみよう。

ということで結構快適に Windows でお試し出来そうなので触っていってみようと思います。