Go - 기본이 아닌 데이터 유형의 사용 사례

12250 단어 beginnersclouddevopsgo

소개



Go 시리즈 7부에 오신 것을 환영합니다. 이전 파트(6부): 맵 및 구조체가 무엇인지, 생성, 추가, 삭제 등과 같은 다양한 작업을 수행할 수 있는 방법을 살펴보았습니다. 여기에서는 이를 통해 반복할 수 있는 방법과 기본이 아닌 데이터 유형의 사용 사례를 살펴보겠습니다.

기본이 아닌 데이터 유형 반복



배열, 슬라이스 및 맵은 유사한 유형의 값을 모은 일종의 모음입니다. 이러한 각 컬렉션을 살펴보고 일부 계산을 수행하거나 값을 업데이트하려는 상황이 많이 있을 수 있습니다. 우리가 무엇을 하든지 전체 컬렉션을 살펴보는 것이 여기서 주목해야 할 포인트입니다. 이를 위해 루프를 사용합니다. 루프에 대한 자세한 내용을 아직 확인하지 않은 경우 이 루프 문서를 다시 방문하세요.

일반 for 루프를 사용하여 반복



0부터 컬렉션 길이까지 "for"루프를 실행하고 인덱스 연산자를 사용하여 컬렉션 내의 각 항목에 대해 작업을 수행합니다.

슬라이스의 모든 항목을 줄 바꿈에 인쇄하는 프로그램




package main

import "fmt"

func main() {
    arr := []string{"one", "two", "three", "four"}

    for i := 0; i < len(arr); i++ {
        fmt.Println(arr[i])
    }
}


산출:



비슷한 방식으로 배열을 반복할 수 있습니다. 그러나 맵의 경우 이러한 반복 방법은 맵의 키가 int 유형인 경우에만 가능합니다. int 유형이 아니면 인덱스 연산자 내에서 정수 인덱스를 사용할 수 없습니다.

배열의 모든 항목을 추가하는 프로그램




package main

import "fmt"

func main() {
    arr := [5]int{1, 2, 3, 4, 5}
    sum := 0
    for i := 0; i < len(arr); i++ {
        sum = sum + arr[i]
    }
    fmt.Println("Sum = ", sum)
}


산출:



for-each 루프를 사용하여 반복



이제 맵의 경우 일반 "for"루프를 사용하여 반복하는 것이 항상 가능하지 않은 이유를 알았습니다. 지도가 항상 int 키를 가지고 있다고 보장하지 않고 일반 "for"루프를 사용하여 반복하는 동안 정수 값만 제공하기 때문입니다.

for-each 루프를 사용하면 이 문제를 해결할 수 있습니다. 배열 또는 슬라이스와 함께 for-each 루프를 사용하면 위치와 값인 2개의 값을 제공합니다. 맵과 함께 for-each 루프를 사용하면 키와 값인 2개의 값을 다시 제공합니다.

이를 사용하는 구문은 for <pos/key>, <value> := range collection { } 입니다.

문자열-문자열 맵에서 문자열로 결합된 키와 값을 인쇄하는 프로그램




package main

import "fmt"

func main() {
    mapp := make(map[string]string)
    mapp["one"] = "1"
    mapp["two"] = "2"
    mapp["three"] = "3"

    for key, value := range mapp {
        fmt.Println(key + value)
    }
}


산출:



슬라이스의 위치와 값을 나란히 인쇄하는 프로그램




package main

import "fmt"

func main() {
    arr := []int{23, 52, 745, 13}

    for pos, val := range arr {
        fmt.Printf("%v -> %v \n", pos, val)
    }
}


산출:



이것이 배열, 슬라이스 및 맵과 같은 모든 컬렉션을 반복할 수 있는 방법입니다.

기본이 아닌 데이터 유형이 유용한 실제 시나리오


  • 일부 항목을 컬렉션으로 추적하고 이러한 항목 수의 상한을 알고 있거나 항목을 특정 수로 제한하려는 경우 배열이 유용합니다. 나는 그것이 거의 정의처럼 느껴진다는 것을 압니다. 수업에 참여하는 학생들을 추적하고 있다고 가정해 보겠습니다. 분명히 모든 학급은 제한되어 있으며 제한을 60으로 간주하겠습니다. 이러한 학생의 이름/숫자를 저장하려면 최대 크기 60의 배열이 필요합니다.
  • 이제 위의 예에서 학생에 대해 수행한 것처럼 국가의 유권자를 추적해야 하는 상황을 고려하십시오. 유권자의 수는 제한되지 않으며 일정하지 않습니다. 따라서 우리는 가치를 제한할 수 없습니다. 슬라이스가 필요한 상황입니다. 필요하거나 알려진 제한이 없는 경우 항목을 컬렉션으로 저장하려면 슬라이스를 사용하는 것이 좋습니다.
  • 두 엔티티를 전체 항목으로 연결할 때마다 맵을 사용할 수 있습니다. 단, 조건은 두 항목 중 적어도 하나는 모든 항목에서 고유해야 한다는 것입니다. 고유한 엔터티를 키라고 합니다. 이러한 키로 항목을 고유하게 식별할 수 있습니다. 실제 사례는 사용자 이름과 함께 신용 카드 번호를 추적할 수 있습니다. 여기서 우리가 선택한 관계는 신용 카드와 소유자입니다. 따라서 신용 카드 번호가 키이고 소유자 이름이 값입니다. 우리는 사람과 그의 신용 카드의 관계를 나타낼 수 없습니다. 개인 이름이 모든 항목에 대해 고유할 수 없기 때문입니다. 그러나 첫 번째 경우 신용 카드 번호는 항상 모든 쌍에서 고유합니다.

  • 기본이 아닌 데이터 유형 및 반복의 복잡한 예




    import "fmt"
    
    type person struct { // defining a struct
        name string
        city string
    }
    
    func main() {
        register := make(map[int]person) // map of int key and person value type
        register[5463715] = person{name: "Ram", city: "Ayodhya"}
        register[2385928] = person{name: "Sita", city: "Mithila"}
        register[1432545] = person{name: "chiranjeevi", city: "Bangalore"}
    
        for id, person := range register {
            fmt.Printf("%v having id %v lives in %v. \n", person.name, id, person.city)
        }
    }
    


    산출:



    결론



    그게 다야. 다음 글에서는 defer, panic, recover가 무엇인지 알아보겠습니다. 거기서 만나자.

    Go lang에 대한 자세한 내용은 곧 제공될 예정이며 저를 팔로우하여 확인하세요. 이 기분이 좋았다면 좋아요를 누르고 공유하세요.

    연결하자: Showwcase

    좋은 웹페이지 즐겨찾기