Latest web development tutorials

이동 언어 조각 (조각)

이동 언어 슬라이스 추상화의 배열입니다.

컬렉션이 특정 시나리오에 유용되지 않도록, 배열의 길이를 변경할 수 없습니다 이동, 이동이 제공하는 강력한 내장 타입 섹션 ( "동적 배열"), 배열 슬라이스 길이에 비해 고정 유연하지 않은 추가 용량 증가 슬라이스 할 수있는 경우, 요소를 첨가 할 수있다.


정의 조각

당신은 슬라이스를 정의하기 위해 지정되지 않은 크기의 배열을 선언 할 수 있습니다 :

var identifier []type

슬라이스 길이 설명.

또는 ()하게 사용하는 기능을 슬라이스를 만들 수 있습니다 :

var slice1 []type = make([]type, len)

也可以简写为

slice1 := make([]type, len)

또한 용량은 선택 사항입니다 용량을 지정할 수 있습니다.

make([]T, length, capacity)

여기 렌 배열의 길이 또한 슬라이스의 초기 길이이다.

슬라이스 초기화

s :=[] int {1,2,3 } 

슬라이스 유형을 표시 [] 직접 초기화 섹션이, {1,2,3} 초기화 값이 1,2,3의 모자 뒤에 = LEN = 3

s := arr[:] 

초기화 슬라이스들, 배열의 도착에 대한 참조입니다

s := arr[startIndex:endIndex] 

그것은 도착에 인덱스에서 startIndex에서 endIndex 1 아래의 요소에 새 슬라이스를 만듭니다

s := arr[startIndex:] 

마지막 요소는 endIndex에 기본적를, 언합니다

s := arr[:endIndex] 

도착 시간 기본의 첫 번째 요소에서 시작을 나타내는 시작 인덱스

s1 := s[startIndex:endIndex] 

의 초기화 S1 조각으로 슬라이스

s :=make([]int,len,cap) 

내장 기능의 메이크업 ()는 슬라이스의를 초기화를 통해, [] INT는 int 형 조각의 요소를 식별합니다


LEN ()와 캡 () 함수

슬라이스 색인 및 길이 LEN () 방법에 의해 얻을 수있다.

조각은 (는) 슬라이스의 최대 수까지 측정 할 수있는 능력 캡을 계산하는 방법을 제공한다.

다음 구체적인 예 :

package main

import "fmt"

func main() {
   var numbers = make([]int,3,5)

   printSlice(numbers)
}

func printSlice(x []int){
   fmt.Printf("len=%d cap=%d slice=%v\n",len(x),cap(x),x)
}

위의 예제 출력은 실행

len=3 cap=5 slice=[0 0 0]

슬라이스 빈 (전무)

다음과 같이 초기화되지 않은 기본 전에 슬라이스가 0의 길이 무기 호입니다, 예는 다음과 같습니다

package main

import "fmt"

func main() {
   var numbers []int

   printSlice(numbers)

   if(numbers == nil){
      fmt.Printf("切片是空的")
   }
}

func printSlice(x []int){
   fmt.Printf("len=%d cap=%d slice=%v\n",len(x),cap(x),x)
}

위의 예제 출력은 실행

len=0 cap=0 slice=[]
切片是空的

슬라이스 차단

당신은 차단 슬라이스 설정할 수 있습니다 : [하한 위 바운드를 ] 다음과 같이 하부 및 상부 설정하여 예는 다음과 같습니다

package main

import "fmt"

func main() {
   /* 创建切片 */
   numbers := []int{0,1,2,3,4,5,6,7,8}   
   printSlice(numbers)

   /* 打印原始切片 */
   fmt.Println("numbers ==", numbers)

   /* 打印子切片从索引1(包含) 到索引4(不包含)*/
   fmt.Println("numbers[1:4] ==", numbers[1:4])

   /* 默认下限为 0*/
   fmt.Println("numbers[:3] ==", numbers[:3])

   /* 默认上限为 len(s)*/
   fmt.Println("numbers[4:] ==", numbers[4:])

   numbers1 := make([]int,0,5)
   printSlice(numbers1)

   /* 打印子切片从索引  0(包含) 到索引 2(不包含) */
   number2 := numbers[:2]
   printSlice(number2)

   /* 打印子切片从索引 2(包含) 到索引 5(不包含) */
   number3 := numbers[2:5]
   printSlice(number3)

}

func printSlice(x []int){
   fmt.Printf("len=%d cap=%d slice=%v\n",len(x),cap(x),x)
}

위의 코드의 출력 결과를 실행합니다 :

len=9 cap=9 slice=[0 1 2 3 4 5 6 7 8]
numbers == [0 1 2 3 4 5 6 7 8]
numbers[1:4] == [1 2 3]
numbers[:3] == [0 1 2]
numbers[4:] == [4 5 6 7 8]
len=0 cap=5 slice=[]
len=2 cap=9 slice=[0 1]
len=3 cap=7 slice=[2 3 4]

() 함수를 (추가) 및 복사

만약 슬라이스의 용량을 증가 할 경우에는 콘텐츠의 최초 단편의 새로운 더 큰 슬라이스가 복사 생성한다.

다음 코드는 슬라이스와 슬라이스 방법을 추가 할 수있는 새로운 요소를 추가 할 수있는 복사 방법의 사본을 설명합니다.

package main

import "fmt"

func main() {
   var numbers []int
   printSlice(numbers)

   /* 允许追加空切片 */
   numbers = append(numbers, 0)
   printSlice(numbers)

   /* 向切片添加一个元素 */
   numbers = append(numbers, 1)
   printSlice(numbers)

   /* 同时添加多个元素 */
   numbers = append(numbers, 2,3,4)
   printSlice(numbers)

   /* 创建切片 numbers1 是之前切片的两倍容量*/
   numbers1 := make([]int, len(numbers), (cap(numbers))*2)

   /* 拷贝 numbers 的内容到 numbers1 */
   copy(numbers1,numbers)
   printSlice(numbers1)   
}

func printSlice(x []int){
   fmt.Printf("len=%d cap=%d slice=%v\n",len(x),cap(x),x)
}

출력은 상기 코드가 실행된다 :

len=0 cap=0 slice=[]
len=1 cap=2 slice=[0]
len=2 cap=2 slice=[0 1]
len=5 cap=8 slice=[0 1 2 3 4]
len=5 cap=16 slice=[0 1 2 3 4]