【Golang】切片

【Go语言】切片

我已完成Golang的基础学习,包括学习到Web应用程序的创建,现在进行复习和总结。从基础到应用。

package main
//スライス 可変長配列
//関数では参照渡しされるので、本体の値も変わる。配列とは違う。

import "fmt"

func main() {
    //宣言
    //スライス = 可変長配列
    //[]にするとサイズ変更できる。
    var a []int = []int{100, 200}

    //宣言
    b := [] string{"A", "B"}
    fmt.Println(b)
    //>>[A, B]

    //宣言
    //[]を作る nil メモリーに確保しない。bとは違う。
    //メモリーは深い領域なので、最初は、あまり気にしなくてもいい
    var c []int
    fmt.Printf("len=%d cap=%d value=%v\n", len(b), cap(b), b)
    fmt.Printf("len=%d cap=%d value=%v\n", len(c), cap(c), c)
    fmt.Println(c)
    //>>[]





    //aに300を追加
    a = append(a, 300)
    fmt.Println(a)
    //>>[100, 200, 300]

    //代入
    a[0] = 1000
    fmt.Println(a)
    //>>[1000 200 300]


    //スライス作成
    d := []int{1, 2, 3, 4, 5, 6}
    fmt.Println(d)
    //値の取り出し
    fmt.Println(d[2])
    //>>3

    //2~4の前まで
    fmt.Println(d[2:4])

    //~2前まで
    fmt.Println(d[:2])

    //2~最後
    fmt.Println(d[2:])

    //全て
    fmt.Println(d[:])

    //copy コピー先、コピー元
    copy := copy(d, a)
    fmt.Println(copy)
    //成功したコピー数
    //>>3
    //先頭から塗りつぶすようにコピーする
    fmt.Println(d)
    //>>[1000 200 300 4 5 6]



    //簡易スライス式
    //完全スライス式 は省略
    //配列からスライスを作成する方法


    //リスト内リスト(スライス内スライス)
    var board = [][]int{
        []int{0, 1, 2},
        []int{3, 4, 5},
        []int{6, 7, 8},
    }
    fmt.Println(board)
    //>>[[0 1 2] [3 4 5] [6 7 8]]



    //スライスのmakeとcap
    //メモリーを気にするような開発の場合。
    //最初は気にせずやるほうがいい
    //#################################
    //make
    //make 長さ3, キャパシティ5 [0,0,0]のスライスを作成
    n := make([]int, 3, 5)

    //宣言 make
    //[]を作る 空 メモリーに確保する
    l := make([]int, 0)
    fmt.Println(l)
    //>>[]

    //len() 長さ
    //cap() キャパシティ(容量)
    //%d 整数
    fmt.Printf("len=%d cap=%d value=%v\n", len(n), cap(n), n)
    //>>len=3 cap=5 value=[0 0 0]

    //追加 長さ変更 [0,0,0,0,0]
    n = append(n, 0, 0)
    fmt.Printf("len=%d cap=%d value=%v\n", len(n), cap(n), n)
    //>>len=5 cap=5 value=[0 0 0 0 0

    //追加
    //[0,0,0,0,0,1,2,3,4,5]
    n = append(n, 1, 2, 3, 4, 5)
    //長さとキャパシティが変わる.10,10に
    fmt.Printf("len=%d cap=%d value=%v\n", len(n), cap(n), n)
    //>>len=10 cap=10 value=[0 0 0 0 0 1 2 3 4 5]

    //引数一つの場合 は長さ、キャパが同じ(今回は3)になる
    e := make([]int, 3)
    fmt.Printf("len=%d cap=%d value=%v\n", len(e), cap(e), e)
    //>>len=3 cap=3 value=[0 0 0]

    //#################################





    //for文
    // c = make([]int, 5)
    f := make([]int, 0, 5)
    for i := 0; i < 5; i++ {
        f = append(f, i)
        fmt.Println(f)
    }
    fmt.Println(f)

    /*答え
    [0]
    [0 1]
    [0 1 2]
    [0 1 2 3]
    [0 1 2 3 4]
    [0 1 2 3 4]
    */
}

广告
将在 10 秒后关闭
bannerAds