LoginSignup
5
5

More than 5 years have passed since last update.

Go始めるきっかけ

次の案件にむけて Goで開発する可能性がある事と
Goに対して不満を抱えているなら まずは相手を知る必要があると思ったから

Go経歴

むかし DevOpsのBOTとして少しだけさわった
https://github.com/YukiMiyatake/chaps

Slack上で動くBOTだ
AWSを操作可能
一応 機能を拡張できるようプラグインにしている

ただ コードは適当。まだ初心者なので

Go インストール

初心者がGoをちょっとずつ勉強していくよ

インストール

私は最近はWindows10 Pro 64bitとDockerを使っての開発の可能性を探ってるので
まずは この環境で構築するよ
Golandも手に入れたのでGolandも使う
ので WindowsネイティブでGolandを使って開発する環境
WSLを使ってGoを開発する環境
Dockerを使って開発する環境
の3つを両立する

Docker

https://qiita.com/YukiMiyatake/items/73c7d6c4f2c9739ebe60
にまとめてあるので。
しかも GolandだとDockerでの開発にも対応しているようで期待

WSL

多分最難関かなと思う

インストール

まず apt-getでGoをインストールしようと思ったが

$ sudo apt-get install gccgo-go

だととても古いバージョンが入る

$ sudo apt-get install golang-go

でも古く ソースから作ってもいいけど パッケージの最新をみたら

$ dpkg -l | go

golang-1.10 だったので妥協

$ sudo apt-get install golang-1.10

パス

Goはパスの考え方が少し面倒
どうやら サンドボックスという考え方?のようで
全てのもの(開発用コード)も GOROOT 以下にサンドボックスするという仕様のようだ
( GOPAHと GOROOTがあって ややこしいけど)
これは Goのバージョンごとに GOROOTを作り その中で開発すればバージョン問題を閉じれる事
と Google的には最高なんだろうけど
ソースコードは まとめている私のポリシーには面倒だが 従うしかない
GOROOT内部に Goのバイナリ、ライブラリ(.a)、ビルトインライブラリコード、外部コード、自分のコード と全部入る
GOROOT(正確には GOPATH)の外のコードは ビルド不可能という仕様だから 自分のコードも中に入れなければいけない。
一応 GOPATHを複数指定し、外のディレクトリもビルド可能のようだが
初心者なので サンドボックスに入れることにする
デフォルトだと ~/go になる

ただし、Windowsともコードは共有したいので ちょっとかえる

GOROOTは 基本的にしていしなくてよくなったので指定しない
WSLのホームディレクトリは Windowsからアクセスしにくい場所なのでかえる
GOPATHで /mnt/c/devel/go-1.10 を指定し、ここで開発することにした
具体的には開発コードは /mnt/c/devel/go-1.10/src/github.com/YukiMiyatake/プロジェクト名
というフォルダになり、gitもここを作業ディレクトリにする
.bashrcには下記のようにかいた

export GOPATH=/mnt/c/devel/go-1.10$
export PATH=/usr/lib/go-1.10/bin:$PATH$

/usr/lib/go-1.10 は、apt-getでインストールされたディレクトリだ
ちなみに 自動的に GOPATHはこのディレクトリが指定されている

これで /mnt/c/devel/go-1.10/src 以下でgoファイルをビルドすると動いた

ちなみに ビルドをするとライブラリを探しに行くが
GOROOT、 GOPATH を探してくれるようで、存在しない場合は GOPATHにダウンロードしてくれる

Windows

インストール

WSLでひよって 10.4と1つ古いバージョンをインストールしたので それに合わせる
https://golang.org/dl/
より 10.4の amd64を選びインストールする
デフォルトでは C:Go にインストールされるので
C:\Lib\go-1.10\ に変更した

パス設定

パスの設定は上記WSLにあわせる

コントロールパネル 環境変数の設定にて
GOPATHにWSLと同じソースディレクトリ C:\devel\go-1.10
PATHにインストールしたパス c:\lib\go-1.10\bin

GOPATHは同じディレクトリにしても ライブラリのビルドはシステムごとにわかれているので
おそらくOKだろう

ただしWindowsでは現在 Pluginが対応していない。Shell Executeも動かなかったので
基本的には あまりWindows版は使わないかもしれない

Goland

JetBrains社の Go言語エディタ
インストールすると 32bitと64bitが入る。
が 試したかんじでは どちらをインストールしても 上記の環境変数に指定したGoを見るような気がする
(32bitGolandを起動すれば32bitのGoビルドになるわけではなさそう)
JetBrains社のエディタはJavaで作られていて 単にそのエディタの JREのビットの可能性が高い
いちおう32ビットエディタを動かす手順だが、JREは64bitしかついてないので 32bitのJREは自分でインストールしなければならない

ビルド、デバッグ、リファクタリングなど出来、便利だと思うのでこれから使っていこうと思う
(これまではVSCodeを使い それでも十分満足ではあるが)

他の言語世界からきて戸惑ったポイント

構文

セミコロンが不要言語
ifなどの制御公文に()が不要
whileがない かわりにfor
C言語の構文にたいして ことごとく逆である
class構文がない
慣れる以外ない

int n;

int calc( flot f )

int(*fn)(float);

void clazz::var(int);

var n int

func calc(float f) int

var fn func(float) int

func(c clazz) var(int);

パッケージ

全てのファイルにはパッケージ名が必要(と思われる
mainパッケージだけは特別な名前で、エントリポイントはここのmain() になる
そのため 1つのプロジェクトに mainは1個しか置けない

import

パッケージをimportできる
import時に _を指定すると省略、.を指定するとネームスペースがグローバルに、別名をかくと別名でアクセスできる
など、いろいろなオプションがある

ディレクトリ

同じディレクトリには同じ名前のパッケージのソースファイルしか置けない
同じパッケージ名なら同じディレクトリに置くことが出来る
ただし 語尾に _test.go がつくファイルはテストコードなのでパッケージが異なってもOK

条件付きコンパイル

よくあるコンパイル定数

#define HOGE

#ifdef HOGE
#endif

は使えない。代わりにファイルの先頭に

// +build hoge

とオプションをつける。
ifdefとちがい、ファイル単位でしか指定できなく不便
値の定義は ビルド時に -tags=hoge とする。ビルド時しかフラグをセットできない
比較は フラグがセットされているかされてないかの2値

クラスがない

クラスはないが レシーバーという構文で 似たようなことはできる
いわゆる C言語等でやる thisポインタを明示的に渡すあれと同じ考え方
ただし thisポインタにあたるものは 引数ではなく レシーバという特別な引数で指定できる

5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5