※当サイトの記事には、広告・プロモーションが含まれます。

Googleから生まれし言語であるGoを試してみる

f:id:ts0818:20190507211836j:plain

「あれは、誰だ、誰だ、デビルマ~ン!(『デビルマン永井豪』)」ということで、どうもボクです。そういうわけで、今回は、Go を使っていこうという試み。

ちなみに、永井豪さんは、海外ドラマ「ウエストワールド」のような世界観を一番始めに作り出した人なのでは、と、町山智浩さんが仰ってました。

miyearnzzlabo.com

 

ポケモンGoがなんぼのもんじゃい!

... ...... .........、え~っと...

そんでは、Here we go!

 

Go とは?

Wikipedia さ~ん!

Goプログラミング言語の1つである。2009年、GoogleRobert Griesemer、ロブ・パイクケン・トンプソンによって設計された。Goは、静的型付けC言語の伝統に則ったコンパイル言語メモリ安全性英語版ガベージコレクション構造的型付け英語版CSPスタイルの並行性などの特徴を持つ。Goのコンパイラ、ツール、およびソースコードは、すべてフリーかつオープンソースである

Go (プログラミング言語) - Wikipedia

⇧  静的型付け 言語とは!コーディング時に間違いを指摘してくれるっちゅうやつですね、サーバー側の言語だとJavaC#なんか、フロント側の言語だとTypeScript とかで静的型付けに対応していますかね。

また、軽量スレッディングのための機能、Pythonのような動的型付け言語のようなプログラミングの容易性、などの特徴もある。Go処理系としてはコンパイラのみが開発されている。マスコット・キャラクターはGopher(ホリネズミ)。

Go (プログラミング言語) - Wikipedia

⇧   動的型付け 言語の良いとこも取り入れてるそうな。

 Goって、なんとなく、並列処理に強そうなってイメージがありますかね。

 

Windows環境でGo言語な環境を構築

とりあえず、WindowsでのGo言語な環境を構築していかないことには、学習ができませんから~、っちゅうことで環境を作っていきましょう。

takaya030.hatenablog.com

mukoiri-engineer.com

⇧  上記サイト様の情報を参考にさせていただきましょう。

まずは、Goのバイナリ群をインストールする必要があると。

 のどっちかで、インストールしていけば良いと。

今回は、Archiveの形式でインストールしてみます。

https://golang.org/dl/ にアクセスし、自分の環境は64bit なので、「go1.12.4.windows-amd64.zip」をクリック。

f:id:ts0818:20190501141043p:plain

ダウンロードされるので、

f:id:ts0818:20190501141257p:plain

適当なディレクトリに配置します。

f:id:ts0818:20190501141509p:plain

f:id:ts0818:20190501141612p:plain

f:id:ts0818:20190501141641p:plain

f:id:ts0818:20190501141804p:plain

配置できたらば、環境変数に追加していく必要があるようです。

  • GOROOT
    • C:\go\bin を追加する。(binまでのパスはインストール場所によって変わる。)
  • GOPATH
    • %USERPROFILE%go を作成して指定が望ましい。(C:\Users\[ユーザー名]\go)
  • Path
    • %GOROOT%\bin と %GOPATH%\bin を PATH に追加する

ということで、まずは、GOPATH用のフォルダを作成で。

f:id:ts0818:20190501143151p:plain

f:id:ts0818:20190501143221p:plain

そんでは、環境変数を設定していきます。ちなみに、インストーラーでGoをインストールした場合は、インストーラーが「GOPATH」「GOROOT」は自動で作成してくれるようです。

まずは、「ユーザー環境変数」に「GOPATH」を作成していきます。

f:id:ts0818:20190501143436p:plain

f:id:ts0818:20190501143722p:plain

続いて、「システム環境変数(S)」に「GOROOT」を作成で。

f:id:ts0818:20190501143757p:plain

f:id:ts0818:20190501143920p:plain

んで、「GOPATH」「GOROOT」を、PATHに追加しないといけないらしいんだけど、「システム環境変数」「ユーザー環境変数」どっちの?ってなりますやん?

とりあえず、「ユーザー環境変数」の「Path」に追加してみました。

f:id:ts0818:20190501150431p:plain

f:id:ts0818:20190501150355p:plain

バージョンが表示されればOKのようです。

f:id:ts0818:20190501150521p:plain

 

Goの開発に必要なパッケージ群をインストール

とりあえず、何をインストールすれば?ですが、

takaya030.hatenablog.com

⇧  上記サイト様がインストールしているものをインストールしてみました。

go get するには、git がインストールされていないと駄目らしいです。

f:id:ts0818:20190501152502p:plain

⇧  git がインストールされてるので、go get してみました。

go get -u -v github.com/Masterminds/glide
go get -u -v github.com/nsf/gocode
go get -v -v github.com/uudashr/gopkgs/cmd/gopkgs
go get -u -v github.com/rogpeppe/godef
go get -u -v sourcegraph.com/sqs/goreturns
go get -u -v github.com/golang/lint/golint
go get -u -v github.com/lukehoban/go-find-references
go get -u -v github.com/lukehoban/go-outline
go get -u -v golang.org/x/tools/cmd/gorename
go get -u -v github.com/newhook/go-symbols
go get -u -v golang.org/x/tools/cmd/guru
go get -u -v github.com/derekparker/delve/cmd/dlv    

f:id:ts0818:20190501151028p:plain

f:id:ts0818:20190501151212p:plain

f:id:ts0818:20190501151312p:plain

f:id:ts0818:20190501151458p:plain

f:id:ts0818:20190501151636p:plain

f:id:ts0818:20190501151739p:plain

f:id:ts0818:20190501151836p:plain

f:id:ts0818:20190501151932p:plain

f:id:ts0818:20190501152033p:plain

f:id:ts0818:20190501152138p:plain

f:id:ts0818:20190501152237p:plain

f:id:ts0818:20190501152404p:plain

f:id:ts0818:20190501152425p:plain

⇧  実行結果が成功したのか分からんです...
まぁ、インストールされたということで。

 

Visual Sudio CodeでGoを利用できるようにする

Visual Studio Code をインストールされていない方は、

takaya030.hatenablog.com

mukoiri-engineer.com

⇧  上記サイト様を参考に。

 

Visual Studio Code を起動したらば、f:id:ts0818:20190501153331p:plain 拡張機能で、「Go」を追加で。

f:id:ts0818:20190501153228p:plain

そしたらば、Goプロジェクト用に適当なディレクトリを作成で。 

f:id:ts0818:20190501153624p:plain

Goプロジェクト用に作成したディレクトリを、Visual Studio Codeで開きます。

f:id:ts0818:20190501153708p:plain

f:id:ts0818:20190501153822p:plain

そしたらば、f:id:ts0818:20190501154103p:plain をクリックで、「新しいファイル」を作成。

f:id:ts0818:20190501154025p:plain

「main.go」を作成。

f:id:ts0818:20190501154228p:plain

ファイルの中身を編集。

package main

import "fmt"

func main() {
	fmt.Printf("Hello world\n")
}

そしたらば、「デバッグ(D)」>「デバッグなしで開始」で。

f:id:ts0818:20190501154711p:plain

 

f:id:ts0818:20190501154850p:plain

う~ん、「Process exting with code: 0」ってのが気になるけども、

stackoverflow.com

⇧  C言語のスタック・オーバーフローで、

It's just trying to tell you that all went fine. Return value 0 is "no error".

You have a typo in "hello" though, the trailing "w" shouldn't be there.

And main()'s parameters should be either (void) or (int argc, char *argv[]).

json - The program 'c:\...\a.exe' has exited with code 0 (0x00000000) - Stack Overflow

⇧  なんか、エラーじゃないよって言ってますね。

ツールのインストールがされとらんと言われたので。

f:id:ts0818:20190501161428p:plain

f:id:ts0818:20190501161608p:plain

「Process exting with code: 0」ってのは変わらんのだと...

f:id:ts0818:20190501161733p:plain

結局、よく分からんけど、Go で Hello World が実行できたということで、ようやくGoの学習を始められそうです。 

ちなみに、Goのプログラムを動かすと、Youtubeの通信が不安定になるんだけども、YoutubeがGoを使ってるらしいのと何か関係があるのかしら?

 

2019/5/1(水)21:00  追記:↓  ここから

衝撃...Goは、自分でクラスファイルみたいなのを別パッケージに作りたい場合、必ず、「$GOPATH/src」の下に配置しなけりゃならんらしい...相対パスは、Deprecated(非推奨)らしいっすね...

blog.eksy.tokyo

qiita.com

自分の場合ですと、

f:id:ts0818:20190501210756p:plain

⇧  ってことになるらしい。

Go用のプロジェクトディレクトリは、「$GOPATH/」になるってことですかね...

Javaみたいに、Eclipseでimportの補完とかもしてくれないし...Goに慣れるのは骨が折れそうな気配ですかね... 

まぁ、普通に考えて、main.go だけで完結するプロジェクトなんて無いと思いますしね...大規模向け言語っていう割には、どういうプロジェクト構成にすべし、みたいな情報が見つからんですわ...

調査するのに、また時間が取られそうですね(涙)

2019/5/1(水)21:00  追記:↑  ここまで

 

2019/5/2(木) 追記:↓  ここから

なんか、仕様が変わってるらしい...

text.baldanders.info

バージョン 1.11 以降からは Go 言語コンパイラは以下の2つのモードのどちらかで動作する1

  • GOPATH モード (GOPATH mode) : バージョン 1.10 までの動作モード。標準ライブラリを除く全てのパッケージの管理とビルドを $GOPATH 以下のディレクトリで行う。パッケージの管理はリポジトリの最新リビジョンのみが対象となる
  • モジュール対応モード (module-aware mode) : 標準ライブラリを除く全てのパッケージをモジュールとして管理する。モジュールの管理とビルドは任意のディレクトリで可能で,モジュールはリポジトリのバージョンタグまたはリビジョン毎に管理される

モジュール対応モードへの移行を検討する — プログラミング言語 Go | text.Baldanders.info

バージョン 1.11 では2つのモードの切り替えのために環境変数 $GO111MODULE でモードを指定する。 環境変数 $GO111MODULE は以下の値をとり得る。

内容
on 常にモジュール対応モードで動作する
off 常に GOPATH モードで動作する
auto $GOPATH 以下のディレクトリにあるパッケージは GOPATH モードで,それ以外はモジュール対応モードで動作する

モジュール対応モードへの移行を検討する — プログラミング言語 Go | text.Baldanders.info

【追記 2019-03-24】 Go 1.12 でも引き続き auto が規定値になっている。 なお 1.13 からはモジュール対応モードが既定になるらしい。 そうなれば環境変数 $GO111MODULE はお役御免になるかな。

モジュール対応モードへの移行を検討する — プログラミング言語 Go | text.Baldanders.info

⇧  まじか...

www.songmu.jp

⇧  上記サイト様によりますと、いろいろ注意点があるようです。

で、肝心の「module-aware mode」になってるかどうかは、

f:id:ts0818:20190502113328p:plain

⇧  確認のしようがないと...というか、「$GO111MODULE」って環境変数がそもそも存在しないのだが...みんなどうやって確認しとるのかしら...

もしや、Goをインストールする時に、インストーラー使ってないから「GO111MODULE」って環境変数を自分で作成しないといけないってやつかしら......謎は深まるばかり...

ネットの情報で、とりあえず、生、みたいな感覚で「GO111MODULE=on」にしとけば良いよ的な情報が多いんだけど、まずは、現状の「GO111MODULE」の状態の確認が先でしょうに...その確認方法の情報がないんだけどね...

2019/5/2(木) 追記:↑  ここまで

 

令和になりましたし、Go言語を習得せねばですね。

今回はこのへんで。