본문 바로가기

코딩(Coding)

Golang, Fyne 및 MongoDB를 사용하여 CRUD 데스크톱 앱을 만드는 방법

반응형

Golang, Fyne 및 MongoDB를 사용하여 CRUD 데스크톱 앱을 만드는 방법

 

다음은 Go 언어, Fyne GUI 툴킷 및 MongoDB 데이터베이스 서버를 사용하여 CRUD 작업이 가능한 데이터 입력 데스크톱 앱을 만드는 방법을 보여주는 예입니다.

Unsplash에 있는 Leif Christoph Gottwald의 사진

이 기사에서는 연락처 정보를 입력, 확인, 업데이트 및 삭제할 수 있는 작은 데스크톱 앱을 만드는 방법을 보여 드리겠습니다. 이 앱을 Go 언어(Golang)로 프로그래밍하고 Fyne GUI 툴킷을 사용하여 사용자 인터페이스를 만듭니다. 연락처 정보는 MongoDB 데이터베이스 컬렉션에 저장됩니다.

또한 이 기사는 Fyne 및 MongoDB에 대한 이전 기사의 연속입니다. 해당 기사에 설명된 개념과 몇 가지 새로운 아이디어를 볼 수 있습니다. 이 기사의 개념을 따르는 데 어려움이 있다면 이전 내용을 먼저 읽어보는 것이 좋습니다.

이 기사는 Go 언어에 대한 탐색을 기반으로 한 결론에서 비롯된 것입니다.

Go용 Fyne 패키지와 MongoDB 드라이버를 설치했는지 확인하십시오. Fyne을 사용하는 Go 프로그램을 빌드하려면 GCC도 설치해야 합니다. 또한 MongoDB 서버가 설치되어 있어야 합니다.

설치하는 것도 도움이 되었어요 몽고DB 나침반 문제 해결을 위한 앱.

데스크톱 앱에 저장하려는 연락처를 나타내는 데이터 구조가 필요합니다.

이것은 본질적으로 일반 구조체이지만 BSON에 대한 주석이 추가되었습니다. BSON은 MongoDB에서 사용하는 JSON의 바이너리 버전입니다. BSON 주석이 있는 구조체 사용에 대한 자세한 내용은 여기를 참조하세요.

2행에서 우리는 이라는 특정 속성을 생성합니다. ID 고유 식별자를 보유합니다 _id 문서를 생성하고 컬렉션에 삽입할 때 MongoDB에서 제공합니다. 따라서 BSON 주석에 이 키를 추가했습니다. 우리는 또한 재산을 제공했습니다 ID 유형으로 primitive.ObjectID. 이것은 MongoDB 식별자에 대해 정의된 특정 유형입니다.

BSON 사용에 대한 자세한 내용은 여기를 읽으십시오.

CRUD 함수 중 적어도 하나는 여러 번 호출해야 하므로 외부의 개별 함수에서 구현하기로 결정했습니다. main() 프로그램의 기능. 또한 향후 프로그램 재구성이 더 쉬워질 것입니다.

먼저 컨텍스트와 MongoDB 연락처 컬렉션을 '패키지'라는 하나의 데이터 구조로 ContactCollection. 이 구조는 다음을 사용하여 쉽게 만들 수 있습니다. NewContactCollection() 건설자.

그런 다음 4개의 CRUD 기능을 구현합니다.

  • 만들기는 다음과 같이 구현됩니다. CreateContact()
  • 읽기는 다음과 같이 구현됩니다. GetAll()
  • 업데이트는 다음에 의해 구현됩니다. UpdateContact()
  • 삭제는 다음에 의해 구현됩니다. DeleteContact()

이러한 함수는 컨텍스트 및 연락처 컬렉션을 사용하므로 구조체에 이들을 패키징했습니다.

아래에서 해골을 찾을 수 있습니다. main() 기능.

위의 코드 조각에서 일부 부분이 생략되었습니다. 아래의 다른 부제목에서 찾을 수 있습니다.

기본적으로 위의 코드는 화면 중앙에 너비 1000픽셀, 높이 600픽셀의 Fyne 창을 만듭니다. 이 창은 마스터 창으로 설정됩니다. 즉, 이 창이 닫히면 다른 모든 창도 닫힙니다. 이 예에서 이것은 다른 창이 없기 때문에 사실 덜 중요합니다.

또한 다양한 레이아웃 기능에 따라 창의 내용이 설정됩니다. 결과 창이 어떻게 보이는지 아래에서 스크린샷을 찾을 수 있습니다.

위의 스크린샷에는 두 개의 연락처가 추가되었습니다.

MongoDB 클라이언트 설정, 컬렉션 및 모든 문서 가져오기.

3-9행에서 기본 컨텍스트를 생성합니다. context.TODO() 실행 중인 MongoDB 서버에 연결합니다. localhost:27017.

10-12행에서 데이터베이스 서버를 ping하여 연결이 설정되었는지 확인합니다.

13행에서 데이터베이스와의 연결 해제가 지연됩니다. 이것은 연결 해제 문이 다른 모든 명령문 다음에 실행됨을 의미합니다. main() 기능.

17행에서 우리는 contacts 컬렉션 contactdb 데이터 베이스. 이러한 항목이 없으면 작성됩니다.

18행에서, ContactCollection 구조체는 호출된 함수를 사용하여 생성됩니다. NewContactCollection(). 이 구조체는 cc이전 제목에서 설명한 대로 컨텍스트와 컬렉션에 대한 링크를 보유합니다.

20행에서 우리는 GetAll() 데이터베이스 컬렉션에서 모든 연락처를 가져오는 함수입니다. 이러한 연락처는 loadedData 1행에 정의되어 있습니다.

목록 위젯 구현

위의 코드 스니펫에서 list 위젯은 다음을 사용하여 생성됩니다. NewList() 기능. 에 익숙하지 않은 경우 list Fyne의 위젯을 사용하면 설명서를 빠르게 살펴볼 수 있습니다.

2행에서 함수에 대한 첫 번째 인수를 제공합니다. 이 인수는 loadedData 일부분. 기본적으로 이것은 데이터베이스의 연락처 수입니다.

라인 3-13에서 우리는 각 라인의 레이아웃을 생성합니다. list 위젯. 이러한 라인에는 다음과 같은 그래픽 요소(위젯)가 포함됩니다.

  • 상표 위해 이름 특정 연락처의
  • 상표 위해 특정 연락처의
  • 상표 위해 이메일 주소 특정 연락처의
  • 상표 위해 전화 번호 특정 연락처의
  • 단추 ~을 위한 편집 특정 연락처
  • 단추 ~을 위한 삭제 특정 연락처

이러한 요소는 CanvasObject 사용 NewHBox() , NewGridWithColumns() 그리고 NewBorder() 우리가 원하는 위치에 따라. 여기에서 레이아웃에 대해 자세히 알아보세요.

14-105행에서 데이터 loadedData 주어진 연락처에 대해 슬라이스가 추출됩니다(기반 ListItemID) 이전 줄에서 설정한 그래픽 요소에 입력합니다.

17-26행에서 실제 그래픽 요소는 CanvasObject.

28행에서 현재 연락처의 ID를 얻습니다.

30-33행에서 레이블의 텍스트 속성은 현재 연락처의 데이터로 설정됩니다.

35-78행에서 편집 버튼의 기능을 구현합니다. 편집 버튼을 클릭(또는 '탭')하면 대화 상자가 열립니다. 이 대화 상자에는 연락처의 기존 데이터로 필드가 채워진 양식이 포함되어 있습니다.

대화 상자에서 '저장' 버튼을 클릭하면 새 데이터가 Contact 호출된 구조체 contact. 그만큼 contact 로 보내진다 UpdateContact() 데이터베이스가 업데이트되었는지 확인하는 기능입니다.

이 후, loadedData 를 사용하여 업데이트됩니다. GetAll() 그리고 list 위젯이 새로 고쳐집니다.

아래에서 작동 중인 대화 상자의 스크린샷을 볼 수 있습니다.

80-103행에서 삭제 버튼의 기능을 구현합니다. 삭제 버튼을 클릭하면 대화 상자가 열립니다. 이 대화 상자에는 "이 연락처를 삭제하시겠습니까?"라는 질문이 있습니다.

이제 '예' 또는 '아니요'를 클릭할 수 있습니다. '예'를 클릭하면 현재 연락처가 삭제됩니다. 그만큼 contactID 로 보내진다 DeleteContact() 데이터베이스에서 연락처를 삭제하는 기능입니다.

마지막으로, loadedData 를 사용하여 업데이트됩니다. GetAll() 그리고 list 위젯이 새로 고쳐집니다.

아래에서 삭제 대화 상자가 실행되는 스크린샷을 볼 수 있습니다.

'연락처 추가' 버튼 구현

'연락처 추가' 버튼의 기능은 '편집' 버튼과 거의 유사합니다.

'연락처 추가' 버튼을 클릭하면 대화 상자가 열립니다. 이 대화 상자에는 연락처의 네 가지 속성에 대한 빈 필드가 있는 양식이 있습니다.

대화 상자의 '추가' 버튼을 클릭하면 새 데이터가 Contact 호출된 구조체 c. 연락처가 다음으로 전송됩니다. CreateContact() 기능, c 데이터베이스에 추가됩니다.

다시, loadedData 를 사용하여 업데이트됩니다. GetAll() 그리고 list 위젯이 새로 고쳐집니다.

아래에서 이 대화 상자의 스크린샷을 볼 수 있습니다.

반응형