Go言語初歩まとめ | Go言語でHello world!

go言語

Go言語初心者の忘備録です

直近はPHPでの開発をしていました。rubyやjavaも少し。Go言語は全くの初心者なのでまずはおなじみHello world!の表示などで練習しました。

Go言語の環境設定

Goのインストール

こちらからダウンロードしてインストールします。

環境変数GOPATHが自動で設定されていなければ、好きなディレクトリを作成して設定します。$GOPATH/binにPATHを通します。

Cloud SDK をダウンロード

App Engine アプリケーションの管理に推奨されるツール Google Cloud SDKのインストールをする。

Google App Engine Go 1.12+ Standard Environment documentation
Using Go 1.12+ in the App Engine standard environment

goのバージョン確認

–versionや-vではないので注意が必要。

go version

パッケージインストール

go get -v golang.org/x/text/width

Go言語でHello world!

途中からHello world!ではなくなってきますがまあとりあえずGo言語の初歩をまとめました。

プログラム

hello.go

/*
 * Go言語でハローワールドの練習
 */
package main

import "fmt"

func main() {
    // 文字列を出力します
    fmt.Println("Hello world!")
}
※インデントはスペースではなくてタブが推奨されている

コンパイル・実行

コンパイルと実行を別々に行う方法

$ go build hello.go
$ ls
hello.exe*  hello.go
$ ./hello.exe
Hello world!

コンパイルと実行を一緒に行う方法

$ go run hello.go
Hello world

go runの方だとコンパイルと実行を一度に出来るため開発時は基本的にはコチラを使用すると便利。 go runではhello.exeというファイルは生成されない

Go言語で変数や定数を使ってHello world!

変数のサンプル

今度は変数を使ってHello world!します。

package main

import "fmt"

func main() {

    // 型の定義と変数へ値をセット
    var msg string
    msg1 = "Hello world! 1"

    // 1行に書くと型が省略できる
    var msg2 = "Hello world! 2"

    // 宣言と値の紐づけを更に省略できる
    mas3 := "Hello world! 3"

    // aとbの変数がどちらも数値型が入る場合、同時に宣言と値のセットが可能
    var a, b int
    a, b = 4, 5

    // string同様省略も可能
    c, d := 6, 7

    // 異なる型をまとめて定義
    var (
        e int
        msg4 string
    )
    e = 14
    msg4 = "Hello world! 4"

    // Printfは書式付きの出力ができる
    // 整数値の場合は「%d」、float の場合は「%f」
    // 文字列の場合は「%s」、そして真偽値の場合は「%t」を使う
    // %vはどれでも汎用的に使える
    fmt.Println(msg1)
    fmt.Println(msg2)
    fmt.Println(msg3)
    fmt.Printf("a: %d b: %d c: %d d: %d e: %d\n", a, b, c, d, e)
    fmt.Println(msg4)
}
memo変数の先頭が小文字の場合自分のパッケージだけの変数で、大文字の場合は他のパッケージから見える変数。
変数も定数も関数も同じルールで、fmtパッケージのPrintlnが大文字で他のパッケージからも使えるのがわかりやすい例(インポートすればどこからでも使える)

型の書き方や初期値など

書き方 初期値 備考
string “ほげ” “”
int 2 0
float64 2.1 0.0 小数点付き数字
bool true false

nil // 何もない

a := 10
b := 11.1
c := "hoge"
d := false
var e int

fmt.Printf("a: %d b: %f c: %s d: %t e: %v\n", a, b, c, d, e)

定数でHello world!

定数はよくある全部大文字…ではなくconstで宣言したものが定数となる。

また、定数宣言の内で整数の連番を生成してくれるiota (イオタ)も使用可能。

const hello = "Hello world!"

// 1ずつ増やしてくれるイオタ
const (
    zero = iota
    one = iota
    two = iota
)

fmt.Printf("%v:%v\n", hello, zero)
    ⇒Hello world!:0

// イオタは省略して書くことも可能
const (
    zero = iota
    one
    two
)

Go言語で計算!

四則演算の表記方法

書き方 備考
足し算 + 文字列の連結にも使う
引き算
かけ算 *
割り算 /
余り %

Go言語の計算式の書き方

// i = i + 2 を書く場合
i += 2

// j = j × 3 を書く場合
j *= 3

Go言語のポインタ

ポインタとは

ちゃんとした言語が長い方にはなじみがあるのだと思いますが、スクリプト言語が私は長いのでイマイチ使いこなせない。変数の位置を示すこと。

Go言語のポインタの使い方

// 変数を用意
hoge = 5

// ポインタの変数を用意
var phoge *int
phoge = &hoge // &をつけるとhogeのアドレスを取得できる
// phogeの領域にあるデータの値を「*」で取得できる
fmt.Println(phoge)
    ⇒アドレス
fmt.Println(*phoge)
    ⇒値の「5」が取れる

// 変数を変更
hoge = 6
fmt.Println(*phoge)
    ⇒値の「6」が取れる(こちらも変わっている)

コメント