🦔

【go超初心者】make()について

2024/03/01に公開

この記事のゴール

本記事では超初心者がgoのmakeについてザル理解します。
※ザル理解とは乱暴にざっくり理解することを指す。

大目的は『ginのサンプルコードを日本語で言語化する。』ですが、
見返すときに読みやすい記事にしたいので、記事を小分けにして書いています。

毎度の事ながら、参考記事を読んでください。。。

背景

筆者はgoの超初心者です。
以前goのプロジェクトを作成しました。
https://zenn.dev/articles/5d66741a60b24e/edit
goの基本的な言語仕様とginおよびgoの実行環境について少しでも知りたいという動機です。

ginのサンプルコードmain.go冒頭

ginのサンプルコードであるmain.goの冒頭

package main

import (
	"net/http"

	"github.com/gin-gonic/gin"
)

var db = make(map[string]string)

make()ってなんだ?

参考記事:
公式リファレンス
Go言語のmakeについて

動的なデータ構造を作成するために使用される。
これらのデータ構造は動的なサイズのメモリ割り当てが必要な場合に使用される。
指定されたデータ構造の初期化を行う。
『動的なデータ構造』というのは以下のやつのこと。

  • スライス
  • マップ
  • チャネル

主な使い方

スライスの作成

容量、サイズを指定

// 5つの要素を持つint型のスライスを作成
slice := make([]int, 5) 

マップの作成

容量、サイズを指定

// string型のキーとint型の値を持つマップを作成
m := make(map[string]int) 

チャネルの作成

バッファサイズを指定

// int型の値を送受信するためのチャネルを作成
ch := make(chan int) 

参照渡し扱いなので注意

make()がの戻り値は指定されたデータ構造のポインタ。
つまり、make()を使用して作ったデータ構造に対して、何か変更を加えると、
元のデータ構造に対して影響が出る。(オブジェクト指向でよくあるやつ)

配列の作成には使用しない

配列は配列で別の書き方があるのでそっちを使う。
【go備忘録】配列の定義方法

ginのサンプルコードを見る

var db = make(map[string]string)

キーと値がどちらもstringのmapを定義してるのね!
(まんまやんけ。)

コード的な意味としては、ここでデータベースを変数として持たせているのかな?って感じか。
(まんまやんけ。)

Discussion