Go言語を練習しようぜ☆(^~^)?

おびょごぼ☆(^~^) へべし☆(^~^) 公開下書き

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↓ Go言語を練習しようぜ☆?」

20210111go1.jpg

KIFUWARABE_80x100x8_01_Futu.gif
「 なんで紙の本なんか買ってくるのか☆?」

https://golang.org/doc/

KIFUWARABE_80x100x8_01_Futu.gif
「 ↑ ネット使えよ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 クレジットカードを使わせるのは危ないのよ。現金を使わせましょう」

1.1 開発環境の構築

https://github.com/muzudho/hello-golang

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ とりあえず練習用の レポジトリを作っておこうぜ☆」

20210111go2a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑↓ 2021年の Go言語のモジュール・システムって何か 2016年に比べて変わってなかったかだぜ☆?」

Go言語 GOPATH気にしなくてもよくなった

KIFUWARABE_80x100x8_01_Futu.gif
「 そらみろ☆ ネットで調べろだぜ☆」

REPL って何よ?

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 REPL (Read-eval-print loop)の gore で最初の練習をするみたいなんだが、何だぜそれ☆?」

KIFUWARABE_80x100x8_01_Futu.gif
「 ネットで調べろだぜ☆」

Quick prototyping with a Golang REPL

20210111go3a1.png

go get github.com/motemen/gore

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ さて、どうなったのか……☆?」

20210111go4a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ ビルド・パス通ってないのか?」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 パッケージは どこにダウンロードされたの?
パッケージのバージョンは どうやって管理しているの?」

20210111go5a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ Go言語のパッケージ管理の文化が分からんな……☆ ネットで調べるかだぜ☆」

20210111go6a1.png

go version
go version go1.14.4 windows/amd64

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ Go言語のバージョンが古いな……☆ アップグレードするコマンドは無いのかだぜ☆?」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 アンインストールしてから、再インストールするみたいよ」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 つら……☆」

20210111go7a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ まあ、オペレーティング・システムの構成を変更するのだから、オペレーティング・システムの方法を経由するのも 一理あるが、
Windows のアプリ管理システムは インストールとアンインストールの2つしかできない不便なやつなんだが……☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 PC全体の アプリケーションに影響を及ぼす 前時代的なバージョン管理方法だよな☆
だから Microsoft は Windows にアプリケーション別バージョン管理システムを導入するより、 Docker を入れる方に舵を切るだろ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 思想が ぐちゃぐちゃなのよ!」

20210111go9a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 日本民族は 鍋奉行が場を一本にまとめてしまうので、多くの話しを同時並行的に動かすのに向かない民族だからな☆
独自オペレーティング・システムを作れる文化を持っていない☆
Linux, Windows, Apple に勝てない☆ NECは Microsoft Disk Operation System を普及させて Windows に差し変わってそれきりだし、 トロンとか民間人の触れるところに無い、論外☆
今の人には信じられないかもしれないが、 PCのコマンドを叩くのを覚える苦行を乗り越える動機はほどんとエロゲーが見たいから☆ ニコニコ動画の視聴動機はホモビデオ☆
真面目にコンピューターを始めようと思ってコンピューターを始めるごく一部の優秀な人が率先して文化を作ろうとするのは間違い☆ 負け方の勉強にはなる☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 おっ、Go言語が最新になったぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 珍論をしゃべりながらインストールするのを止めなさいよ! 」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 パッケージ管理システムか、モジュール・システムも セットアップしなさいよ」

https://godoc.org/golang.org/x/vgo

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ この紙の本に書いてない……☆ ネットで調べるか……☆」

20210111go10a1.png

go get -u golang.org/x/vgo

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 相変わらず どのような変化が起こったのか分からん……☆」

# Mac
export GOPATH=$HOME/go
export PATH=$PATH:$GOPATH/bin

golang パッケージ管理 vgo使ってみたメモ

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 ↑ やっぱ Path 通さないと使えないみたいよ?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 それ Mac の書き方だろ☆
[Windows] + [Pause] キーを同時押しして、[システムの詳細設定] リンク - [詳細設定] タブ - [環境変数] ボタン をクリック☆」

20210111go12a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 GOROOT 環境変数は go言語をインストールしたときに C:\go を覚えているから 設定しなくてもいいという認識で合っているかだぜ☆?
そして今回設定するのは ユーザー環境変数 GOPATH で、 C:\Users\{name}\go あたりのディレクトリでいいという認識で合っているかだぜ☆?」

KIFUWARABE_80x100x8_01_Futu.gif
「 そんなことは 紙の本の説明では 分からん☆ Mac のやり方で書かれているからな☆」

20210112go14a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 Path システム環境変数に C:\Users\{name}\go\bin あたりのディレクトリを追加しておくぜ☆?」

KIFUWARABE_80x100x8_01_Futu.gif
「 勝手にしろだぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 PC の再起動が必要じゃない?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 うーむ☆」

2021-01-12 tue

20210112go15a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ C:\Go\bin が Path に入ってないと go コマンドが認識できなくないか☆?」

KIFUWARABE_80x100x8_01_Futu.gif
「 勝手に追加しろだぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 まとめると……☆」

システム環境変数:

Name Value 別の書き方
Path C:\go\bin
Path C:\Users\むずでょ\go\bin %GOPATH%\go

ユーザー環境変数:

Name Value 別の書き方
GOPATH C:\Users\むずでょ\go %USERPROFILE%\go

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 環境変数を3つ設定すればいいだけでは……☆?」

go version
go version go1.15.6 windows/amd64

go env GOROOT
c:\go

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ インストールはできてそうだぜ☆」

go get github.com/motemen/gore

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ これで gore が %GOPATH%/bin ディレクトリーにできてるはずだが……☆」

20210112go16.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 見当たらねーっ☆」

gore を go get しても $GOPATH/bin にバイナリファイルができなかった

gore

go get github.com/motemen/gore/cmd/gore
gore
gore version 0.5.2  :help for help
gore> exit
undefined: exit

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ くそっ☆」

gore> bye
undefined: bye
gore> quit
undefined: quit
gore>

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 [Ctrl] + [D] を打鍵しなさい」

# for code completion
go get github.com/mdempsky/gocode

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ これで gore のインストールは終わったはずだぜ☆」

gore -autoimport
gore version 0.5.2  :help for help
gore> fmt.Println("Hello World")

ディレクトリの構成にルールがある

# 配置ルール
%GOPATH%/src/{Repository FQDN}/{Repository Path}

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 クソだな……☆ 例えば……☆」

https://github.com/muzudho/hello-golang

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ わたしは上記のような レポジトリを開設したので、自動的に ローカル・レポジトリのディレクトリ・パスは以下のように確定する☆」

C:\Users\むずでょ\go\src\github.com\muzudho\hello-golang

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 納品先ごとにディレクトリをまとめているローカルルールで運用していて、
C# と go で、レポジトリを置くデフォルトの位置が異なったら、
1つのプロジェクトで C# と go の両方を使う場合、どう配備したらいいの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 バラバラに配備しろだぜ☆
特に go は 強権的で、ディレクトリの位置は固定だぜ☆ なんのためのソフトウェア、なんのための論理的なディレクトリだろうか☆
ディレクトリ配置を自由にする精神を売っ払った者だけが go を使うことができるようだぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 ディレクトリ配置を自由にする精神を売っ払えだぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 はい、売っ払いました☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 サラリーマンのスキルを覚えてきたわね」

コンピューター囲碁のプログラムを書き始めろだぜ☆

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 48 (しば)のおっちゃんが言うように すでに Go言語を使っている人が読む本だよな この本☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 練習はもういいので 囲碁プログラムを作り始めろだぜ☆」

https://github.com/bleu48/GoGo

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 最初は 真似から入るか……☆」

20210112go17.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ ソースはパクったとして、実行コマンドは何だぜ☆?」

https://golang.org/doc/tutorial/getting-started

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 ↑ 公式のチュートリアルに書いてあるような内容は、買ってきたその本に書いてないのよ」

go run gogo01.go

20210112go18.png

KIFUWARABE_80x100x8_01_Futu.gif
「 ↑ ずれてるぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 クソっ☆」

VSCodeでターミナルのレンダリングがおかしい

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 ↑ 設定があるみたいよ?」

20210112go19a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ [Preferences] - [Settings] - [User] - [Features] - [Terminal] - [Integrated: Renderer Type] は auto だぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 全パターン試してみろだぜ☆」

https://blogs.osdn.jp/2017/01/16/vscode.html

20210112go20.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ フォントや カラーテーマを変えても無駄☆」

20210112go21.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ Visual Studio Code が は半角だ、と言えば、利用者は 半角であることを無条件に飲み込まなければならないのか☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 直してくれだぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 仕組みが分からん☆ フォント・ファイルを作ってるやつが友だちにいないので 分からない☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 ググってみましょう!」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 これが Windows 特有の不具合かどうか分からん☆
Windows 上で Linux ターミナル簡単に動かせないものか☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 次のステップに進みましょう!」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 main 関数が2つあるとエラーになるぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 片方の関数名を変えろだぜ☆」

import (
    "fmt"
    "gogo01.go"
)

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ と書いたら☆」

import (
    "fmt"
)

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 自動整形で消されるんだが☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 自動整形をオフにしたらいいのでは☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 go は不便だなあ……☆」

Modules を使ってみようぜ☆(^~^)?

Go言語の依存モジュール管理ツール Modules の使い方

go mod init github.com/muzudho/hello-golang

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ もう だれてきた☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 早い☆」

20210112go22a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ なんかファイルができたぜ☆」

20210112go23a1.png

go build

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ hello-golang.exe 実行ファイルができたぜ☆」

20210112go24a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 実行ファイルができたんなら、ファイル名を叩けば 実行できるな☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 エグザンプル1、 エグザンプル2、 エグザンプル3 ……、と実行ファイルを複数作りたいときは どうやるんだぜ☆?」

KIFUWARABE_80x100x8_01_Futu.gif
「 プロジェクトを分ければいいのでは☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 めんどくさ……☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 残りのステップに進みましょう!」

20210112go25.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ステップ5までやって 疲れた……☆ 今日は終わり☆」

2021-01-13 wed

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 変わり映えしあい毎日の作業、つら……☆」

20210113go26.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ なんだか分からんがビルドはできたぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 なんだか分かれだぜ☆」

https://github.com/muzudho/kifuwarabe-uec12

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 続きは きふわらべ名義で開発だぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 ライブラリ勢になんの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 たくさん改造する……☆」

20210113go27a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 強権的な Go言語で 別ファイルの 変数のインポートは どうやるんだぜ☆?」

KIFUWARABE_80x100x8_01_Futu.gif
「 自分で調べろだぜ☆」

20210113go28a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ package は要するにディレクトリ名だぜ☆
entities.Author まで打鍵してファイルを保存すると、 import 文に github.com/muzudho/hello-golang/entities が自動補完されたぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 じゃあ トップ・ディレクトリにある変数はどうやって自動補完されるんだぜ☆?」

20210113go29a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ main.BoardMax ではないようだぜ☆」

20210113go30a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 見えろよ☆」

20210113go31a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ programimportable package の違いは何だぜ☆?」

Access main package from other package

KIFUWARABE_80x100x8_01_Futu.gif
「 ↑ できないんじゃないか☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 何でなんだぜ☆?」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 相互依存しない 順序付いたグラフになるように してんじゃないの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 だったら エラー文は そう説明しろだぜ☆」

20210113go32a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 変数に、変数より長いパッケージ名を付けて回るの、嫌なんだが☆」

Golang for Node.js Developers

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 2020年頃から 中国語のサイトの方が 欲しい内容が書いてあるサイトに当たるようになったよな☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 人口比からすれば インターネット上の情報の5分の1は 中国人とインド人が発信してるはずだぜ☆」

20210113go33a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ エイリアス(別名)は付けれるが、destructuring してプレフィックス自体を外す方法は見つからなかったぜ☆
1文字にしたろ……☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 可読性が低くなるのに……☆」

20210113go34a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ あっ、 c が名前被りした☆!」

KIFUWARABE_80x100x8_01_Futu.gif
「 1文字なんかにするから……☆」

2021-01-16 sat

20210116go35.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 18時間ぐらい探して メソッド名間違い1個見っけ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 仕方ないな☆」

20210116go38.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ 19路盤をここに貼り付けて置けば コンピューター囲碁プログラミングやりたくなるやつも いるだろう……☆」

2021-01-17 sun

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 通信プログラム 分かんねー☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 Go言語はインフラの やや人間向け側のプログラミングに向いているのに……☆」

ポート番号を設定する

通信タイムアウト時間を設定する

一度に読み込むバイト数を設定する

他にも必要ならパリティビットなど細々設定する

エラーが起こった時どうするのか、どこかに表示するのか決めておく。

通信ポートを開ける

受信のメインループに入る。
例えば CgfGoBan では ダイアログボックスを開けっぱなしにしているとき、メインループしている。

Examples:
1: 指し手を受信した
2: OKを受信した
3: NEWGAMEを受信した
4: ANSWERを受信した

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 CgfGoBan の cgf_term.cpp は
囲碁の通信プロトコル SGMP(Standard Go Modem Protocol - Revision 1.0) をやってんだな☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 じゃあ SGMP を調べましょう!」

http://www.computer-go.jp/

KIFUWARABE_80x100x8_01_Futu.gif
「 ↑ GTP から NNGS へ変換してくれるのでは☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 GTP むずかしい☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ただ GTP2NNGS-20150629 の ソースの分量 そんなに無いし 読んでみるか……☆
名のあるライセンス 書いてないな☆ Readme で文章で書いてるだけで☆」

https://www.gnu.org/software/gnugo/gnugo_19.html

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ GTP は これが詳しいかだぜ☆」

何度でもクリック!→

むずでょ@きふわらべ第29回世界コンピューター将棋選手権一次予選36位

光速のアカウント凍結されちゃったんで……。ゲームプログラムを独習中なんだぜ☆電王戦IIに出た棋士もコンピューターもみんな好きだぜ☆▲(パソコン将棋)WCSC29一次予選36位、SDT5予選42位▲(パソコン囲碁)AI竜星戦予選16位

Crieitは個人で開発中です。 興味がある方は是非記事の投稿をお願いします! どんな軽い内容でも嬉しいです。
なぜCrieitを作ろうと思ったか

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください!

ボードとは?

むずでょ@きふわらべ第29回世界コンピューター将棋選手権一次予選36位 の最近の記事