>

내가 정의한 구조체의 공개 메소드를 볼 수 없습니다. 누군가 제게 왜 이해할 수 있습니까? 코드는 다음과 같습니다.

// DataSaver.go :

package DataStorage
import (
   "fmt"
   "os"
)
type DataSaver struct {
   // doesn't relevant to my question
   fileName string
   file     *os.File
}
func PrintStr() {
   fmt.Println("hello")
}

그러면 다른 클래스의 주요 메소드가 있습니다. 구조체를 초기화하고 PrintStr () 함수를 호출하고 싶었습니다. 그러나이 방법을 호출 할 수 없습니다. 왜?

감사합니다!

  • 답변 # 1

    이것은 방법이 아니라 단지 기능 일뿐입니다.

    DataStorage 가져 오기 (소문자로 만들어야 함) 그런 다음 DataStorage.PrintStr ()을 호출 할 수 있습니다.

  • 답변 # 2

    이 문제에 대해 놀았으며주의해야 할 몇 가지 사항이 있습니다.

    <올>

    예 : GOPATH와 관련하여 패키지를 올바르게 가져와야합니다 (예 :

    ).

    가져 오기 "github.com/some-repo/datastorage"

    패키지/저장소가 GOPATH와 올바른 디렉토리에 있는지 확인하십시오 (이 작업을 수행하는 방법에 대해 매우 까다 롭습니다)

    패키지 이름을 사용하여 함수를 참조하십시오 :

    펑크 메인 () {     DataStorage.PrintStr () }

    다른 포스터는 올바른 규칙이 패키지 이름을 소문자로 유지한다는 점에서 정확합니다.

  • 답변 # 3

    아직 메소드 수신자 개념이없는 것 같습니다. 구조체의 메소드는 다음과 같이 정의해야합니다 :

    func (this DataSaver)PrintStr() {
       fmt.Println("hello")
    }
    
    
    

    또는

    func (this *DataSaver)PrintStr() {
       fmt.Println("hello")
    }
    
    

    선택하는 것은 포인터로 메소드를 호출 할 것인지 아닌지에 달려있다;

  • 이전 java - 스프링 툴 스위트와 MySQL을 연결할 수 없습니까?
  • 다음 excel - 불규칙하고 일관되지 않은 데이터에서 행을 열로 변환