1週間でお問い合わせが73件ありました。

✉️FIELDにお問い合わせ

Uncategorized

Go言語入門の入門「ポインタ」でつまずくことなかれ。

前回までのあらすじ

前回はvagrant/centos7にgo入れて変数にぶち込んでPrintするだけということをやりました。

今日はポインタをやっていきます。

まず、型宣言しなくても
test := 5 とかで勝手にint型を空気読んで設定してくれるということは前回やりました。

ここで、プログラムの世界では、
この変数のメモリ的な住所(アドレス)に値(今回は5)が入ってることになります。

この時、
そのアドレスや値にアクセスする方法としてポインタというものを使います。

まず、
ポインタを扱う変数をpoiaとして、intの型のアドレスを格納すると決めたとすると
書き方は

var poia *int

ってなります。

そして、先ほどのtest := 5で格納されたtestについて、
アドレスと値をそれぞれ適応してみましょう。

poia = &test

このように&と先ほど決めた変数名で、その変数のアドレスを取得できます。
&XXでint型のアドレスを取得するために *int で宣言したという形です。

つまり、
例えば、
yama := “山本”
という変数を文字列で宣言していたとして、
この変数のstringのアドレスと値を取りたいなと思ったら、
var poib *string で定義しておき、

poib = &yama でアドレスを取得。
*poib でその値(山本)を取得できるということになります。

まとめるとこんなコードになります。

package main
import "fmt"

func main() {
    var number int
    //どの演算子もjsやphpやruby等とほとんど変わらんですね。
    number =( 1 + 1 * 2 / 3 ) * 3 % 3
    fmt.Println(number)

    //ポインタ(変数のメモリのアドレス)の宣言
    test := 5
    yama := "山本"
    var poia *int
      // 「*型」と書くことで、ポインタを宣言している。
    var poib *string

    poia = &test
    poib = &yama
      //&をつけるとtestの変数のアドレスが格納される
      //ちなみに*poia と書くと、test変数の値、つまり5のこととなる。

    fmt.Println(poia)
    fmt.Println(*poia)

    fmt.Println(poib)
    fmt.Println(*poib)

}
~       

index2.goで保存し実行するとこんな感じになります。

[vagrant@localhost ~]$ go run index2.go
0
0xc000016090
5
0xc000010200
山本

使い所としては、大きなarrayとかを値渡しする時に、
コピーするとコストがかかるので、
変数として渡した先で変更を加えたい時

一言で便利さをいうなら

アドレスを格納したポインタ変数Xに対して,
*Xのように書くと、
そのXが保持しているアドレスのデータを表示できるのですよ。

なので配列とかオブジェクトとかの中に向かって指定するのではなくて、
とりあえずポインタ型で指定されてるならアスタつければデータにアクセスできます。


Yamamoto Yuya

プロフェッショナルとしての高いスキルと知識を持ち、誠実さと責任感を大切にする。常に向上心を持ち、新たな挑戦にも積極的に取り組む努力家。

  • 生肉食べながらLaravelの解説でもするか。

    といったらもうってくらいみんな使ってる今日は生肉でも食べながらを解説していこうと思いますなかなかな肉

    • #laravel
    • #システム
  • Pythonのbeautiful soupでウェブサービスを瞬時にクローリングするよー

    である住所の部屋の全ての金額を取得するクロラ作って欲しいんだけど今日中に作れると言われた時のなら可能

    • #システム
    • #クローリング
  • Go言語の構造体で世の中の全てを表すことが…

    可能ですさて書いていきましょう複数のデタやメソッドを一つの型として定義したものそれが構造体ですまずは

    • #go言語
  • Go言語の関数定義と[配列][スライス][map]についてなんか書く。

    サムネイルは言語バンコクという連想ですまずは関数の基礎から最小単位を書きますさんが返りますはいまず関

    • #go言語
  • Next.js/Reactで静岡県島田市家山の屋号マップを作ってみた。

    島田市家山の屋号マップをご覧くださいまずはいつものような感じです静岡県島田市家山の屋号マップこのの中

    • #javascript
    • #next.js
    • #システム
  • Go言語入門の入門(vagrant/centos7にgo入れて変数にぶち込んでPrintするだけ)

    公式ペジさて見ていきましょう言語が選ばれる理由それはシンプル高速つのプログラムから複数のプロセスやス

    • #システム
    • #go言語