[Golang] ring 자료구조

Ring 자료구조는 단어가 의미하듯이 Ring 자료를 구성하는 요소들을 순서대로 얻다가 마지막 요소에서 다시 처음 요소로 순회하면서 무한으로 계속 요소 데이터를 얻을 수 있는 자료구조입니다. Go에서 이러한 Ring 자료 구조에 대한 예제 코드는 아래와 같습니다.

package main

import (
    "container/ring"
    "fmt"
    "time"
)

func main() {
    dt := []string{"ONE", "TWO", "THREE", "FOUR", "FIVE"}

    r := ring.New(len(dt))
    for i := 0; i < r.Len(); i++ {
        r.Value = dt[i]
        r = r.Next()
    }

    r.Do(func(x interface{}) {
        fmt.Println(x)
    })

    fmt.Println("------")

    for _ = range time.Tick(time.Second * 1) {
        fmt.Println(r.Value)
        r = r.Next()
    }
}

링의 자료구조 객체는 12번 코드처럼 ring.New 함수를 통해 생성할 수 있으며 이 함수의 인자는 링을 구성하는 데이터 개수입니다. 10번 코드에서 링의 데이터 요소로 구성할 슬라이스 객체를 준비해 두었고 이 슬라이스의 갯수를 인자로 ring.New 함수를 호출하고 있습니다. 13번의 for 문을 통해 슬라이스의 데이터를 하나 하나 링에 추가합니다. 18번 코드에서 링의 Do 함수는 각 요소에 대해 실행할 함수를 지정해 두면 링을 구성하는 모든 데이터 각각에 대해 실행할 함수를 호출해 줍니다. 여기서는 단순히 화면 출력에 대한 코드를 함수로 지정하고 있습니다. 24번 코드가 바로 1초 간격으로 무한 반복으로 링을 구성하는 요소를 얻는 for 문입니다. 위의 코드를 실행하면 다음과 같은 결과를 얻을 수 있습니다.

ONE
TWO
THREE
FOUR
FIVE
------
ONE
TWO
THREE
FOUR
FIVE
ONE
TWO
THREE
FOUR
FIVE
ONE

.
.
.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다