2
2

More than 3 years have passed since last update.

【Golang】newとmakeの違い

Posted at

【Golang】newとmakeの違い

Golangの基礎学習〜Webアプリケーション作成までの学習を終えたので、復習を兼ねてまとめていく。 基礎〜応用まで。

package main
//new makeの違い
//new メモリーにポインタが入る空の領域を確保したい場合
//ここ調査

import (
    "fmt"
)


type Person struct{
    id int
    name string
}

func main() {
    //アドレスだけ付与する
    var p *int = new(int)
    fmt.Println(p)
    //>>0xc000016068
    fmt.Println(**&p)
    //>>0
    fmt.Println(*p)
    //>>0

    //メモリーはあるので、(0なので)カウントアップする
    *p++
    fmt.Println(*p)


    //まだアドレスがない
    /*
        var p2 *int
        fmt.Println(p2)
        //>>nil

        //アドレスはnilなのでエラーになる
        *p2++
        fmt.Println(p2)
    */



    //newとmakeの違い
    //newはポインタを返す
    //makeは空を返す
    //スライス、マップ、チャネルはmake
    //変数、structはnew 
    //で使い分ける

    s := make([]int, 0)
    fmt.Println(s)
    //>>[]
    fmt.Printf("%T\n", s)//型を表示


    m := make(map[string]int)
    fmt.Println(m)
    //>>map[]
    fmt.Printf("%T\n", m)


    ch := make(chan int)
    fmt.Println(ch)
    //>>0xc00005c060

    //new
    //変数
    var p2 *int = new(int)
    //*int 
    fmt.Printf("%T\n", p2)
    //>>*int

    //struct
    var st = new(struct{})
    fmt.Println(st)
    //>>&{}
    fmt.Printf("%T\n", st)
    //*struct {}



    //newと&
    //動作上違いはあまりない
    man := new(Person)
    man.id = 0
    man.name = "genius"
    fmt.Println(man)
    //>>&{0 genius}

    woman := &Person{id:1, name:"nancy"}
    fmt.Println(woman)
    //>>&{1 nancy}
}
2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2