k01ken’s b10g

He110 W0r1d!

Goで自作のコードを外部ファイルとして読み込み、使用する

開発環境は、Windows10 Professional(64bit) + Go go1.15.3 windows/amd64

Goで、コードを分割して、外部ファイルとして読み込む場合は、パッケージを作って、そこから、読み込む形にするようです。

1.以下のコマンドを入力して、Cドライブ直下でgosampleディレクトリを作成し、カレントディレクトリにする

mkdir gosample && cd gosample

2.以下のコマンドを入力して、go.modを作成する

go mod init

3.サンプルとして、粗雑ですが、以下のコードを作成し、main.goという名前で保存し、実行します。

package main

import "fmt"

const TAX = 1.10

type Person struct{
  Name string
  Age int
}

func Add(a int, b int) int{
  return a + b
}

func main(){
  p1 := Person{Name: "Go太郎", Age: 10}
  fmt.Println(p1.Name, p1.Age)
  fmt.Println(Add(3,5))
  fmt.Println(TAX)
}
go run main.go

実行結果
f:id:k01ken:20201216144638p:plain

今度は、これをバラバラにして、外部パッケージとして読み込みます。
ディレクトリ構成としては以下の様になります。

gosample
  ┗main.go
    ┗mypkg
      ┗func.go
      ┗struct.go
      ┗const.go

4.以下のコマンドを入力して、カレントディレクトリに、mypkgディレクトリを作成します。

mkdir mypkg

5.mypkg以下に、3つのファイルを作成します。外部から、読み込む場合、定数名、関数名、構造体名、構造体のメンバ名などの頭文字は大文字しなければいけません。

以下のコードを、struct.goという名前で保存

package mypkg

type Person struct{
  Name string
  Age int
}

以下のコードを、const.goという名前で保存

package mypkg

const TAX = 1.10

以下のコードを、func.goという名前で保存

package mypkg

func Add(a int, b int) int{
  return a + b
}

6. main.goを以下のように書き換えて、実行します

package main

import(
  "gosample/mypkg"
  "fmt"
)


func main(){
  p1 := mypkg.Person{Name: "Go太郎", Age: 10}
  fmt.Println(p1.Name, p1.Age)
  fmt.Println(mypkg.Add(3,5))
  fmt.Println(mypkg.TAX)
}
go run main.go

実行結果
f:id:k01ken:20201216145625p:plain

ファイルを分割しても、同じ結果が表示されました。
一応、mypkgディレクトリ内の、関数がある、func.goのテストコードを書いておきます。

7.以下のコードをmypkgディレクトリ内に、func_test.goという名前で保存します

package mypkg

import "testing"

func TestAdd(t *testing.T){
  if Add(5, 5) != 10{
    t.Fatal("failed test")
  }
}

8.カレントディレクトリを、mypkgにして、以下のコマンドを入力して、テスト開始。

go test

実行結果
f:id:k01ken:20201216154148p:plain

9.最後にGitHubに今回のコードをアップしておきます
Git Bashを開いて、以下のコマンドを一行ずつ入力します。

cd c:\gosample
git init .
git add -A
git commit -m "first commit"
git branch -M main
git remote add origin https://github.com/koidekenta/gosample1.git
git push -u origin main

pushしたURLが以下になります。
github.com


■参考リンク
Golangのpackage/importについて+簡単なtestコードを書いてみる - Qiita