Go 基礎

2023/07/01に公開

ステートメント

<基本構文>

main.go
// main: すべての 実行可能プログラムは main パッケージに含まれる必要がある。
package main

// import: 別のパッケージ内のコードからプログラムにアクセス。
// fmt: 標準ライブラリパッケージ
import "fmt"

// main(): package main 全体で main()関数は1つだけ。
func main() {
    fmt.Println("helo")
}

<スコープ>

Go では、最初の文字が大文字で始まる名前は、外部のパッケージから参照できる(export された)ものです。

sum.go
// 自作したpackage
package calculator

// パッケージの中からしか呼び出せない
var logMessage = "[LOG]"

// どこからでもアクセスできる
var Version = "1.0"

// パッケージの中からしか呼び出せない
func internalSum(number int) int {
  return number - 1
}

// どこからでもアクセスできる
func Sum(number1, number2 int) int {
  return number1 + number2
}

命名規則

  • 変数 : 1 語 かつ 超短い言葉で。i, s, cnf
  • 関数、type、構造体 : キャメルケース。MailLog エクスポートされる場合、頭文字は大文字。

https://zenn.dev/kenghaya/articles/1b88417b1fa44d

パッケージ

Package とは

同じ 1 つの空間に存在するソースコードファイル群のことです。同じ空間とは、同じ package 名が付いている ということ。
このソースコードファイル群は一緒にコンパイルされます
同じ Package 内のソールファイル間では、関数や変数などが共有されます

Module とは

複数の Package の集合体。

<モジュールを作成>

calculator というパッケージを作った場合、モジュールを作成するには、そのコード(ファイル)があるカレントディレクトリで go mod init を実行します。

# go mod init [モジュール名]
go mod init github.com/myuser/calculator

実行すると、下記の go.mod が生成されます。

go.mod
module github.com/myuser/calculator

go 1.16

<作成したモジュールを使う>

main.go
// 自作(calculator)パッケージを使う
import "github.com/myuser/calculator"

func main() {
  total := calculator.Sum(3, 5)
  println(total)
  println("version: ", calculator.Version)
}
  1. 呼び出す側のファイルがあるディレクトリで go mod init を実行する。
go mod init github.com/myuser/calculator
  1. 生成された go.mod ファイルを編集。(追加)
go.mod
module helloworld

go 1.14

+ require github.com/myuser/calculator v0.0.0

+ replace github.com/myuser/calculator => ../calculator

プログラム実行

Go は、main パッケージ内の main 関数からプログラムがスタートします。
(プログラムがスタートする地点のことを、エントリーポイントといいます。)

<実行>

Go ファイルがあるフォルダーに移動し、go runを実行。

go run main.go

# 移動しない場合
go run ./src/helloworld/main.go

run コマンドは、ビルド(go build) + 実行 を行っています。
が、実行ファイル(= バイナリファイル(機械語で書かれたファイル))が残らないので、見た目はインタプリタ言語のように実行できます。

<ビルド>

go build main.go

.\main
# もしくは ./main

ビルドすると、実行したファイルの拡張子がない ver.のファイルが生成されます。
(main.go → main が生成される)
生成された実行ファイルは、.\main./main(こっちは環境による)で実行できます。

<Module の場合>

これまで記載したのはファイル単体を実行するときの話でしたが、Module として実行するときの話をします。

実行

go run の場合

# go.modファイルが存在しているディレクトリで
go run .

go build の場合

# go.modファイルが存在しているディレクトリで
go build
.\sample

https://qiita.com/t-yama-3/items/1b6e7e816aa07884378e

https://blog.framinal.life/entry/2021/04/11/013819

Go Tool

go doc

ドキュメント自動生成ツール。

https://zenn.dev/mkosakana/articles/bb411e9d6b5ad9

Discussion