2010-05-21 3 views
5

C++로 프로그래밍 한 이후 오랜 시간이 걸렸지 만 C++에서는 클래스가 .h 파일과 .cpp 파일로 구성되어 있다는 것을 알고 있습니다. 또한 다른 많은 언어들도 조직을 개선하기 위해 코드를 디렉토리 구조 내의 논리적 그룹으로 분리하여 이익을 얻습니다.Go 인터페이스를 구성하는 가장 좋은 방법

글쎄 지금 배우기 위해 노력하고 있습니다. 인터페이스가 왔을 때 Go for C++ Programmers 기사를 읽었습니다. 이 기사에서는 Go의 인터페이스가 본질적으로 클래스 대신 사용되며, 인터페이스를 잘 설정하는 방법을 보여줍니다.

내가 알아 내려고하는 것은 파일에 인터페이스를 어떻게 구성해야합니까? 예를 들어, 구현이 다른 파일에있는 동안 인터페이스가 하나의 파일에 있어야합니까?

myInterface.go

type myInterface interface { 
    get() int 
    set(i int) 
} 


myImplementation.go

type myType struct { i int } 
func (p *myType) set(i int) { p.i = i } 
func (p *myType) get() int { return p.i } 

나는 완전히 나는 아직 일을하고 무엇을 알고하지 않기 때문에 여기에 내 코드가 잘못 될 수있다 (그리고 나는 경우 잘못했다면 나를 바로 잡으십시오.)하지만 이것이 이것을 설정하는 가장 좋은 방법일까요? 임 매우 힘든 시간을 내 머리를 어떻게 주위에 코드를 구성하는 방법을 주위에 래핑하려고하는 데 도움이 어떤 도움을 주셔서 감사합니다!

메트로폴리스

+0

나는 쇼에서 매우 늦다. 그러나 나는 보통 소스 코드 스타일을 따라 간다 : https://golang.org/src –

답변

5

형식과 인터페이스를 별도의 파일에 둘 필요가 없습니다. 각 패키지에서 내 보낸 내용은 중요하며 이름을 대문자로 시작하는 것으로 나타냅니다. C & co. 헤더 파일에 들어가는 것은 그것이 "수입 된"(포함 된) 것이기 때문에 중요합니다. Go에서는 가져온 패키지이며 내용이 다른 소스 파일로 구성되는 방식에 상관 없습니다 (어쨌든 수입업자에게는 보이지 않습니다).

개인적인 권장 사항은 불필요한 파일을 만들지 않는 것입니다. 코드가 상대적으로 짧으면 한 파일에 보관하십시오. 길면 Java 또는 C++에서 인터페이스와 관련된 기능 (예 : 별도의 클래스를 구성하는 등)이 자연 스럽다고 느끼는 부분을 분리 해보십시오. 코드와 정의를 분리하기 위해 아무것도 분리하지 마십시오. C에서라도 Go의 의미는 없습니다.

+0

정보 Arkku에게 감사드립니다. 이 질문을하는 이유는 Go가 기능적 페스트로 변할 것이므로 매우 걱정하기 때문입니다. 내가 다루기 힘들 것이라고 생각하기 때문에 한 페이지에 20 개의 기능을 갖고 싶지 않다. 그러나 다른 한편으로는, Go는 더 많이 그렇게 프로그래밍 될 것입니다. – Metropolis

+0

소스 파일의 길이가 그 내용이 함께있는 한 많은 관심사라고 생각하지 않습니다. Java에서는 한 클래스에있는 모든 것이 그 하나의 파일에 있습니다. 그 클래스에 뭔가가 속해 있다면 문제가되지 않으며 자바에서 가능한 경우 별개의 파일로 임의로 분리하는 것은 매우 혼란 스럽습니다. – Arkku

+0

나는 정말로 내 질문을 다시 말해야한다고 생각한다. 파일이 서로 어떻게 상호 작용할 수 있는지 알 수 있도록 구성된 일종의 Go 파일 구조를 제공 할 수 있습니까? 필자가 지금까지 예제를 통해 본 모든 것은 주요한 함수이고, 같은 파일에서 서로 호출하는 다른 함수들의 묶음이다. 예를 들어보기 좋지만,보다 조직적인 환경에서는 이것이 나쁠 것이라고 생각합니다. – Metropolis

6

의 이동 프로그래밍 언어는 C++이 아니며는 C. 새로운 언어처럼 접근이다. Go에는 헤더 파일이 없습니다. 클래스에 대한 C++ 개념과의 느슨한 연관성 만 있습니다. C + + 프로그래머가 아니기 때문에 Go For C++ Programmers 기사는 무시하십시오.

A Tutorial for the Go Programming Language으로 시작하십시오. 그런 다음 Effective Go을 읽으십시오. The Go Programming Language Specification을 탐색하면 어디에서 볼 수 있는지 알 수 있습니다.

이동은 오픈 소스이므로 가려 그러십시오. package documentationsource code을 참조하십시오.

시작하려면 Go 작성자가 작성한 time 패키지 documentationsource code을 확인하십시오. 인터페이스 선언과 구현을 위해 별도의 파일을 사용하지 않으므로 왜 필요합니까? 자신이 말했듯이, 당신은 아직 무엇을하고 있는지 모르기 때문에 전문가가 제시 한 예를 따라 시작하는 것이 어떻습니까?

Go 프로그래밍 언어를 개발하려는 동기 중 일부는 C보다 우수하고 C++보다 훨씬 단순한 언어를 만들고자하는 욕구에서 비롯되었습니다. Go의 프로 시저 특징 (종종 C와 유사)을 고려하면 결합 및 응집과 같은 절차 적 디자인 개념이 유용합니다. 이러한 개념은 Go time 패키지를 여러 소스 파일로 파티셔닝 할 때 분명합니다. 일부 클래스 디자인 개념도 유용 할 것이지만 Go는 상속을 지원하지 않는다는 것을 기억하십시오.

Nicklaus Wirth는 자신의 고전적인 논문 인 Stepwise Refinement의 프로그램 개발에서 초기 초안은 거의 이상적이지 않으며 때로는 어리석은 경우도 있음을 지적했습니다. 최종 버전조차 거의 완벽한 것은 아닙니다. 예를 들어 Go 작성자는 불과 몇 달 후에 Go json 패키지를 다시 작성했습니다.

Go 프로그래밍 언어의 디자인과 구현은 많은 작은 기능의 사용에 도움이됩니다. 간결한 솔루션을 선호합니다.물론 많은 기능이 패키지 외부에 노출되지 않습니다. 기능의 크기 나 수에 대한 임의의 제한은 거의 모든 언어에서 작동합니다.

go 프로그램은 패키지를 함께 연결하여 구성됩니다. 패키지 은 패키지에 속한 유형, 변수 및 함수 을 함께 선언하고 동일한 패키지의 모든 파일에서 액세스 할 수있는 인 하나 이상의 소스 파일로 구성됩니다. 이러한 요소는 으로 내보내지고 다른 패키지에서 사용될 수 있습니다. Packages, The Go Programming Language Specification.

첫 번째 Go 패키지에는 무엇을할까요? 대답 할 수있는 구체적인 질문을하고 세부 사항을 제공하십시오.

+0

나는 그것이 C++이나 C라고 말하지 않았다. 나는 헤더 파일에 동등한 가치가 없다는 것을 안다. C++ 개념과의 느슨한 연관성 ... 제 질문은 "Go에서 인터페이스/코드를 구성하는 가장 좋은 방법은 무엇입니까?" – Metropolis

+0

단순히 C++ 헤더 파일을 사용하여 기사를 비교 한 결과와 비교할 수있었습니다. – Metropolis

+0

피터 (Peter)에 대한 추가 정보를 제공해 주셔서 감사합니다. 내 물건 (수업) 지향 사고 방식을 다른 것으로 바꿀 수있는 방법을 찾아야 할 필요가 있다고 생각합니다. 그리고 나는 그것이 매우 부주의하게 나올까 봐 걱정합니다. 나는 실수 한 코드를 작성하는 것을 싫어합니다. 우리 중 많은 분이 확실히 ... – Metropolis

관련 문제