Go言語ちょっとだけ入門

環境準備

VSCode上で適当なワークスペースを用意した。
今回は「/Users/{わたし}/Documents/Projects/golang_introduction
としてディレクトリを用意した。

golangのインストール

macOSを使用しているので、homebrewを使ってインストールする

 

brewで入る最新は1.11.2だった。1.11自体が2018/08リリースと割と新しいものだったのでこのままインストール

 

VSCodeについては
.goファイルを作成してしまえばVSCodeからエクステンションのインストール案内が出るので
そのままインストール。

入門

GOPATHの設定

golangはワークスペースプロジェクト単位で開発する。
基本的にコマンドやビルドを行う際にGOPATHを頼りに行うイメージかな?
ディレクトリ(=プロジェクト)毎にGOPATHを設定したい等のニーズに答えるためにgoenvといったツールも用意されている。

Hello world

実行

疑問:importしている「fmt」って何?

フォーマットから取ったパッケージ。
基本的にはC言語でいう「print」や 「scan」にあたる関数を提供する。

コメント

 

import

こっちも可

ただし、こちらは推奨されないらしい。

 

exported name

golangでは名前の先頭が大文字のものは、外部から利用できる。

この場合だとPrintlnがそれにあたる。

変数の定義

var で宣言して初期化する事が出来る。
型を明示的に指定する場合、intなどの型名は変数名の後に指定する。

文字列の場合はダブルクォーテーションで括る

 

また、上記より短い宣言もできる

varという初期化子をつけて変数に値を代入した場合、型を省略できる。
省略された変数の型は、代入された値によって自動的に割り当てられる。
(型推論)

他に、:=を使って宣言する方法がある。

:= を使って宣言するのは型などをいい感じに認識してもらう「暗黙的宣言」という。
「暗黙的宣言」の場合は関数スコープ内でのみ利用が可能である。
つまり、関数の外では:=を使った暗黙的宣言はできない。

定数

最近のJavaScriptのように「const」をつけることで定数が宣言できる

定数(const)は、文字、文字列、boolean、数値でのみ使える。
定数の場合は := を使った宣言は利用できない。

ゼロ値

変数宣言時、何も値を指定しない場合、ゼロ値(zero value)が与えられる。
ゼロ値といっても数字の0(ゼロ)を入れるだけでなく、変数型によって異なる

  • 数値型の場合(int/float) ... 0
  • bool型の場合... false
  • string型の場合... "" (空文字列)

この辺りはnull判定のときなどに活用できそうだ。

関数,function

よくある感じでOK。引数を指定する場合は上述の通り型が後。

マルチプルリザルト

golangの特徴で、関数が複数の戻り値を返す事ができる。

if文

条件式は丸括弧()で括らない。

for文

よくあるfor文はこんな感じ。他の言語のように丸かっこ()で括る必要はない点に注意

他の言語でいうwhileっぽいやり方も出来る

無限ループ

 

Array, 配列

配列は固定長。長さを変える事ができない。

個人的には変数そのものを出力するとカンマ区切りでなく
スペース区切りになる点が気になる

 

スライス

こっちは可変長の配列だと思っていいらしい

他の言語もそうなのかもしれないけど、スライスは以下のような形で切り取って扱う事が出来る

0 John 1 Paul 2 George 3 Ringo

①では、最初に0〜2を指定している。つまり、以下の範囲を指定したことになる。
つまり、John とPaulが出力対象

0 John 1 Paul 2

次に、1〜3を指定している。つまり、以下の範囲で、PaulとGeorgeが取扱の対象。

1 Paul 2 George 3

スライスは配列への参照のようなもの (らしい)

スライスは配列への参照のようなものです。
スライスはどんなデータも格納しておらず、単に元の配列の部分列を指し示しています。
スライスの要素を変更すると、その元となる配列の対応する要素が変更されます。
同じ元となる配列を共有している他のスライスは、それらの変更が反映されます。

②で取り扱っているのがまさにその部分。 一度スライスを他の変数に代入し、他の編集の値を書き換えたとしても、大元のスライスにもその変更が反映される。

 

疲れたので一旦ここまで

 

 

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください