2017-11-24 7 views
1

スライスとリストの間には違いがありますか?私は、彼らはスライスが、午前の両方であると言いたいゴランのスライスとリストの違いはありますか

var slice []int 
list := []string{"a", "b", "c", "d", "e"} 

何私が理解することは、配列(固定サイズ)とスライス(動的なサイズ)がありますが、thoses 2つのものとの間に差があるさ本当ですか?

おかげ

+6

1つはintのスライスで、もう1つはstringのスライスです。ゴランには「リスト」はありません。 – tkausl

+5

これらは両方ともスライスです。ゴランには 'list'データ構造がありません –

答えて

1
var slice []int 
list := []string{"a", "b", "c", "d", "e"} 

これらは両方ともスライスです。

宣言でサイズが記述されている場合のみ配列です。このサイズは後で変更することはできないため、固定サイズです。あなたは彼らの内部表現を見たときのアレイとスライス間の違いを理解する

var array [5]int 
array2 := [3]string{"a","b","c"} 

Go Slices & Arrays

は簡単です。

配列:

配列はメモリに順次レイアウトされた値のリストです。

配列:= [4] INT {1,2,3,4}

 +-----------------------+ 
[4]int | 1 | 2 | 3 | 4 | 
     +-----------------------+ 

もしアレイを定義した後、それのサイズを変更することはできません。 [4]intは、常に4つの整数の配列のままです。 [4]int[5]intは互換性のないタイプです。

スライス:

スライスタイプが行くの配列型の上に構築された抽象化です。これは配列のセグメントの記述子です。基礎となる配列へのポインタ、

  • LEN - - セグメントの長さ、
  • キャップ - と、その容量(最大長

    これは3つの成分

    1. PTRから成りセグメント)。

       +-----+ 
      []int | ptr | 
           +-----+ 
           | len | 
           +-----+ 
           | cap | 
           +-----+ 
            | 
            | 
           +-----------------------+ 
      [4]int | 1 | 2 | 3 | 4 | 
           +-----------------------+ 
      

    スライスは、同一又は 異なるサイズの異なる配列を指すように変更することができます。したがって、スライスは動的サイズを有する。

    slice1 := []int{1,2,3} 
    
         +-----------------+ 
    slice1 | ptr | 3 | 3 | 
         +-----------------+ 
    
    slice1 = []int{1,2} 
    
         +-----------------+ 
    slice1 | ptr | 2 | 2 | 
         +-----------------+ 
    

    そして、同じアレイを指す複数のスライスが存在する可能性があります。

  • 2

    The Go Programming Language Specification

    Slice types

    スライスは、基礎となる 配列の連続セグメントの記述子であり、その 配列からの要素の番号付け配列へのアクセスを提供します。スライスタイプは、要素タイプが の配列のすべてのスライスのセットを示します。初期化されていないスライスの値はゼロです。

    SliceType = "[" "]" ElementType . 
    

    移動スライスは、元の配列のスライスです。 Goにはリストがありません。 Goでは、スライスを使用してリストを実装できます。

    これらは両方ともGoスライスです。どちらもリストではありません。

    var intSlice []int 
    strSlice := []string{"a", "b", "c", "d", "e"} 
    

    intSlicenilあるスライスについてゼロ値に初期化されます。基本配列の要素はstrSliceで、スライス複合リテラル値{"a", "b", "c", "d", "e"}に初期化されます。

    関連する問題