์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ™œ์„ฑํ™” ํ•ด์ฃผ์„ธ์š”

d095 goland project snippet

 ·   ·  โ˜• 3 min read

d031-codewars-golang-๋ฌธ์ œ-ํ’€๊ธฐ-์œ„ํ•œ-goland-์„ค์ •๋ฐฉ๋ฒ• ์—์„œ goland ํ”„๋กœ์ ํŠธ๋ฅผ ๋นจ๋ฆฌ ๋งŒ๋“œ๋Š” ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž‘์„ฑํ–ˆ๋˜ ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ•„์š”ํ•œ ์ผ์ด ์žˆ์–ด ์‚ฌ์šฉํ•ด ๋ณด๋ ค๊ณ  ํ•˜๋‹ˆ, ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์•„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ˆ˜์ •์Šต๋‹ˆ๋‹ค.

์ด ์Šคํฌ๋ฆฝํŠธ์˜ ๋ชฉ์ ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฐ„๋‹จํ•œ ํ”„๋กœ์ ํŠธ๋ฅผ ๋นจ๋ฆฌ ๋งŒ๋“œ๋Š” ๋ฐ์— ์žˆ์Šต๋‹ˆ๋‹ค.

d095_simple_goland_template.png

go module์„ ์‚ฌ์šฉํ•˜๋Š๋ƒ ์•„๋‹ˆ๋ƒ์— ๋”ฐ๋ผ ์„ค์ • ๋ฐฉ๋ฒ•์€ ๋‘ ๊ฐ€์ง€ ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

go module์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ฒ„์ „

ํ™˜๊ฒฝ๋ณ€์ˆ˜ go111module์„ off๋กœ ํ•ด์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค.
ํ•จ์ˆ˜๋Š” ๋‘ ๊ฐœ๋ฅผ ์ค€๋น„ํ•ฉ๋‹ˆ๋‹ค.

  • New-TemporaryFolder
  • codewar-go

codewar-go ํ•จ์ˆ˜๋Š” ํ…œํ”„ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๋งŒ๋“œ๋Š” ๋™์ž‘ ํ•˜๋‚˜์™€, ํ•„์š”ํ•œ ํ™”์ผ์„ ๋งŒ๋“œ๋Š” ํ•จ์ˆ˜ ์ž…๋‹ˆ๋‹ค. ํ•„์š”ํ•œ ํŒŒ์ผ์€ ์ปค์Šคํ…€ ํŒจํ‚ค์ง€์šฉ ํŒŒ์ผ์ด ํ•˜๋‚˜, ๊ทธ๋ฆฌ๊ณ  main ํŒจํ‚ค์ง€ ํŒŒ์ผ์ด ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
Function New-TemporaryFolder {
    # Make a new folder based upon a TempFileName
    $T="$($Env:temp)\tmp$([convert]::tostring((get-random 65535),16).padleft(4,'0')).tmp"
    $d = New-Item -ItemType Directory -Path $T
    return $d.FullName
}


function codewar-go {
    # $env:LC_ALL='C.UTF-8'
    # $PSDefaultParameterValues['*:Encoding'] = 'utf8'
    $PSDefaultParameterValues['*:Encoding'] = 'ascii'

    $temp_dir = New-TemporaryFolder
    cd $temp_dir

    mkdir kata

@"
package kata
func Summation(n int) int {
    // the sleeper must awaken!
    return 0
}
"@ > kata\kata.go

@"
package main

import (
	"fmt"
	"strconv"
	"./kata"
)

func main() {
	fmt.Printf("hello world")
	fmt.Printf(strconv.Itoa(kata.Summation(1)))
}
"@ > main.go

    # $env:GOPATH = "$(pwd)" # this occurs $GOPATH/go.mod exists but should not
    # $env:GO111MODULE = "on"
    $env:go111module="off"

    goland .
}

goland์•ˆ์—์„œ๋Š” ์„ค์ •์„ ํ•˜๋‚˜ ๋” ํ•ด์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค. go module์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ฒ ๋‹ค๊ณ  ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด์ฃ .

d095_goland_turn_off_go_module.png

go module์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฒ„์ „

ํ™˜๊ฒฝ๋ณ€์ˆ˜ go111module๋Š” ๋””ํดํŠธ๊ฐ€ on ์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ฑด๋“ค์ง€ ์•Š์•„๋„ ๋ฉ๋‹ˆ๋‹ค. ๋Œ€์‹ ์— go.mod ํŒŒ์ผ์„ ๋งŒ๋“ค์–ด์•ผ ํ•ด์š”.

ํ™˜๊ฒฝ๋ณ€์ˆ˜ $env:GO111MODULE ์›๋ž˜์˜ ์„ค์ •๋Œ€๋กœ ๋‘๊ฑฐ๋‚˜, on ์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค.

mainํ•จ์ˆ˜์—์„œ importํ•˜๋Š” ๋ฐฉ์‹์ด, module์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ฒ„์ „๊ณผ ์กฐ๊ธˆ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
Function New-TemporaryFolder {
    # Make a new folder based upon a TempFileName
    $T="$($Env:temp)\tmp$([convert]::tostring((get-random 65535),16).padleft(4,'0')).tmp"
    $d = New-Item -ItemType Directory -Path $T
    return $d.FullName
}

function codewar-go {
    # $env:LC_ALL='C.UTF-8'
    # $PSDefaultParameterValues['*:Encoding'] = 'utf8'
    $PSDefaultParameterValues['*:Encoding'] = 'ascii'

    $temp_dir = New-TemporaryFolder
    cd $temp_dir

    mkdir kata

@"
package kata
func Summation(n int) int {
    // the sleeper must awaken!
    return 0
}
"@ > kata\kata.go

@"
module main

go 1.17

replace main/kata => ./kata
"@ > go.mod


@"
package main

import (
	"fmt"
	"strconv"
	"main/kata"
)

func main() {
	fmt.Printf("hello world")
	fmt.Printf(strconv.Itoa(kata.Summation(1)))
}
"@ > main.go

    # $env:GOPATH = "$(pwd)" # this occurs $GOPATH/go.mod exists but should not
    $env:GO111MODULE = "on"

    goland .
}

์ด ์„ค์ •์€ go.mod๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์„ค์ •์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ, go.modsms GOPATH์— ์กด์žฌํ•ด์„œ๋Š” ์•ˆ๋˜๋Š” ๊ทœ์น™์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ goland์—์„œ๋Š” ํ”„๋กœ์ ํŠธ ํด๋”๋ฅผ GOPATH๋กœ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๋””ํดํŠธ GOPATH๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์„ค์ •์€ ์•„๋ž˜์™€ ๊ฐ™์€ ํ™”๋ฉด์—์„œ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

d095_goland_using_go_module.png

์ด ์„ค์ •์€ ๋„ˆ๋ฌด ๊ฐ„๋‹จํ•ด์„œ ์™ธ๋ถ€ ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค๋งŒ, ์‚ฌ์šฉํ•œ๋‹ค๋ฉด direct๋กœ ์„ค์ •ํ•ด ์ค๋‹ˆ๋‹ค.

ํ„ฐ๋ฏธ๋„์—์„œ ๋นŒ๋“œํ•˜๋ ค๋ฉด, ์—ญ์‹œ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ํ™˜๊ฒฝ๋ณ€์ˆ˜์˜ GOPATH๋ฅผ ๋””ํดํŠธ๋กœ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

1
$env:gopath="$env:USERPROFILE\go"

d095_goland_using_go_module_terminal_build.png

๋ค์œผ๋กœ Makefile์— ๋Œ€ํ•œ snippet๋„ ์ ์–ด๋‘ก๋‹ˆ๋‹ค.

@"
.DEFAULT_GOAL := build

fmt:
	go fmt ./...
.PHONY:fmt

lint: fmt
	golint ./...
.PHONY:lint

vet: fmt
	go vet ./...
.PHONY:vet

build: vet
	go build main.go
.PHONY:build
"@ > Makefile
๊ณต์œ ํ•˜๊ธฐ

tkim
๊ธ€์“ด์ด
tkim
Software Engineer