株式会社ヴァンデミックシステム

Blog

<スポンサーリンク>

ポインタ型

  • &nでポインタのアドレスを指定
  • *intで指定したアドレスの中身を取得
package main

import "fmt"

func main() {
    var n int = 100
    fmt.Println(n)
    fmt.Println(&n)

    // pはポインタ型
    var p *int = &n

    fmt.Println(p)

    fmt.Println(*p)
}
100
0xc000104030
0xc000104030
100

newとmake

package main

import "fmt"

func main(){
    // メモリのアドレスを確保している
    var p *int = new(int)
    fmt.Println(p)

    // メモリのアドレスは確保していないのでnil
    var p2 *int
    fmt.Println(p2)
}
0xc0000120b8
<nil>

struct

package main

import "fmt"

type Vertex struct{
    X,  Y int
    S string
}

func main() {
    // XとYを指定して数値を入れる
    v := Vertex{X: 1, Y:2}
    fmt.Println(v)
    fmt.Println(v.X, v.Y)
    v.X = 100
    fmt.Println(v.X, v.Y)

    // Xだけ入れるとYは0扱い
    v2 := Vertex{X: 1}
    fmt.Println(v2)

    // XやYを指定しない場合  文字列も含む
    v3 := Vertex{1,2,"test"}
    fmt.Println(v3)

    // なにも入れない場合はデフォルトの0か空文字が入る
    v4 := Vertex{}
    fmt.Println(v4)
}
{1 2 }
1 2
100 2
{1 0 }
{1 2 test}
{0 0 }

コンストラクタ

???

package main

import "fmt"

type Vertex struct{
    //小文字にするとx.yを書き換えられる
    x, y int
}

func (v Vertex) Area() int{
    return v.x * v.y
}

func (v *Vertex) Scale(i int){
    v.x = v.x * i
    v.y = v.y * i
}

func New(x, y int) *Vertex{
    return &Vertex{x, y}
}

func main(){
    v := Vertex{3, 4}
    v.Scale(10)
    fmt.Println(v.Area())
}
1200

<スポンサーリンク>

コメントを残す

Allowed tags:  you may use these HTML tags and attributes: <a href="">, <strong>, <em>, <h1>, <h2>, <h3>
Please note:  all comments go through moderation.

*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)