Go 언어로 다른 파일에서 함수를 호출하는 방법은 무엇입니까?


109

go lang의 다른 파일에서 함수를 호출하고 싶습니다.

test1.go

package main

func main() {
    demo()
}

test2.go

package main

import "fmt"

func main() {
}

func demo() {
    fmt.Println("HI")
}

어떻게 호출 demotest2에서 test1?


무슨 뜻 go fmt입니까? 터미널에서 또는 뭐? 그가 어떤 것에 대해 관심이 있다는 것을 어떻게 보여줄까요?
Charlie Parker

답변:


78

main패키지에 둘 이상을 포함 할 수 없습니다 .

더 일반적으로 패키지에 주어진 이름을 가진 함수를 두 개 이상 가질 수 없습니다.

mainin을 제거하고 test2.go응용 프로그램을 컴파일하십시오. 이 demo기능은에서 ​​볼 수 있습니다 test1.go.


1
maintest2.go에서 제거한 후 빌드하고 실행할 수 있지만 go run test1.go여전히 사용하여 test1.go를 실행하지 못했습니다 . 왜 ?
Jeff Li

87
go run test1.go test2.go
Rich Churcher 2013-01-05

2
@RichChurcher, 당신은 대답을주었습니다. 감사 . 또한 대문자해야 데모 () , 공공 기능은 위 규칙에 따라 맡았다된다
레이몬드 Chenon

test2에 구조체가 있으면 가져 오겠습니까?
Angger

@RaymondChenon 대문자는 함수가 다른 패키지에서 사용되어야하는 경우에만 필요합니다. 이 경우 두 파일이 동일한 패키지 'main'에 있으므로 '내 보내지 않은'(개인 읽기) 기능에도 액세스 할 수 있습니다. tour.golang.org/basics/3
만나기

50

Go Lang은 기본적으로 언급 된 파일 만 빌드 / 실행합니다. 모든 파일을 링크하려면 실행하는 동안 모든 파일의 이름을 지정해야합니다.

아래 두 명령 중 하나를 실행하십시오.

$go run test1.go test2.go. //order of file doesn't matter
$go run *.go

빌드하려면 비슷한 작업을 수행해야합니다.


38

나는 똑같은 것을 찾고 있었다. " test1에서 test2의 demo를 호출하는 방법 "이라는 질문에 대답하려면 다음과 같이하십시오 . 이 코드를 go run test1.go명령으로 실행하십시오 . current_folder 를 test1.go가있는 폴더 로 변경합니다 .

test1.go

package main

import (
    L "./lib"
)

func main() {
    L.Demo()
}

lib \ test2.go

test2.go 파일을 하위 폴더에 넣기 lib

package lib

import "fmt"

// This func must be Exported, Capitalized, and comment added.
func Demo() {
    fmt.Println("HI")
}

5
메서드 이름이 대문자인지 확인하십시오. 그렇지 않으면 작동하지 않습니다.
Max

1
귀하의 솔루션에 감사드립니다. 그것은 저를 크게 도왔습니다! :)
jenkizenki

죄송하지만이 명확하게 작동하지 않습니다 :package lib; expected main
Madeo

0

방금 실행 go run test1.go하고 해당 파일에 동일한 패키지 내 다른 파일의 함수에 대한 참조가있는 경우 Go에 전체 패키지를 실행하라고 지시하지 않았으므로 해당 파일 하나만 실행하도록 지시했기 때문에 오류가 발생합니다.

여러 가지 방법으로 명령 된 실행에서 파일을 패키지로 그룹화하여 go가 전체 패키지로 실행되도록 할 수 있습니다. 다음은 몇 가지 예입니다 (터미널이 패키지의 디렉토리에있는 경우).

go run ./

또는

go run test1.go test2.go

또는

go run *.go

빌드 명령을 사용하여 동일한 동작을 기대할 수 있으며 생성 된 실행 파일을 실행 한 후에는 파일이 서로 기능 등에 대해 알고있는 그룹화 된 패키지로 실행됩니다. 예 :

go build ./

또는

go build test1.go test2.go

또는

go build *.go

그런 다음 명령 줄에서 실행 파일을 호출하기 만하면 모든 파일을 전체 패키지로 함께 실행할 때 실행 명령을 사용하는 것과 유사한 출력이 제공됩니다. 전의:

./test1

또는 실행 파일이 생성 될 때 호출되는 파일 이름이 무엇이든 상관 없습니다.

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