Golang 다양한 함수 유틸리티 go-funk 라이브러리 알아보기 2

오늘도 이어서 Golang으로 map, find, contains, filter, chunk, reverse와 같은 여러 함수들을 지원하는 go-funk 라이브러리를 알아보려 합니다.

go-funk 설치

우선 Golang의 환경을 구성하기 위해 https://golang.org/dl/ 에서 윈도우, 리눅스, 맥에서 설치 프로그램을 내려받을 수 있습니다.

맥에서 brew로 쉽게 설치할 수 있습니다.

brew install go

우분투에서도 apt로 쉽게 설치할 수 있습니다.

sudo apt-get install golang-go

맥에서 Golang의 버전을 올리려면 brew를 이용합니다.

brew upgrade go

우분투에서도 Golang의 버전을 올리려면 backports 저장소를 등록하고 apt를 이용합니다.

sudo add-apt-repository ppa:longsleep/golang-backports
sudo apt-get update
sudo apt-get install golang-go

go get으로 go-funk 패키지를 설치합니다.

go get github.com/thoas/go-funk

홈의 go 폴더에 go-funk 소스코드와 패키지 파일이 생성됩니다.

예제

package main

해당 소스코드를 실행 파일로 인식하게 해주도록 main이라고 선언합니다.

import (
	"fmt"

	"github.com/thoas/go-funk"
)

fmt와 go-funk를 가져옵니다.

type test struct {
	ID       int
	Password string
}

구조체를 만들어둡니다.

func main() {
	testStruct := &test{
		ID:       1,
		Password: "0000",
	}

test라는 구조체로 객체를 만듭니다.

	funk.ForEach([]int{1, 2, 3, 4}, func(x int) {
		fmt.Println(x)
	})

ForEach로 반복하여 순서대로 반환되는 값들을 출력할 수 있습니다.

	keys := funk.Keys(map[string]int{"hello": 1, "world": 2})
	fmt.Println(keys)
	keys = funk.Keys(testStruct)
	fmt.Println(keys)

Keys로 map 또는 객체의 키, 이름을 반환할 수 있습니다.

	values := funk.Values(map[string]int{"hello": 1, "world": 2})
	fmt.Println(values)
	values = funk.Values(testStruct)
	fmt.Println(values)

Values로 map 또는 객체의 값들을 반환할 수 있습니다.

	chunk := funk.Chunk([]int{1, 2, 3, 4, 5}, 2)
	fmt.Println(chunk)

Chunk로 두번재 인자에 받는 크기만큼 슬라이스를 잘라 반환할 수 있습니다.

	flattenDeep := funk.FlattenDeep([][]int{[]int{1, 2}, []int{3, 4}})
	fmt.Println(flattenDeep)

FlattenDeep으로 쪼개져있는 슬라이스를 합칠 수 있습니다.

	uniq := funk.Uniq([]int{0, 1, 1, 2, 2, 3, 3, 10})
	fmt.Println(uniq)

Uniq로 중복을 없앨 수 있습니다.

	drop := funk.Drop([]int{0, 0, 0, 0}, 3)
	fmt.Println(drop)

Drop으로 인자로 받는 수 만큼 버리고 남길 수 있습니다.

	intial := funk.Initial([]int{0, 1, 2, 3, 4})
	fmt.Println(intial)

Initial로 마지막 수를 제외할 수 있습니다.

	tail := funk.Tail([]int{0, 1, 2, 3, 4})
	fmt.Println(tail)

Tail로 첫 수를 제외할 수 있습니다.

	shuffle := funk.Shuffle([]int{0, 1, 2, 3, 4})
	fmt.Println(shuffle)

Shuffle로 여러 수들을 섞을 수 있습니다.

	sum := funk.Sum([]int{0, 1, 2, 3, 4})
	fmt.Println(sum)

Sum으로 모든 수들을 더할 수 있습니다.

	reverse := funk.Reverse([]int{0, 1, 2, 3, 4})
	fmt.Println(reverse)

Reverse로 수들을 섞을 수 있습니다.

	slice := funk.SliceOf(testStruct)
	fmt.Println(slice)

SliceOf로 원하는 객체를 슬라이스에 포함하여 반환할 수 있습니다.

	random := funk.RandomInt(0, 100)
	fmt.Println(random)
	random2 := funk.RandomString(4)
	fmt.Println(random2)

RandomInt로 원하는 범위의 난수를 구하거나, RandomString으로 지정된 길이의 무작위 문자열을 반환할 수 있습니다.

	shard := funk.Shard("e89d66bdfdd4dd26b682cc77e23a86eb", 2, 2, false)
	fmt.Println(shard)
	shard = funk.Shard("e89d66bdfdd4dd26b682cc77e23a86eb", 2, 2, true)
	fmt.Println(shard)
}

Shard로 문자열 이름을 Shard합니다

Written on November 12, 2019