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

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

test1.go

package main

func main() {
    demo()
}

test2.go

package main

import "fmt"

func main() {
}

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

어떻게 호출 demotest2에서 test1?



답변

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

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

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


답변

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

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

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

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


답변

나는 똑같은 것을 찾고 있었다. ” 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")
}


답변

방금 실행 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

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


답변