ゆずめも

メモ的なブログです。主に勉強した事について書いてます。

Go Modules時代のimport

最近ちょこちょこGolangを勉強していて、1.13になってデフォルトONになるgo modulesを使った時にimportをどうやるのかわからなくて困ったのでメモ

tl;dr

go.modmodule項目とwikiを見て

github.com

gopath mode

go modulesじゃない時はGOPATHがあったのでimportの時は$GOPATH/srcが見えないけどついてるイメージでプロジェクトがgithub.com/yuzu441/nogiなのであれば

import "github.com/yuzu441/nogi/package"

と書けば指定したパッケージがimportできる

module-aware mode

go modulesを使う設定にするとGOPATHがないのでパッケージ名の指定をどうするのかがわからなかったが、githubwikiを見ていると答えが書いてあった

go modules環境ではgo.modというファイルがあって

これを生成するのにgo mod initというコマンドを使うんだけど、これの後ろにgithub.com/yuzu441/nogiのように指定してやる

go mod init github.com/yuzu441/nogi

するとgo.modファイルの先頭にmodule github.com/yuzu441/nogiのように記述されgopathモードの時と同じようにパッケージを参照できる

なので以下のように実行すると

go mod init yuzu441/nogi

yuzu441/nogiでアクセスできる

import "yuzu441/nogi/package"

のように参照することができる

サンプルコード

go mod init yuzu441/samplego.modを生成したという仮定でのサンプル

// service/calc.go
package service

func Add(x int, y int) int {
    return x + y
}

// main.go
package main

import (
    "strconv"

    "yuzu441/sample/service"
)

func main() {
    result := service.Add(1, 2)
    println("add result: " + strconv.Itoa(result))
}