홈>
내가 정의한 구조체의 공개 메소드를 볼 수 없습니다. 누군가 제게 왜 이해할 수 있습니까? 코드는 다음과 같습니다.
// 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
- 답변 # 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") }
선택하는 것은 포인터로 메소드를 호출 할 것인지 아닌지에 달려있다;
관련 자료
- reactjs - 효과 사용은 두 기능을 모두 반환하지 않습니다
- erlang - is_dir 및 filelib : is_regular 함수가 공백이 포함 된 파일 및 폴더에서 제대로 작동하지 않는 이유는 무엇입니까?
- json - golang - struct 내의 struct가 존재하는지 확인
- go - golang 구조체에서 중첩 배열을 사용하는 방법은 무엇입니까?
- c++ - 2 개 이상의 요소가있는 경우 구조 함수가 예상대로 작동하지 않습니다
- go - 구조 값은 for 루프 범위로 변경되지 않습니다
- go - Golang의 yml 파일에 구조체 내용 쓰기
- c++ - ADL이 네임 스페이스 외부에 정의 된 함수에서 작동하지 않는 이유는 무엇입니까?
- javascript - 테스트 기능이 제대로 작동하지 않습니다
- go - Golang은 구조체 포인터를 직접 만드는 대신 New ()를 사용하여 구조체 포인터를 반환합니다
- C # 테스트 목적으로 만 창 형태의 이벤트 관련 개인 기능을 공개해야합니까?
- c++ - 클래스 내에 정의 된 "public"구조체에 액세스
- go - 골랑의 구조체 슬라이스에 추가
트렌드
- OpenCv의 폴더에서 여러 이미지 읽기 (python)
- 파이썬 셀레늄 모든 "href"속성 가져 오기
- html - 자바 스크립트 - 클릭 후 변경 버튼 텍스트 변경
- javascript - 현재 URL에서 특정 div 만 새로 고침/새로 고침
- JSP에 대한 클래스를 컴파일 할 수 없습니다
- JavaScript 변수를 HTML div에 '출력'하는 방법
- git commit - 자식 - 로컬 커밋 된 파일에 대한 변경을 취소하는 방법
- jquery - JavaScript로 현재 세션 값을 얻으시겠습니까?
- javascript - swiperjs에서 정지, 재생 버튼 추가
- python - 화면에서 찾은 요소를 찾을 수없는 경우 셀레늄
이것은 방법이 아니라 단지 기능 일뿐입니다.
DataStorage 가져 오기 (소문자로 만들어야 함) 그런 다음 DataStorage.PrintStr ()을 호출 할 수 있습니다.