Rust의 모듈 시스템은 mod 키워드를 중심으로 구성됩니다. 모듈은 코드의 논리적 분할을 파일과 네임스페이스로 허용합니다. 주요 사항:
pub는 모듈 트리 전체에 대해 요소를 공개합니다.pub(crate)는 전체 crate(즉, 라이브러리/프로젝트)에서 사용할 수 있습니다.use mod_name::item)와 별칭들.대규모 프로젝트의 경우, 공개 인터페이스를 lib.rs 또는 main.rs를 통해서만 설명하고 나머지는 비공개로 유지하는 모듈 트리를 사용하는 것이 좋습니다:
mod network; mod storage; pub use network::api;
구조체가 pub으로 선언되었다면 다른 crate에서 접근할 수 있습니까?
답변: 아니오, 구조체를 pub으로 표시하는 것만으로는 충분하지 않습니다. 외부 crate에 공개된 모듈에서 선언되어야 하고 (pub mod), 구조체의 필드도 public이어야 직접 접근할 수 있습니다.
예:
mod foo { pub struct Bar; } // Bar는 foo가 private이므로 crate 외부에서 볼 수 없습니다.
이야기
이야기
use *를 무분별하게 사용할 때 컴파일 단계에서 이름 충돌이 발생했습니다. 해결책은 별칭을 추가하고 필요한 요소만 임포트하는 것이었습니다.이야기
많은 초보자가 구조체를 pub으로 만들지만 필드를 private로 남겨두어 모듈 외부에서 초기화할 수 없게 됩니다. 결과적으로 다른 모듈의 함수가 구조체를 직접 생성할 수 없어 오류가 발생하고, 필드나 생성자를 공개로 수정할 때까지 오류가 발생했습니다.