>  기사  >  백엔드 개발  >  Slice in go 사용에 대한 메모 공유

Slice in go 사용에 대한 메모 공유

藏色散人
藏色散人앞으로
2021-10-13 17:28:522297검색

이 글은 go 언어 튜토리얼 칼럼에서 Slice in go 사용 시 주의사항을 공유하기 위해 작성한 글입니다. 도움이 필요한 친구들에게 도움이 되길 바랍니다!

이 글에서는 Go의 슬라이스 사용에 대해 설명합니다. 다음 프로그램을 살펴보겠습니다.

package mainimport (
    "fmt"
    )func main() {
    var array [10]int
    var slice = array[5:6]
    fmt.Println("lenth of slice: ", len(slice))
    fmt.Println("capacity of slice: ", cap(slice))
    fmt.Println(&slice[0] == &array[5])}
  • 이 프로그램에 대해 제가 말하고 싶은 것은: 주 함수가 10 길이의 정수 배열을 정의한 다음 슬라이스를 정의한다는 것입니다. 슬라이스, 배열의 6번째 요소를 잘라낸 다음 마지막으로 슬라이스의 길이와 용량을 인쇄하여 슬라이스의 첫 번째 요소와 배열의 6번째 요소의 주소가 같은지 확인합니다.
  • 모두들 슬라이스의 첫 번째 요소가 배열의 6번째 요소와 같은지 생각해 보세요. 아마도 이 프로그램을 실행하여 이를 증명하고 아래 결과를 볼 수 있습니다. 위 프로그램에서는 배열 배열이 생성되고 배열과 저장 공간을 공유합니다. 슬라이스의 시작 위치는 배열[5]이고 길이는 1이며 용량은 5입니다. 슬라이스[0의 주소는 다음과 같습니다. ]와 array[5]는 동일합니다.

다음으로 이 프로그램을 살펴보고 직접 실행해 보겠습니다. 실습이 최고의 선생님입니다

package mainimport (
    "fmt")func AddElement(slice []int, e int) []int {
    return append(slice, e)
    }func main() {
    var slice []int
    slice = append(slice, 1, 2, 3)
    newSlice := AddElement(slice, 4)
    fmt.Println(&slice[0] == &newSlice[0])}
  • 위 문단에서 표현하고 싶은 것은 AddElement() 함수가 슬라이스를 허용한다는 것입니다. 및 요소를 추가하고 요소를 슬라이스에 추가하고 슬라이스를 반환합니다. main() 함수에서 슬라이스를 정의하고, 슬라이스에 3개의 요소를 추가한 다음 AddElement()를 호출하여 계속해서 네 번째 요소를 슬라이스에 추가하고 새 슬라이스 newSlice를 정의합니다. 마지막으로 새로운 슬라이스 newSlice와 기존 슬라이스가 저장 공간을 공유하는지 판단합니다
  • 많은 친구들이 추가가 기존 슬라이스의 확장을 촉발할 수 있다고 생각하지만 확신하지 못하므로 "It"을 계속 읽어보세요. 가능합니다"로 변경됨:
    1. 추가 기능이 실행되면 슬라이스 용량이 새 요소를 저장할 수 있는지 여부를 결정합니다. 그렇지 않으면 저장 공간을 다시 신청합니다. 새로운 저장 공간은 원본의 2배 또는 1.25배(원래 공간 크기 확장에 따라 다름) 이 예에서는 실제로 공간이 4로 증가하므로 두 번째 추가는 확장되지 않으므로 이전 및 새 항목이 추가됩니다. 슬라이스는 저장 공간을 공유합니다. 프로그램은 "true"를 출력합니다.

그런 다음 이 프로그램이 어떻게 출력되는지 계속 지켜보세요. 그것에 대해 생각하거나 프로그램을 실행할 수 있습니다.

 package mainimport (
    "fmt")func main() {
    orderLen := 5
    order := make([]uint16, 2 * orderLen)
    pollorder := order[:orderLen:orderLen]
    lockorder := order[orderLen:][:orderLen:orderLen]
    fmt.Println("len(pollorder) = ", len(pollorder))
    fmt.Println("cap(pollorder) = ", cap(pollorder))
    fmt.Println("len(lockorder) = ", len(lockorder))
    fmt.Println("cap(lockorder) = ", cap(lockorder))}

위의 프로그램을 질문과 함께 실행한 후에는 전체 사람이 갑자기 깨달음을 느낄 것입니다. 믿을 수 없다면 다음을 시도해 보세요.

  1. 프로그램에서 길이가 10인 슬라이스 순서를 정의합니다. Pollorder 및 lockorder는 주문에 대해 order[start, stop, max] 작업을 수행하여 생성된 슬라이스입니다. 마지막으로 프로그램은 각각 잠금 순서의 용량과 길이를 인쇄합니다.
  2. order[start,stop,max]는 슬라이싱 순서를 의미하며, 새로운 슬라이싱 범위는 [start, stop)이며, 새로운 슬라이싱 용량은 max입니다. 주문 길이는 orderLen의 2배이고, pollorder 슬라이스는 주문의 전반부를 참조하고, lockorder는 주문의 후반부를 참조합니다. 즉, 원래 주문이 두 개의 세그먼트로 분할됩니다. 따라서 pollorder와 lockerorder의 길이와 용량은 모두 orderLen(5)입니다.

이 글에는 Slice 사용에 대한 몇 가지 설명이 포함되어 있습니다. Slice 사용에 대한 자세한 내용을 알고 싶다면 메시지를 남겨주세요

위 내용은 Slice in go 사용에 대한 메모 공유의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 learnku.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제