■目次
- はじめに
- Goのユースケース・特徴
- Goをインストール
- 基本文法
- packageとimport
- 変数の宣言
- 関数
- for文・if文・switch文
- ポインタ
- struct (構造体)
- Goroutine
- まとめ
はじめに
mfield Company ICT本部で業務アプリケーションエンジニアをしているイシピです。
好きな色はオレンジです。
業務では主にPythonを利用することが多く、他の言語についても理解を深めるため、昨年からGo言語の学習を始めてみました。
本記事は、Goに興味を持たれている方向けの入門記事となります。
公式で紹介されているユースケースや、基本文法の特徴的な部分などをご紹介していければと思います。
はじめにGoの概要を説明いたします。
Goは2007年にGoogleで作成された、オープンソースのプログラミング言語です。大規模な製品とサービス構築に多く利用されています。
公式サイト:https://go.dev/
ちなみに、メインビジュアルに利用されているのは、Go公式キャラクター「gopher」。
キャラクターにもご興味がある方には「gopher」の歴史を知ることができるこちらの記事がお勧め。
2. Goのユースケース・特徴
・クラウド&ネットワークサービス
・コマンドラインインターフェース
・WEB開発
・DevOpsとサイトの信頼性
上記4点が多く見られるGoのユースケースです。
開発元のGoogleはもちろんですが、NETFLIX、Twitterなどの有名サービスもGoを利用しています。
参考 : What’s possible with Go
NETFLIXのnetflixtechblogでは、Goを利用した理由として以下のコメントが記載されています。
「Javaよりもレイテンシが低く(ガベージコレクションの一時停止が問題になる)、C言語よりも開発者にとって生産性が高く、数万のクライアント接続も処理できるものが必要だった。」
netflixtechblog
このコメントからもわかるように、Goの特徴として以下の3点が挙げられます。
・早く簡潔であること
Goはコンパイル時に中間言語に変換されることなく、そのまま機械言語に変換されるため、高速コンパイルが可能。また、並行ガベージコレクタにより、プログラムと並行にガベージ処理されるため、実行時の早さも特徴です。
・開発者にとって使いやすいこと
もともとGoogle社内で使われていたこともあり、開発者のニーズを考えられた設計になっています。
・並行処理に優れていること
GoにはGoroutineと呼ばれる並行処理の仕組みがあり、関数の呼び出しの前に “go” を付けると関数を並行して実行可能です。
3. Goをインストール
Goは公式サイトのダウンロードページ、またはトップページからインストール可能です。
ダウンロードページはこちら
以下インストール対応OS
・Windows
・MacOS
・Linux
公式ドキュメントからLinux、Mac、Windows版のインストール手順がそれぞれ出ているため、こちらを参考にするのが間違いないかと思います。
ダウンロードせずにブラウザ上で動かしてみたい方には、Go Playgroundをお勧めします。CPUおよびメモリの使用量などの制限はあるものの、その名の通りGoに触れるための遊び場として、特に問題なく使用可能。
4. 基本文法
ここからはGoの基本文法を紹介します。
4-1. packageとimport
Goのプログラムはパッケージによって構成され、main()から実行されます。
以下は「Hello World!」を出力する単純なプログラムの例です。
・mainパッケージの宣言から開始
・importでfmtパッケージをインポート
・main()に「Hello World!」を出力させる記述
package main
import (
"fmt"
)
func main() {
fmt.Println("Hello World!")
}
出力結果は
Hello World!
となります。
4-2. 変数の宣言
・明示的な宣言
変数を指定するための基本形は以下です。
var [変数名] [変数の型]
例えば、数値型の変数:xを指定する場合
var x int
となります。
・暗黙的な宣言
明示的には上記のように宣言しますが、Goでは暗黙的に型宣言することも可能です。
その場合は、
[変数名] := [値]
として宣言します。
数値型の変数:xの値が10である場合、宣言の仕方は以下のようになります。
x := 10
※暗黙的な型宣言は関数の中でのみ可能
4-3. 関数
4-1ではmain()が出てきましたが、今度は別の関数sample()を定義します。
例えば、int型のxを返すsample()を定義する場合以下のように記述します。
func sample(x int) int {
return x
}
変数名の後ろには、型を記載する必要があります。
この例の場合は「変数:x」の後ろに「型:int」を記載しています。
4-4. for文・if文・switch文
プログラミングの代表的な文法について、Go言語ではどのように記述するのかをご紹介致します。
・for文
Goのfor文はC言語やJavaと異なり、forの条件式となる()の部分がありません。
Javaの場合
for (初期化式; 条件式; 後処理条件式){
//条件式に従い実行される処理
}
Goの場合
for 初期化式; 条件式; 後処理条件式{
//条件式に従い実行される処理
}
Goの場合は、「;」で区切られたフィールドが条件式となります。
この「;」は条件式だけを記述する場合省略も可能。
・if文
if文の場合も、条件式に()は利用せず、「;」によって記述されます。
こちらも条件式のみを記述する場合は「;」は不要です。
if 初期化式; 条件式; 後処理条件式 {
//条件式に従い実行される処理
}
・switch文
switch文について他言語との大きな差は、breakの記述がいらない部分。
また、swichに設定される各caseは定数である必要がなく、caseの関連する値が整数でなくとも取り扱いが可能です。例えば、式や文字列であっても指定可能。
switch 変数 {
case 設定される値1:
処理1
case 設定される値2:
処理2
}
デフォルトでは、上記の例の場合「case 設定される値1」に条件が一致し実行されると、その後の処理2は実行せずに終了します。しかし、fallthrough機能を利用すると続けてその後のcaseの処理が可能です。
switch 変数 {
case 設定される値1:
処理1
fallthrough
case 設定される値2:
処理2
fallthrough
default:
処理3 ※最終的な処理
}
全てのcaseに条件一致した場合、処理1、2、3が実行され、どのcaseにも条件一致しなかった場合は、defaultに設定した処理3のみが実行されます。
4-5. ポインタ
Goは値のメモリアドレスであるポインタを扱います。
この変数のポインタを扱いたい場合
var x int = 10
例えばmain()の中に、以下を記述します。
var x int = 10
fmt.Println(x)
fmt.Println(&x)
この時の出力結果は
10
0xc000018030
また、以下も同じ出力結果となります。
var p *int = &x
p = &x
fmt.Println(p)
fmt.Println(*p)
「*」をつけることによって、ポインタ型として扱うことができ、「p」は代入されたポインタを、「*p」はポインタpを通してxの数値を呼び出しています。
4-6. struct (構造体)
Goには他言語に見られるclassの概念がなく、同等の概念としてstruct(構造体)を扱います。
struct定義の基本形
type (構造体の名称) struct {
(変数名) (型)
}
structに格納されたフィールドは「.」を利用して呼び出すことができます。
例えば「v.X」で構造体Vertexのフィールドであるint型のXを呼び出している、こちらのコードの場合、
type Vertex struct {
X int
}
func main() {
v := Vertex{1}
v.X = 10
fmt.Println(v.X)
}
出力結果は10になります。
4-7. Goroutine
Goの特徴として、Goroutineと呼ばれる並行処理の仕組みについて触れました。実際にGoroutineを利用し並行処理で関数を実行するためには、関数をgoステートメントに指定します。
※関数が終了するとそのGoroutineも終了し、 戻り値がある場合、関数の実行完了時に破棄されます。
以下は、5秒ごとに引数の文字列を出力する処理を3回まで繰り返すsample()をGoroutineで並行処理した例です。
func sample(s string) {
for i := 0; i < 3; i++ {
fmt.Println(s)
time.Sleep(5 * time.Second)
}
}
func main() {
go sample("TEST1")
sample("TEST2")
fmt.Println("END")
上記のパターンの場合出力結果は、
TEST2
TEST1
TEST2
TEST1
TEST1
TEST2
END
となります。
まとめ
今回はGo言語の入門として、特徴や基本文法などを記載させていただきました。
まとめとして
・簡潔で扱いやすく低レイテンシー、大規模開発に利用されている言語である
・まず手軽に試してみたい方には、ブラウザで実行できるGoPlaygroundがオススメ
・他言語とは違う概念が存在する
この記事がGo学習スタートのはじめの一歩として、お役に立てれば幸いです。
あなたもAMBLで働いてみませんか?
AMBLは事業拡大に伴い、一緒に働く仲間を通年で募集しています。
データサイエンティスト、Webアプリケーションエンジニア、AWSエンジニア、ITコンサルタント、サービス運用エンジニアなどさまざまな職種とポジションで、自分の色を出してくださる方をお待ちしています。ご興味のある方は、採用サイトもご覧ください。
●AMBL採用ページ
-メンバーインタビュー (1日の仕事の流れ/やりがい/仕事内容)
-プロジェクトストーリー (プロジェクトでの実績/苦労エピソード)
●募集ページ
プリセールス/ エンジニア/クリエイター/ データサイエンティスト /営業・コンサルタント /コーポレート /サービス企画 /教育担当