GitLab Privateリポジトリより go get してみる

自分が作成したGitLabリポジトリより go get する方法をメモ

実行環境

GitLabリポジトリ作成

  • https://gitlab.com/へログインし、プロジェクトを作成
  • Visiblity Level を [Private]に設定
  • 今回は、ProjectName を "go-package"とする gitlab プロジェクト作成

今回go get する自作パッケージを配置

  • リポジトリよりクローン
  • go mod init XXXX でgo.mod を生成
  • mathディレクトリ内に、自作"math"パッケージを作成
    • mathパッケージは平均を返す関数"Average"のみ実装
$ git clone https://gitlab.com/xxxxxx/go-package.git
$ cd go-package.git
$ go mod init gitlab.com/xxxxx/go-package # 自分のリポジトリに合わせて編集する
# /go-package/go.mod

module gitlab.com/xxxxx/go-package

go 1.15
# /go-package/math/math.go

package math

// Average 平均値を返す
func Average(s []int) int {
    total := 0
    for _, v := range s {
        total += v
    }
    return int(total / len(s))
}
# ディレクトリ構成
go-package
│  go.mod
└─math
  └─math.go

AccessToken作成

go get でインストール

確認のため適当なプロジェクト作成

$ mkdir goproject
$ cd goproject
$ go mod init main

AccessToken登録

  • ~/.netrcを作成
    • GITLAB_USERNAME: GitLabにログインしているユーザ名
    • ACCESS_TOKEN: 先ほど作成したAccessToken
# ~/.netrc

machine gitlab.com
  login GITLAB_USERNAME@gitlab.com
  password ACCESS_TOKEN

環境変数 設定

$ set GOPRIATE=gitlab.com/xxxxxx/go-package

いざ、go get

  • イントールされたファイルは、$GOPATH\pkg\mod\gitlab.com\xxxxxx\go-package@v0.0.0 に配置される
$ go get gitlab.com/xxxxx/go-package
# /goproject/go.mod

module main

go 1.15

require gitlab.com/xxxxxx/go-package v0.0.0 // indirect

プロジェクトへインポート

  • 適当なgoファイルmain.goを作成し、自作パッケージをインポート
  • math/Average関数を実行し、平均値計算結果が出力される
# main.go

package main

import (
    "fmt"

        // インポート
    "gitlab.com/xxxxxx/go-package/math"
)

func main() {
    fmt.Println(math.Average([]int{1, 2, 3}))
}
# 結果
2

GOPRIVATEを設定しなかった場合

  • 503 Service Unavailable エラーが返ってくる
go get gitlab.com/xxxxxx/go-package: unrecognized import path "gitlab.com/xxxxxx": reading https://gitlab.com/xxxxxx?go-get=1: 503 Service Unavailable