Go 언어를 배운 기념으로 사칙연산기를 만들어보겠습니다.
Go 언어에 익숙해지기 위한 프로젝트입니다.!
프로그램 대략적 요구사항
1. 사칙연산이 가능해야 한다.
2. 오래 걸리는 연산은 비동기적으로 진행하게끔 한다
3. Command Line 인터페이스가 존재해야 한다.
프로그램 세부 요구사항
1. 사칙연산이 가능해야 한다.
- 1-1. 예외처리가 확실해야 한다.
- 1-1-1. Divide by Zero, Overflow, FPE, input 예외 처리.
2. 오래 걸리는 연산은 비동기적으로 진행하게끔 한다.
- 2-1. 모든 연산은 goroutine으로 진행합니다. 연산 완료 시 stdout에 n 번째 연산 완료 및 완료값을 출력합니다.
- 연산 속도 향상 및 goroutine 분기 기준을 세우기 위해 후위 표기식으로 입력받은 연산식을 중위 표기식으로 변환합니다.
- 곱셈(*) 혹은 나눗셈(/) 연산이 3번 이상 나오면 goroutine으로 해당 연산의 앞과 뒤를 나눠 병렬처리하도록 해보겠습니다.
- 연산 속도 향상 및 goroutine 분기 기준을 세우기 위해 후위 표기식으로 입력받은 연산식을 중위 표기식으로 변환합니다.
3. Command Line 인터페이스가 존재해야 한다.
- 랜딩 화면 구성
- 아스키 아트
- 1. 사칙연산하기(+, -, *, /)
- 2. 이전 기록 불러오기(연산 식, 결과)
- 이전 기록은 파일형태로 저장합니다.
- 연산 완료 후 해당 파일에 기록할 때 여러 goroutine이 동시에 접근해 수정하지 못하도록 mutual exclusion을 만들어야 합니다. mutex를 사용합니다.
- 3. 만든 사람 정보 출력하기
- 4. 종료...
프로젝트 구조
레이아웃에 얽매이면 go를 통한
자유로운 코딩을 해칠 수 있기 때문에,
입문자들에게 공식적인 프로젝트 구조를 강요하지 않아
go에는 공식적인 프로젝트 구조가 존재하지 않습니다.
그러나 많은 개발자들에 의해 합의된 레이아웃이 존재합니다.
아래 링크에 합의된 (거의)표준이 존재합니다.
project-layout/README_ko.md at master · golang-standards/project-layout
Standard Go Project Layout. Contribute to golang-standards/project-layout development by creating an account on GitHub.
github.com
저는 위 표준을 따라 프로젝트 구조를 짜보겠습니다.
go_cal
| README.md
|
+---cmd
| | README.md
| |
|
+---internal
| | README.md
| |
| +---command-line-UI
| +---exception-handler
| +---operation
| \---synchronous
\---pkg
README.md
프로젝트 소스코드는 아래 깃허브 레포지토리에 존재합니다.
GitHub - gyeo009/go-cal: 내맘대로 구현하는 go 계산기
내맘대로 구현하는 go 계산기. Contribute to gyeo009/go-cal development by creating an account on GitHub.
github.com
'프로그래밍 언어 > Go' 카테고리의 다른 글
[Go] Testing package를 이용한 Test 및 Benchmark (0) | 2024.10.05 |
---|---|
[Go] 네트워크 프로그래밍 (0) | 2024.10.04 |
[Go] 내 맘대로 계산기 프로그램 만들기 [2] - 사칙연산 및 소요시간 테스트 (1) | 2024.10.04 |
[Go] 내맘대로 계산기 프로그램 만들기 [1] - ASCII ART (0) | 2024.10.04 |
[Go] Visual Studio Code 로 디버깅할 때 (1) | 2024.10.03 |