[import] 사용자 정의 패키지를 사용하는 방법

Go에서 사용자 정의 패키지를 만들고 사용하려고합니다. 아마도 매우 분명한 것이지만 이것에 대한 많은 정보를 찾을 수 없습니다. 기본적 으로이 두 파일은 동일한 폴더에 있습니다.

mylib.go

package mylib

type SomeType struct {

}

main.go

package main

import (
    "mylib"
)

func main() {

}

시도 go run main.go하면이 오류가 발생합니다.

main.go:4:2: import "mylib": cannot find package

go build mylib.go먼저 실행하려고했지만 아무것도하지 않는 것 같습니다 (파일 생성 없음, 오류 메시지 없음). 내가 어떻게 이것을 할 수 있을지 아십니까?



답변

먼저 “Go 코드 작성 방법” 문서 를 읽고 이해하십시오 .

실제 답변은 “사용자 정의 패키지”의 특성에 따라 다릅니다.

일반적인 용도로 사용하려면 소위 “Github 코드 레이아웃”을 사용하십시오 . 기본적으로 라이브러리를 별도의 go get테이블 프로젝트로 만듭니다.

라이브러리가 내부 용인 경우 다음과 같이 갈 수 있습니다.

  1. 라이브러리 파일이있는 디렉토리를 프로젝트의 디렉토리 아래에 두십시오.
  2. 나머지 프로젝트에서 프로젝트가 포함 된 작업 공간의 루트에 상대적인 경로를 사용하여 라이브러리를 참조하십시오.

시연하려면 :

src/
  myproject/
    mylib/
      mylib.go
      ...
    main.go

이제 최상위 레벨 main.go에서 할 수 import "myproject/mylib"있으며 정상적으로 작동합니다.


답변

이런 종류의 폴더 구조의 경우 :

main.go
mylib/
  mylib.go

가장 간단한 방법은 이것을 사용하는 것입니다.

import (
    "./mylib"
)


답변

GitHub에서 호스팅되는 프로젝트의 경우 사람들이 일반적으로 수행하는 작업은 다음과 같습니다.

github.com/
  laike9m/
    myproject/
      mylib/
        mylib.go
        ...
      main.go

mylib.go

package mylib

...

main.go

import "github.com/laike9m/myproject/mylib"

...


답변

나는 경험 많은 프로그래머이지만 Go world에 대한 새로운 경험이 있습니다! Go를 이해하는 데 어려움이 거의 없다고 고백합니다. 하위 폴더에 go 파일을 구성하려고 할 때도 같은 문제에 직면했습니다. 내가 한 방식 :

GO_Directory ($ GOPATH에 지정된 것)

GO_Directory //the one assigned to $GOPATH
__MyProject
_____ main.go
_____ Entites
_____ Fiboo // in my case, fiboo is a database name
_________ Client.go // in my case, Client is a table name

File MyProject \ Entities \ Fiboo \ Client.go에서

package Fiboo

type Client struct{
    ID int
    name string
}

MyProject \ main.go 파일에

package main

import(
    Fiboo "./Entity/Fiboo"
)

var TableClient  Fiboo.Client

func main(){
    TableClient.ID = 1
    TableClient.name = 'Hugo'

    // do your things here
}

(우분투 16.04에서 Go 1.9를 실행 중입니다)

그리고 너희들을 기억해, 나는 이동에 초보자입니다. 내가하고있는 일이 나쁜 습관이라면 알려주세요!


답변

다른 해결책 : $ GOPATH에
추가하십시오 src/myproject.

그런 다음 import "mylib"컴파일합니다.


답변