최고의 이동 언어 조각 (조각) 튜토리얼 2024년, 이 튜토리얼에서는 정의 조각,LEN ()와 캡 () 함수,슬라이스 빈 (전무),슬라이스 차단,() 함수를 (추가) 및 복사,를 배울 수 있습니다.
이동 언어 슬라이스 추상화의 배열입니다.
컬렉션이 특정 시나리오에 유용되지 않도록, 배열의 길이를 변경할 수 없습니다 이동, 이동이 제공하는 강력한 내장 타입 섹션 ( "동적 배열"), 배열 슬라이스 길이에 비해 고정 유연하지 않은 추가 용량 증가 슬라이스 할 수있는 경우, 요소를 첨가 할 수있다.
당신은 슬라이스를 정의하기 위해 지정되지 않은 크기의 배열을 선언 할 수 있습니다 :
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 () 방법에 의해 얻을 수있다.
조각은 (는) 슬라이스의 최대 수까지 측정 할 수있는 능력 캡을 계산하는 방법을 제공한다.
다음 구체적인 예 :
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]