TypeScriptしか使ったことがなかった私がGolangを勉強し始めた話

こんにちは。私は新卒でWeb系エンジニアとして働いている2年目の新人です。これまでの業務では TypeScript を中心に触ってきましたが、最近「Golang（Go）」の学習を始めました。

この記事では、なぜGoに興味を持ったのか、Goとはそもそも何か、Goの強み、実際にGoが使われているサービスやアプリの例、そしてTypeScriptとの違いについて、初心者なりにまとめてみたいと思います。これからGoを始めようとしている方の参考になれば嬉しいです！

## Goに興味を持ったきっかけ
私がGoに興味を持った理由は、**「名前がかわいい」** からです。
……はい、冗談ではなく本気です（笑）。

「Go（ゴー）」って、短くて覚えやすいし、ロゴのマスコットの **Gopher（ゴーファー）** もなんだか愛嬌があってかわいくて、最初はそんな軽い理由で気になり始めました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2614750/7bd64b22-27cf-43f1-b844-3c73a116a782.png)


でも調べていくうちに、「えっ、Goってこんなに性能いいの？」「Googleが作ったの？しかもDockerとかKubernetesでも使われてるの？」とどんどん惹かれていきました。

特に「高速な実行性能」や「ビルド後の配布のしやすさ（単一バイナリ）」など、実用面でもすごく魅力的なポイントが多く、「これはちょっと触ってみる価値あるぞ」と思い、学習を始めました。

また、調べてみると、Goはクラウドサービスやインフラ系の開発にもよく使われているという情報を目にし、将来的なキャリアの幅も広がりそうだと感じました。

## そもそもGoとは？
Go（通称：Golang）は、Googleによって2009年に開発されたオープンソースのプログラミング言語です。主な特徴は以下の通りです：

- 静的型付け（TypeScriptに近い！）

- コンパイル言語（高速実行が可能）

- 並行処理（goroutine）を標準でサポート

- シンプルな構文と標準ライブラリの充実

- ビルドが速く、デプロイが簡単（単一バイナリで配布可能）

公式の紹介では「シンプルで効率的なソフトウェアを構築するための言語」と表現されています。つまり、速く・安全に・分かりやすく開発できる言語なんです。

## Goの強み：私が「なるほど！」と思ったポイント
実際にGoを少し触ってみて感じた「これはいいな」と思った点を挙げてみます：

### 1.シンプルな文法
最初にGoのコードを読んだとき、「え、こんなに簡単でいいの？」と思うくらいシンプルでした。余計な記述が少なく、コードの見通しがとても良いです。


```
package main

import "fmt"

func main() {
    fmt.Println("Hello, World!")
}
```

初学者でも直感的に理解しやすい構造だと思います。

### 2.goroutineでの並行処理が簡単

Goといえばgoroutine。並行処理（concurrency）を扱うのがとても簡単ですが、そもそも「並行処理」ってなに？

たとえば、あなたが一人でラーメン屋をやっていたとして：

1. スープを温める

2. 麺をゆでる

3. チャーシューを切る

この3つの作業を1つずつ順番にやると時間がかかりますよね。でも、スープを温めながら麺もゆでて、同時にチャーシューも切れたら効率的です。

このように「複数の作業を独立して同時に進める」ことを、プログラミングでは「並行処理（concurrency）」と呼びます。

## 🤔 TypeScriptではどうやって並行処理してた？
TypeScript（Node.js）だと、非同期処理を扱うためには以下のように書きます:




```
const [result1, result2] = await Promise.all([
  fetchData1(),
  fetchData2(),
])
```

:::note warn
注：async/await は非同期処理の構文ですが、単体では並行処理にはなりません。
上記のように Promise.all を使うことで、複数の非同期処理を同時に進める、すなわち「並行処理」が可能になります。
:::

非同期処理に慣れていないと、Promise や async/await の使い方が少し難しく感じたかもしれません。
Go の goroutine ではこれをもっと簡潔に書けるのが特徴です。

## 🧠 Goでは go をつけるだけ
Goでは「関数の前に go と書くだけ」で非同期（＝goroutine）として実行されます。

```
go someFunction()
```
これだけで、その関数は裏側で同時に実行されるようになります。
このように、このように、goキーワードを付けるだけで並行処理が実現できます。複雑なスレッド管理が不要なのは、初心者にとってとてもありがたいです。

### 3.ビルドと実行が爆速
Goはコンパイル型言語ですが、ビルドがとにかく速いです。そしてコンパイル後は **単一の実行ファイル（バイナリ）** になるので、デプロイも超簡単。

フロントエンドではNode.jsやNPMで依存関係に悩まされることが多いですが、Goではそういうトラブルが少なそうだと感じました。

Goが使われている実際のサービス例
Goは「流行っている」だけでなく、実際に多くの大規模サービスで採用されています。

#### サービス・企業	内容
- Docker	コンテナ技術の代表格。Goで開発されています
- Kubernetes	コンテナオーケストレーションツール
- Terraform	インフラ構成管理ツール
- Uber	高速API開発にGoを活用
- Netflix	高負荷なマイクロサービスでGoを利用
- Mercari	日本でもGoを活用したマイクロサービス構成

つまり、Goは高パフォーマンスが求められるシステムやマイクロサービスアーキテクチャとの相性が非常に良いということですね。

## TypeScriptとの主な違い
私はこれまでTypeScriptしか使ったことがなかったので、Goと比較して気づいた主な違いを以下にまとめます。

| 項目 | TypeScript |Go |
|:-:|:-:|:-:|
| 実行環境  | ブラウザ / Node.js  |  コンパイルしてネイティブ実行 |
| 型  | 静的型（ただし柔軟)  |  静的型（厳密） |
| クラスベース  |  あり |  なし（構造体 + メソッド） |
|エラーハンドリング|	try-catch|	error型で戻り値処理
|並行処理|	Promise / async-await|	goroutine / channel
|開発体験|	JavaScriptの延長で入りやすい|	最初は慣れが必要だがシンプル


Goの「エラー処理が明示的」なところや「クラスがない」点には最初少し戸惑いましたが、慣れると「無駄がない」感じがして気に入っています。

## まとめ：Goはバックエンド初心者にもおすすめ！
まだまだ勉強中ではありますが、Goはシンプルさと効率性を兼ね備えた言語で、特にTypeScript経験者との相性が良いと感じています。

これからGoでAPIサーバーを作ったり、個人プロジェクトでも試してみたいと思います！

「フロントエンドしかやってこなかったけど、バックエンドにも挑戦したい」という方にとって、Goはとても良い入り口になると思います。

 最後まで読んでいただき、ありがとうございました！
もし「Goに入門してみたいけど、どこから始めればいいか分からない…」という方がいれば、お気軽にコメントください！