🦛

Go言語の値、変数、定数について学ぶ

2023/06/27に公開

🧑‍🎓チュートリアルをやっておさらいする

昔、dot installで学習していたGo言語を趣味で触っていた時期があって、暇なときに遊んでみたいなと思って公式チュートリアルをやりながら、学び直すことにしました。

Go言語を学ぶ

https://go.dev/doc/tutorial/getting-started

  1. プロジェクトを作る
mkdir hello
cd hello
  1. コードの依存関係追跡を有効にする

あなたのコードが他のモジュールに含まれるパッケージをインポートする場合、その依存関係をあなたのコード独自のモジュールで管理します。このモジュールは、パッケージを提供するモジュールを追跡するgo.modファイルによって定義されます。このgo.modファイルは、ソースコード・リポジトリを含め、あなたのコードと一緒に残ります。

go.modファイルを作ってコードの依存性追跡を有効にするには、go mod initコマンドを実行して、あなたのコードが入るモジュールの名前を与えます。この名前はモジュールのモジュールパスです。

実際の開発では、モジュールパスは通常、ソースコードが保存されているリポジトリの場所になります。例えば、モジュールパスは github.com/mymodule となります。他の人が使えるようにモジュールを公開する場合、モジュール・パスはGoツールがモジュールをダウンロードできる場所でなければなりません。モジュールパスによるモジュールの命名の詳細については、依存関係の管理を参照してください。

このチュートリアルでは、example/hello を使用します。

$ go mod init example/hello
go: creating new go.mod: module example/hello
  1. テキストエディタでhello.goというファイルを作り、そこにコードを書く。

  2. 以下のコードをhello.goファイルに貼り付け、ファイルを保存する。

package main

import "fmt"

func main() {
    fmt.Println("Hello, World!")
}

これがあなたのGoコードです。このコードでは

メインパッケージを宣言する(パッケージとは関数をグループ化する方法で、同じディレクトリにあるすべてのファイルで構成される)。
人気のあるfmtパッケージをインポートします。fmtパッケージには、コンソールへの印刷など、テキストをフォーマットする関数が含まれています。このパッケージは、Goをインストールしたときに入手した標準ライブラリパッケージの1つです。
コンソールにメッセージを表示するmain関数を実装します。main パッケージを実行すると、デフォルトで main 関数が実行されます。

  1. あなたのコードを実行すると、挨拶が表示されます。
$ go run .
Hello, World!

コンパイルの実行

コマンドを実行するだけだと

go run hello.go

実行形式ファイルを残したいときは、buildとつける

go build hello.go

コードの解説

// package mainは、実行可能なプログラムを作成するための特別なパッケージ名です。
package main

// import "fmt"は、fmtパッケージをインポートしています。fmtパッケージは、標準入出力を実現するためのパッケージです。
import "fmt"

// func main()は、mainパッケージの中で特別な役割を持つ関数です。この関数は、プログラムの起点となる関数です。
// プログラムの実行時に最初に実行される関数です。

func main() {
	fmt.Println("Hello, World!")
}

公式チュートリアルを試してみる

写経しても効率が悪いので、今のバージョンで使われているコードを動かしてみる。
こちらにサンプルコードがありました
https://gobyexample.com/
昔買った本がありましたが、書いてることは同じなので、コピー&ペーストしながら、コンパイルして学習してみます。文法の仕組みがわかったら、コードを書いたり写経すればいいと思います。

✅公式の解説を翻訳して記載しております

値について学ぶ

Goには、文字列、整数、浮動小数点数、ブーリアンなど、さまざまな値型があります。以下にいくつかの基本的な例を示します。

Goには、文字列、整数、浮動小数点数、ブーリアンなど、さまざまな値型があります。以下にいくつかの基本的な例を示します。

hello.go
package main

import "fmt"

func main() {

    fmt.Println("go" + "lang")

    fmt.Println("1+1 =", 1+1)
    fmt.Println("7.0/3.0 =", 7.0/3.0)

    fmt.Println(true && false)
    fmt.Println(true || false)
    fmt.Println(!true)
}

実行結果

golang
1+1 = 2
7.0/3.0 = 2.3333333333333335
false
true
false

変数について学ぶ

Goでは、変数は明示的に宣言され、コンパイラーが関数呼び出しの型が正しいかどうかをチェックするときなどに使用する。

var は1つ以上の変数を宣言する。

一度に複数の変数を宣言することもできる。

Goは初期化された変数の型を推測します。

対応する初期化なしで宣言された変数はゼロ値です。例えば、intのゼロ値は0です。

例えば、この場合 var f string = "apple" のように、:=構文は変数の宣言と初期化の省略記法です。この構文は関数の中だけで使えます。

hello.go
package main

import "fmt"

func main() {

    var a = "initial"
    fmt.Println(a)

    var b, c int = 1, 2
    fmt.Println(b, c)

    var d = true
    fmt.Println(d)

    var e int
    fmt.Println(e)

    f := "apple"
    fmt.Println(f)
}

実行結果

initial
1 2
true
0
apple

定数について学ぶ

Goは、文字、文字列、ブーリアン、数値の定数をサポートしています。

constは定数値を宣言します。

const文は、var文が使えるところならどこにでも書くことができます。

定数式は、任意の精度で算術演算を行います。

数値定数は、明示的な変換などによって型が与えられるまでは、型を持ちません。

数値は、変数の代入や関数の呼び出しのような、型を必要とするコンテキストで使用することによって型を与えることができます。例えば、ここではmath.Sinはfloat64を想定しています。

hello.go
package main
// mathは数学関数を実装しているパッケージ
import (
    "fmt"
    "math"
)

const s string = "constant"

func main() {
    fmt.Println(s)

    const n = 500000000

    const d = 3e20 / n
    fmt.Println(d)

    fmt.Println(int64(d))

    fmt.Println(math.Sin(n))
}

実行結果

constant
6e+11
600000000000
-0.28470407323754404

最後に

今回は、値、変数と定数を使ってみるのをやってみました。ポインターも理解して、APIを作るところまでいけたらいいなと思って学習してます。

Jboy王国メディア

Discussion