Skip to main content

[Go] go work와 replace


go work에 대한 이해를 돕기 위해서 간단한 실습을 했습니다.

C:.
| go.work
|
+---mainapp
| go.mod
| main.go
|
\---utils
go.mod
greet.go

위와 같은 폴더 경로를 갖고 있습니다.

utils


utilsgreet.go 내용은 아래와 같습니다.

package utils

func Greet(name string) string {
return "Hello, " + name + "!"
}

간단한 greeting util 입니다.

go mod init github.com/test/utils

mod 이름으로 init을 했습니다.

main


package main

import (
"fmt"

"github.com/test/utils"
)

func main() {
fmt.Println(utils.Greet("Jone"))
}

main.go에서는 Greet을 사용하는 코드가 있습니다.

go mod init github.com/test/mainapp

go work를 사용하지 않으면 위 코드는 에러가 납니다.

go work


아래 처럼 go work를 사용해야 합니다.

.에 올라옵니다. 즉 ls를 하면 mainapputils가 나오는 위치입니다.

이곳에서

go work init
go work use ./mainapp ./utils

를 하면

go 1.22.2

use (
./mainapp
./utils
)

이렇게 만들어집니다.

그러면 위처럼

import (
...
"github.com/test/utils"
)

를 사용할 수 있습니다.

go work를 사용하지 않는다면


cd mainapp
go mod edit -replace github.com/test/utils=../utils
go mod tidy

이렇게 한다면 go work 없이 가능하기도 합니다.