HRR Co., Ltd.

技術的な記録を残していくことを目的としています。1次情報を大事にしています。

CygwinでGo言語をお試し

はじめに

Go言語をCygwinベースで実行できるようにします。
参考にしたのは公式サイトです。

golang.org

ドキュメントページにGetting startedとあるので、これに沿っていきます。

golang.org

Getting started

Installing Go

TOPページから、Windowsの場合はmsiファイルがダウンロードできるので、まずはインストールしましょう。

Goのインストール場所はデフォルトで C:\Program Files\Go\bin\go.exe こちらなので、/usr/local/bin/ あたりにシムリンクを作成しておきます。
(gofmtもついでに。gofmtの詳細はこの記事に出てきません。)

$ cd /usr/local/bin/
$ ln -s /cygdrive/c/Program\ Files/Go/bin/go go
$ ln -s /cygdrive/c/Program\ Files/Go/bin/gofmt gofmt
$ go version
go version go1.16.2 windows/amd64

Write some code

あとは手順どおり。
適当なディレクトリに移動して、作業ディレクトリを作成します。

mkdir hello
cd hello

次に、コードの依存関係のトラッキングを有効にします。
なんのこっちゃですが、これを行うことで依存モジュールの管理(自動検知やバージョンの固定、新バージョンの検知など)ができます。

今回はexample.com/helloですが、通常はgithub.com/mymoduleなど、ソースコードが保存されるリポジトリの場所になるとのこと。

$ go mod init example.com/hello
go: creating new go.mod: module example.com/hello

表示の通り、go.modというファイルが作成されます。
次に、hello.goという名前でファイルを作り、中身を下記のようにします。

package main

import "fmt"

func main() {
    fmt.Println("Hello, World!")
}

最後に、下記コマンドを打つことで実行できます。

$ go run .
Hello, World!

Call code in an external package

もう少しパッケージの話が続きます。
誰かが作ってそうなコードについては、探してそれを使うことも可能です。 ここの例では、下記を使ってみる流れになります。
pithy sayings(格言、ですかね)を返すだけのモジュールです。

pkg.go.dev

hello.goを編集して、下記のようにしてみます。

package main

import "fmt"

import "rsc.io/quote"

func main() {
    fmt.Println(quote.Go())
}

手順にはありませんが、このまま実行しようとすると怒られます。

$ go run .
hello.go:5:8: no required module provides package rsc.io/quote; to add it:
        go get rsc.io/quote

go getしろやと言われますが、今回は手順に沿ってgo modで解決します。
go help mod tidyするとわかりますが、必要なモジュールの追加と不要なモジュールの削除をやってくれます。

$ go mod tidy
go: finding module for package rsc.io/quote
go: downloading rsc.io/quote v1.5.2
go: found rsc.io/quote in rsc.io/quote v1.5.2
go: downloading rsc.io/sampler v1.3.0
go: downloading golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c

rsc.io/sampler も取り込んでますが、これはrsc.io/quote 内で使用しているからです。
ソースコードを見るとわかります。
https://pkg.go.dev/rsc.io/quote

また、go.sumファイルができあがってますが、これはチェックサムのsumですね。ファイルの中身を見てみるとわかります。

$ ls
go.mod*  go.sum*  hello.go

最後に、ファイルを実行すると…

$ go run .
Don't communicate by sharing memory, share memory by communicating.

外部パッケージの機能を使って、無事に文字列を出力することができました。

Write more code

もっとコードを書きたい方は…ということで、リンク先が紹介されています。
興味ある方はぜひ。

golang.org

終わりに

Cygwinで構築、だけでなく流れでチュートリアルの最初までやっちゃいましたが…
何となく雰囲気だけでもつかめるとよいかなと思いました。

以上でした!