메인 패키지에 여러 파일이있는 프로젝트를 어떻게“실행”할 수 있습니까?


150

현재 메인 패키지에이라는 단일 파일이 main.go있습니다. main.go코드를 재사용 할 수 없기 때문에 별도의 패키지를 만들지 않고 내용 을 여러 파일로 나누는 방법은 무엇 입니까?

다음과 같은 디렉토리 구조를 원합니다.

$ ls foo

main.go
bar.go

bar.go

package main

import "fmt"

func Bar() {
    fmt.Println("Bar")
}

그런 다음 main.go

package main

func main() {
    Bar()
}

그러나 go run main.go나에게 준다 :

# command-line-arguments
./main.go:4:2: undefined: Bar

답변:


204

2019 년 7 월 26 일 업데이트 (이동> = 1.11)

go run .

원래 답변

위의 코드는 실제로 작동합니다. 문제는 내가 달려야했다.

go run *.go

대신에

go run main.go

6
*_test.go폴더에 없는 한 . 그런 다음 (1) shopt -s ext glob과 (2) 가 필요합니다 go run !(*_test).go.
getWeberForStackExchange

그리고 appengine을 사용하는 사람들은 어떻습니까?
goodies4uall

나는 노력 go run ./cmd/myCmd/...했고 그것은 나를 위해 일했다. _test.go파일 이있을 때 이것이 올바른 방법 일 수 있습니까?
VinGarcia

go run ../your_folder작업 폴더 내부에서 작동합니다
Andy

3
그냥하세요go run .
BarthesSimpson

66

업데이트 년 8 월 2018로 이동 1.11 하는 부분 "실행" 상태 :

go run명령은 이제 단일 가져 오기 경로, 디렉토리 이름 또는 단일 패키지와 일치하는 패턴을 허용합니다.
이것은 go run pkg또는 go run dir가장 중요하게go run .


원래 답변 2015 년 1 월

에서 언급 한 바와 같이 " 어떻게 여러 개의 파일로 구성된 이동 프로그램을 컴파일하려면? ", go run그 이후의 파일 목록 기대 "컴파일을하고 실행 main명명 된 이동 소스 파일을 포함하는 패키지를".
따라서 main패키지를 여러 파일로 분할 할 수 있습니다 go run.

그것은 go build/go install패키지 이름을 기대하는 것과 다릅니다 (파일 이름은 가지 않습니다).
간단 go build하면 부모 폴더의 이름을 딴 실행 파일이 생성됩니다.

이 스레드 에서 설명하는 것처럼 셸은 와일드 카드 확장을 수행하지 않기go run *.go 때문에 Windows CMD 세션에서 작동 하지 않습니다 .


1
runWindows 명령 프롬프트 를 사용하여 여러 go 파일을 실행하기위한 해결 방법이 있습니까?
Luke

1
감사! 이것은 나에게 큰 도움이되었습니다. 왜 같은 패키지이기 때문에 main.go로 코드를 실행할 수 없었는지 궁금해했습니다.하지만 왜 그것을 허용하지 않는지 이해가됩니다.
Chris

5

언급했듯이 go run *.goWindows에서는 스크립트 파일을 나열 할 수 있습니다 (* .go가 작동하지 않기 때문에).go run main.go other.go third.go


네 맞습니다. Windows에서 실행해야 함go run .
KTM

3

내 의견으로는,이 질문에 대한 최선의 답변은 최고 답변에 대한 주석에 숨겨져 있습니다.

이것을 실행하십시오 :

go run .

기본 패키지의 모든 파일이 실행되지만 다음 과 같은 오류 메시지 는 표시 되지 않습니다.

go run: cannot run *_test.go files (main_test.go)

@BarthesSimpson에 대한 명성


0

Windows의 경우 Cygwin을 설치하고 명령 프롬프트 대신 사용하십시오. 그러면 "go run * .go"가 작동합니다.


나는 MinGW를 제안 할 것이지만, 나에게 묻는다면 접근 방식이 옳다. 나는 누군가가 정말로 감정적으로 애착을 가질 수 있는지 의심합니다cmd.exe
Aleksandr Kravets

0

gorilla mux를 사용하여 localhost에서 여러 파일을 실행하려는 경우 최신 버전 (1.11)에 따라 이동하십시오. 다음 두 명령 중 하나를 사용해보십시오.

  1. 설치 && FolderName -port 8081로 이동하십시오.

  2. 빌드 && ./FolderName -port 8081로 이동하십시오.

터미널에서 명령을 실행하기 전에 소스 폴더 (예 : go / src / FolderName)에 있는지 확인하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.