ここからはじまるよ

趣味なし・特技なしの43歳、なにかやろうと思いまして。

Goコマンドの種類(と概要)を知る

「知る」と大きくでましたが、言い直すとgo --help or go helpの結果を訳しただけ・・・です。

> go version
go version go1.19.3 windows/amd64
> go help
Go is a tool for managing Go source code.

Usage:

        go <command> [arguments]

The commands are:

        bug         start a bug report
        build       compile packages and dependencies
        clean       remove object files and cached files
        doc         show documentation for package or symbol
        env         print Go environment information
        fix         update packages to use new APIs
        fmt         gofmt (reformat) package sources
        generate    generate Go files by processing source
        get         add dependencies to current module and install them
        install     compile and install packages and dependencies
        list        list packages or modules
        mod         module maintenance
        work        workspace maintenance
        run         compile and run Go program
        test        test packages
        tool        run specified go tool
        version     print Go version
        vet         report likely mistakes in packages

Use "go help <command>" for more information about a command.

Additional help topics:

        buildconstraint build constraints
        buildmode       build modes
        c               calling between Go and C
        cache           build and test caching
        environment     environment variables
        filetype        file types
        go.mod          the go.mod file
        gopath          GOPATH environment variable
        gopath-get      legacy GOPATH go get
        goproxy         module proxy protocol
        importpath      import path syntax
        modules         modules, module versions, and more
        module-get      module-aware go get
        module-auth     module authentication using go.sum
        packages        package lists and patterns
        private         configuration for downloading non-public code
        testflag        testing flags
        testfunc        testing functions
        vcs             controlling version control with GOVCS

Use "go help <topic>" for more information about that topic.

使い方

go <command> [arguments]

goと書いたあとにコマンドを指定し、さらに必要な引数がある場合は追加する、といった感じのようですね。

Commands

コマンド名 概要
bug バグ報告を開始する
build パッケージや依存関係にあるソースコードコンパイルする(実行ファイルを作成する)
clean オブジェクトやキャッシュのファイルを削除する
doc パッケージやシンボルのドキュメントを表示する
env Goの環境情報を出力する
fix 新しいAPIを使うようにパッケージを更新する
fmt ソースコードをフォーマットする(gofmt)
generate ソースを生成する
get go.modに依存関係を追記し、インストールする
install パッケージと依存関係にあるソースコードコンパイルし、インストールする
list パッケージやモジュールをリスト出力する
mod go.modファイルのメンテナンス
work go.workファイルのメンテナンス
run ビルドし、Goプログラムを実行する
test パッケージのテストコードを実行する
tool 設定されたGoツールの実行
version Goのバージョン表示
vet ソースコード内で間違えてそうなところを検出する

中でも特にgeneratemodworktoolvetあたりは、訳したところでよくわかりませんでした。 しかしコマンドの種類を把握し、それぞれざっくり検索結果を読みながら仕入れられました。

topicsは、コマンドそのものとは違うもののヘルプとして提供されている情報郡といったところでしょうか。

> go help go.mod
A module version is defined by a tree of source files, with a go.mod
file in its root. When the go command is run, it looks in the current
directory and then successive parent directories to find the go.mod
marking the root of the main (current) module.

The go.mod file format is described in detail at
https://golang.org/ref/mod#go-mod-file.

To create a new go.mod file, use 'go mod init'. For details see
'go help mod init' or https://golang.org/ref/mod#go-mod-init.

To add missing module requirements or remove unneeded requirements,
use 'go mod tidy'. For details, see 'go help mod tidy' or
https://golang.org/ref/mod#go-mod-tidy.

To add, upgrade, downgrade, or remove a specific module requirement, use
'go get'. For details, see 'go help module-get' or
https://golang.org/ref/mod#go-get.

To make other changes or to parse go.mod as JSON for use by other tools,
use 'go mod edit'. See 'go help mod edit' or
https://golang.org/ref/mod#go-mod-edit.

なるほど、go.modとはそのプログラムで使われているモジュールの設定ファイルらしいです。

このような感じで、それぞれ書いてありますが

  • go help <command>
  • go help <topic>

とすることで詳細情報を手に入れられるようです。

VSCodeでGolangをデバッグ実行するときのlaunch.jsonとキーボードショートカットキー

考えて、書いて、実行して、確認(修正)して、また考えて・・・がプログラミングの基本サイクルだとします。

気合いれてEnterキーをタァーーン!とする実行方法もわるくありません、個人的には好きです。ただ可能であれば大技は最後にとっておきたいものです。 つまり通常の基本サイクルにおいては「書いて、実行して」はセットで扱いたいです。

そのために下記を紹介。

  • デバッグ実行するための設定ファイル(launch.json)を紹介
  • スパッとデバッグ実行するためのキーボードショートカット設定を紹介

Goプログラム用のlaunch.json

ひとまずこれで動きました!という記録。

launch.json

{
    // IntelliSense を使用して利用可能な属性を学べます。
    // 既存の属性の説明をホバーして表示します。
    // 詳細情報は次を確認してください: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Launch Program",
            "type": "go",
            "request": "launch",
            "mode": "debug",
            "program": "${workspaceRoot}",
        }
    ]
}

必須項目と任意項目があるようです、typeとprogramのみでも動きました。特にprogramは環境事情にあわせて幾通りも書き方が生まれてくると思いますが、ここではいったんプログラムファイルが置いてあるフォルダ直下で実行する場合、ということになるんだと思います。

詳しくは公式情報を。 code.visualstudio.com

キーボードショートカット

デバッグ実行は、標準では下記のように定義されているそうです。英語だらけでよくわかりませんがどうにかこうにか雰囲気は。 code.visualstudio.com

先日読むだけ読んだ「A Tour of Go」に習って、Shift + Enterを実行ショートカットキーとすることにしました。

keybindings.json

    {
        "key": "shift+enter",
        "command": "workbench.action.debug.start",
        "when": "debuggersAvailable && debugState == 'inactive'"
    },
    {
        "key": "shift+enter",
        "command": "workbench.action.debug.continue",
        "when": "debugState == 'stopped'"
    },
    {
        "key": "shift+alt+enter",
        "command": "workbench.action.debug.stop",
        "when": "inDebugMode && !focusedSessionIsAttach"
    },

これでF5キーまで指を伸ばさなくても、両手の小指をちょいと広げてShift + Enterするだけで手軽にデバッグ実行ができます。きっとストレスフリー!

今からプログラミング言語を学習するなら...Goです!

お題「今からプログラミング言語を学習するなら何を学ぶ?」

Go言語です!

go.dev

ちょうど少し前に、Go言語プログラミング環境をセットアップの記事を書いたところでした。まさにオンタイム。

以下は、個人的な意見になりますがご容赦ください。

そもそもなんでやろうと思ったか

アウトドア派と言えるほどでもなく、かといってTVで野球がっつりでもなく、はたまたYouTubeTikTokに没頭するほどでもなく、のような時間の消耗を続けてきました。 せめて週末に没頭できそうなものはないだろうかと探していたところ、そういえば昔々少しだけプログラミングかじってたな、と思い出したのがきっかけです。

本格的なプログラマーだったわけではありません。 期間も短く理解が浅かったことも手伝って、今ではその内容はほぼ覚えていません。残っているのは、PCはそれなりに使えることと、当時の名残りもあって今でもキーバインドEmacsライクに慣れているというくらいです。ものはつくれません。

プログラミングを学ぶと何か良いことがあるか

世間では、プログラミングが小学生?くらいの教育カリキュラムに組み込まれたり、オンラインスクールがものすごい数になっていたりと「プログラミングができる、もしくは理解がある」「論理的思考はたしなみ」といった流れは以前よりは確実にあると思いますので、これに応えるという意味でプログラミングを学ぶのは良いことかもしれません。

あるいは、同業転職で年収をあげたい、異業種転職で一発かましたい、という場合、それら相場事情に合ったプログラミング言語を習得してチャレンジしやすくなるのであれば、やはりこれも良いことです。

いっぽうで、私の場合はといいますと、

ソフトウェアはそれ自体が物理的な形で残るわけではありませんが、ソフトウェアのためのプログラミングは確かにモノづくりです。 モノづくりを趣味にできるのは自分にとっては良いことだなと感じています。うまくいけば仕事や生活に多少活かすこともできるかもしれませんし。

なぜGo言語を選んだか

実はたいした理由はありません。 Google検索をするとおすすめ記事がヒットします。そこから名前の響きや雰囲気で適当に絞り込み、そのあとに個別についてもう少し確認する、という流れをとりました。

この3つが候補でした。あくまでも自分比ですが、名前の響きがかっこいいものを選んでいます。

そしてここから実際にそれぞれの詳細を調べたわけですが、言語仕様や用途など高度な内容は私にはまったくわかりませんので、受けた印象をまとめます。

Golang(Go言語)

  • 覚えるべき基礎文法は少なめ
  • 比較的新しい、という意味で積み上げによる複雑さがそんなでもなさそう

Python

  • 研究分野で便利に使われている
  • AI(機械学習・深層学習)領域でよく使われている

Rust

  • いちばん響きがかっこいい
  • けど斜め読みしても本当にまったくわからん

こんな感じでした。 最終的には「学ぶための難易度を可能な限りは抑えたい、最初だし」という趣旨でGo言語になりました。Pythonは過去の歴史がそれなりにあるようでしたので避けました。Rustはもう、まったくもってもう、わかりませんでした!

名前の雰囲気と学ぶのが大変じゃなさそうなやつ、というガチプログラマーさんに怒られそうな選び方をしていますが、学習を続けることの優先度をあげてるのでこうなりました。

というわけで、一緒にGo言語やりましょう!

Go言語でプログラミングする準備

 

プログラミングなんてもう10年?近く前に、多少HTMLやスクリプトをいじっていたことがある、くらいで正直それらの記憶も曖昧なレベルです。

ですが、長いこと趣味も見つかることなく特技も追求することなく時間が過ぎていくのもなんだかなぁとやっとこの歳で思い始め、なにかしようと思いたち、検索してなんとなく目についたGo言語(Golang)をはじめてみることにしました。

なぜGo言語なのか

前述のとおり、検索してなんとなく、が直近のきっかけなのです。ただそもそもプログラミング言語って世の中に無数にありますよね。

おすすめ10選、ランキングTOP5、といった具合にたくさん比較サイトがありましたので、どうしたものかと迷いました。ちなみに対抗馬として強かったのはPythonとRustです。これもなんとなく。

結果的に覚えるまでの大変さを優先軸にしようと自分の中で位置づけ、最後はGo言語が勝ち残りました。それすらも雰囲気で決めるしかありませんでした。他の言語についても斜め読みしたところ、Rustは難解過ぎて断然無理な気配が漂っていたのは覚えています。Pythonはもしかしたら将来仲良くなれるかもしれません。ただし、すべては取らぬ狸の皮算用です。

紆余曲折ありながらも、Go言語に決まりましたので早速環境づくりです。

Windows 11 Home

特にひねりもなく、普通にWindowsのパソコンです。

プログラミングをするには、macがいいとか、Linuxがいいとか、いろいろなお話がありますが違いを感じるのはデキるレベルになってからだろうと思い、気にせずWindowsのまま進めます。この先でなにか困ったらそのときに考えましょう。

今回、プログラミングはじめるぞ、と思ってWindowsそのものにやったことと言えば、Windows Updateくらいです。

Go言語(golang

今回の主役です。プログラム言語です。

プログラミングを学ぶには、そのプログラム言語のソフトウェア開発キット(SDK)、つまり開発に必要な道具一式ですね、これをインストールしなければいけません。

go.dev

上記ダウンロードページからWindows用の.msiファイルをダウンロードし、インストールします。 インストール過程は、多くのサイトで取り上げられていると思いますし、ここでは省略します(かくいう私も参考にしながらインストールしました)。

無事にインストールが完了すると、GOPATHという環境変数Windowsに追加されていますので、ここで再起動しておいてもよいかもしれません。

ちゃんとインストールされたのかどうかはコマンドプロンプトから確認できます。

> go version
go version go1.19.3 windows/amd64

Visual Stuido Code

エディタです。つまりプログラムを書くことに特化してゴージャスになったメモ帳。

私がかじっていた時代はこのVisual Studio Codeというエディタは存在していなかった気がするのですが、調べるとこのエディタ、無料なのに大変な高機能で使いやすく世間的にもシェアを獲得しているようです。開発元はMicrosoftとのこと。

code.visualstudio.com

これもWindows用の.exeファイルをダウンロードし、インストールです。やはり過程は省略します。

Visual Studio Code、略記で"VSCode"などと書かれたりもするそうですが、特徴のひとつに用途に合わせた拡張機能をユーザーが自由に追加したり削除したりできる、という点が挙げられます。

無料なのに・・・すごい時代ですね。ありがたく使わせていただくことにします。

今回、私の用途は「Go言語を使って開発できるような環境」ですので、

が取り込めればよさそう、ということで下記をとりあえず細かいこと考えずにいれるだけ入れました。多くのおすすめ記事でおすすめされるがまま、どんどん入れました。用途や効能の詳細はほぼわかりませんがそれは追々確認していけばいいかなと。

共通もの

marketplace.visualstudio.com marketplace.visualstudio.com marketplace.visualstudio.com marketplace.visualstudio.com marketplace.visualstudio.com marketplace.visualstudio.com marketplace.visualstudio.com

Go言語特化もの

marketplace.visualstudio.com marketplace.visualstudio.com

Goプログラムの動作確認

実は開発環境の最低限セットアップはこれで完了です。

予感していたよりもだいぶあっさり味でした。調べによると、そりゃもうもっと小難しい感じの開発環境もあるようです。今は不要ですね。動けばいいの精神でいきます。

ではその最低限が終わったはず、ということで動作確認です。hello.goとしてプログラムファイルを用意し、下記のようなサンプルを書き保存します。

package main

import "fmt"

func main() {
    fmt.Println("どうでしょう!")
}

コマンドプロンプトで保存したファイルの場所で、書きを実行すると

> go run .\hello.go
どうでしょう!

ここまでの内容はとても巷に溢れてそうな、そして諸先輩方の文章より大変簡素になりましたが、自分用ということで良しとさせてください。いずれにしてもこれで動作確認はできました。これからGo言語プログラミング学習が続いたらいいな、と思います。