Golang における配列操作(定義、追加、削除)

スライス(slice)とマップ(map)の簡単な説明

  • スライス(slice)が他の言語でいうところの「配列」みたいなもの
  • マップ(map)が他の言語でいうところの「連想配列」みたいなもの

スライスの定義

  • var 変数名 []型
  • 変数名 := []型{}
package main

import "fmt"

type User struct {
	ID int
	Name string
}

func main() {
	// 定義その1&要素追加
	var sample []User
	sample = append(sample, User{
		ID: 1,
		Name: "test",
	})

	// 定義その2
	sample2 := []User{}

	fmt.Print(sample)
	fmt.Print(sample2)
}

マップの定義

  • var 変数名 map[型]型
  • 変数名 := map[型]型{}
package main

import "fmt"

func main() {
	// 定義その1&要素追加
	var sample map[string]interface{}
	sample = map[string]interface{}{}
	sample["ID"] = 1
	sample["Name"] = "test"

	// 定義その2
	sample2 := map[string]interface{}{}

	fmt.Print(sample)
	fmt.Print(sample2)
}

スライスの追加・削除

Go言語では配列は固定長、スライスは可変長とのこと。
他の言語で使うような配列は Go言語でいうところのスライスにあたる。

要素を追加&削除する

  • 要素を追加するには append() を使う
  • スライスの要素を削除する機能はないので自分で作る
package main

import (
	"fmt"
)

type SliceSample struct {
	List []string
}

func (m *SliceSample) Set(value string) {
	m.List = append(m.List, value)
}

func (s *SliceSample) Remove(index int) {
	res := []string{}
	for i, v := range s.List {
		if i == index {
			continue
		}
		res = append(res, v)
	}
	s.List = res
}

func print(v interface{}) {
	fmt.Print(v)
	fmt.Print("\n")
}


func main() {
	ss := new(SliceSample)
	print(ss.List)

	// 追加
	ss.Set("test")
	ss.Set("test2")
	ss.Set("test3")
	print(ss.List)

	// 削除
	ss.Remove(0)
	// 存在しない要素を削除してみる
	ss.Remove(10)
	print(ss.List)
}

マップの追加・削除

マップは連想配列にあたる。

要素を追加&削除する

  • 要素を追加する際に nil チェックをしないとバグの原因になったりする
  • 要素を削除するには delete() を使う
package main

import (
	"fmt"
)

type MapSample struct {
	List map[string]int
}

func (m *MapSample) Set(key string, value int) {
	if m.List == nil {
		m.List = map[string]int{}
	}
	m.List[key] = value
}

func (m *MapSample) Remove(key string) {
	delete(m.List, key)
}

func print(v interface{}) {
	fmt.Print(v)
	fmt.Print("\n")
}


func main() {
	ms := new(MapSample)
	print(ms.List)

	// 追加
	ms.Set("test", 123)
	ms.Set("test2", 456)
	ms.Set("test3", 789)
	print(ms.List)

	// 削除
	ms.Remove("test")
	// 存在しない要素を削除してみる
	ms.Remove("test4")
	print(ms.List)
}
カテゴリー:Go