idekazuki / diary

記録
0 stars 1 forks source link

Golang tutorial のポイント2 #60

Open idekazuki opened 5 years ago

idekazuki commented 5 years ago
  1. Pointers Cのようにポインタが使用可能 &オペレータ:&x のように記述することでそのオペランドのポインタを引き出す。 オペレータ:pのように記述すると、そのポインタの指す変数を示す。 ポインタ演算はない

  2. Struct Structはフィールドの集まり。アクセスするときはドットを使う。type 構造体名 struct{ フィールド名 型}

    package main
    import "fmt"
    type Vertex struct {
    X int
    Y int
    }
    func main() {
    v := Vertex{1, 2}
    v.X = 4
    fmt.Println(v.X)
    }
    _________
    output↓
    4
  3. structへのアクセスをpointerでできる。 例えばフィールドxをもつstructのポインタpがある時、(*p).x をp.xと書くことができる。

  4. struct literals Name: 構文を使って、フィールドの一部だけ初期化できる。

    type Vertex struct {
    X, Y int
    }
    var (
    v1 = Vertex{X: 1}  //この場合X:1,Y:0になる。
    p = &Vertex{} //この場合X:0, Y:0の構造体のポインタを取得
    )
idekazuki commented 5 years ago
  1. 配列
    • int の10個の配列はvar a [10]intで宣言できる。アクセスはa[0].
    • 初期を同時に行うにはprimes := [6]int{2, 3, 5, 6, 7. 9}
    • 配列のサイズを変えることはできない。
    • pythonみたいにsliceが使える。
    • var s []int = primes[1:4] // primesの1から3の要素を含むスライス作成 この時sの要素を変更するとスライス元のprimesの要素も変更される。
    • 初めから[]bool{true, false, true}のように宣言した場合、内部処理的には[3]bool{true, false, true}を作成してそれを参照するスライスを作成している。
    • スライス s の長さと容量は len(s) と cap(s) という式を使用して得ることができる。容量はスライスの最初の要素から数えて、元となる配列の要素数。
    • スライスのゼロ値はnill
    • make関数でスライスを作れる。ゼロ化された配列を割り当てて、そのスライスを返す。make([]型, len, cap) a := make([]int, 0, 5) // len(a)=2, cap(a)=5 , a= [0, 0]
    • スライスの中に任意の型のスライスを含ませることができる。
      board := [][]string{
      []string{"_", "_", "_"},
      []string{"_", "_", "_"},
      []string{"_", "_", "_"},
      }
    • スライスにはappendで要素の追加が可能。容量が足りないときは自動で追加される(2, 4, 8, 18のように倍々で増やされる?)
      var s []int // s=[], len=0, cap=0
      s = append(s, 1, 2, 3) // s=[1,2,3], len=3, cap=4
    • rangeも使える。変数が2つかえってくる。1つ目はindex2つ目はindexの場所の要素のコピー。
      
      package main
      import "fmt"
      var pow = []int{1, 2, 4, 8, 16, 32, 64, 128}
      func main() {
      for i, v := range pow {
      fmt.Printf("2**%d = %d\n", i, v)
      }
      }```