본문 바로가기

카테고리 없음

go 패키지, import 접근 제어.

처음엔 하나의 파일이었다.

example.go

웹서버를 기반으로 하고 gin-gonic 프레임워크 기반으로 사용했는데
여기에 라우터 붙이고 html 붙이고 json 호출 붙이고 da 붙이고 하다보니 프로그램이 커졌다.
그래서 da호출하는 부분과 기타. 부분을 business_service 라는 패키지로 만드고 분할하려고 했다.

처음 폴더 구조는
c:\stock\goweb\example.go   (main 함수 - main package)
c:\stock\goweb\post-data.go (여타함수   - main package)
c:\stock\goweb\get-html.go  (여타함수   - main package) 
이런느낌이었다.
이걸 자바처럼 폴더를 하나 만들고 패키지를 만들고 싶다.
post-data.go가  디비를 조회하는 da(data-access)와 다이렉트로 화면과 통신하는 business_service 역할을 모두 하고 있다.
그래서 상당히 많은 sql문이 여기에 포함되어있었다.
문득 최근에 회사에서 진행한 프레임워크 처럼  하나의 호출에 대해서 하나의 파일로 있는게 수정에 용이하지 않을 까 라는 생각을 했다.
go 해보니까 어차피 같은 패키지면 하나의 묶음으로 사용되었다.
측 business_service 폴더를 만들고 post-data.go 파일을 함수단위로 여러개로 나누려고 했다.

그래서 첫번째로 business_service 폴더를 만들었다.
그리고 post-data.go 파일을 business_service로 옮겼다. 그리고 package 명을 main에서 business_service로 변경하였다.
자바처럼 이렇게 하고 import에서 business_service를 쓰면 될지 알았다
참고한 소스들에서 이렇게 나왔고 추가적으로 더 보이는건  c#에 있는 aliaise alias 기능이었다.

그런데 실제로 해보니까 오류
패키지를 참조하지 못했다.
그래서 인터넷을 뒤져보니.
패키지를 만들 폴더 까지 이동한 다음에

cd c:\stock\goweb\business_service   
여기서 
go install 
을 하라고 했다.

그래서 했다.
그리고  다시 example.go에서 import가 되는지 보는데 되지 않았다.

그래서 자료를 더 찾아보았는데
GOPATH와 GOROOT에 대한 자료가 나왔다.
지정된 경로를 확인하는 방법은

go env

이런식으로 나왔다.
좀더 찾아보니  GOPATH를 GO프로젝트 위치로 변경하라는 내용이 나왔다. 
프로젝트를 변경할때마다 변경해야한다고 해서 이상해서 
구글을 찾아보았다.

GOROOT는 GO 설치위치로 변경하면 안되고
GOPATH는 환경변수에 멀티로 지정이 가능하다고 되어있었다.

1번은 원래 있었던것이고 2번은 내가 지정해주었다.

이렇게 하면 이제 될줄알았는데 여전히 안되었다.

관련자료를 찾아보니
GO 패키지 시스템에 관한 설명이 있는 웹사이트를 찾았다.
다른 프로그래밍 언어와 달리 GO는 workspace를 공통으로 하나만 사용한다고 했다.
자바를 예를들면 프로젝트 밑에 사용하는 모든  패키지들이 있지만 (또는 라이브러리)
GO는 GOPATH라는 것을 공유해서 사용한다. (즉 멀티가 되는게 맞다.)

다만 패키지를 찾는 경로가 GOPATH를 바로 보는게 아니라 
GOPATH 폴더 밑에 src 폴더 밑에 부터 검색하기 시작한다는 내용이었다.
그래서 폴더를 이동하였다.

c:\stock\goweb\src\business_service\post-data.go

이렇게 하고

c:\stock\goweb\src\business_service
이동
go install 
완료 
c:\stock\goweb
이동
go install business_service
완료

를 해주었다.
이렇게 하니까 프로그램에서 패키지를 찾을 수 있었다.
그런데 이제 끝난줄 알았는데  함수를 가져다 쓸수없었다.

또 검색을 했다.

GO 접근제어에 대한 내용이 있었다.
즉 함수가 대문자로 시작되어야만 외부에서 호출할수 있다고 한다.
나는 소문자_소문자 팟홀 표기법을 즐겨하는데 
GoMethod 이런식으로 파스칼 표기법을 해야한다는 내용이었다.

그래서 난.
Go_method 이렇게 하련다. 

그리고 go install을 하면 

아래 경로로 컴파일된것이 생성되어서 빌드 시 이점이 있다고 한다.

그런데 내가 저 접근제어의 함수명 대문자로 시작만 하고  go install 없이

gowatch를 켜서 파일이 변경되면 자동 빌드 되도록 했는데
정상동작했다.

즉 gopath (1) , 경로 (2) , 접근제어 (3)  3가지 주의를 하면 편하게 적용할수있었다.

post-data.go를 패키지 형태로 빼고 아래 처럼 여러개의 파일로 나눴다.

정상동작한다.


참고사이트
http://golang.site/go/article/15-Go-%ED%8C%A8%ED%82%A4%EC%A7%80

 

예제로 배우는 Go 프로그래밍 - Go 패키지

1. Go 패키지 Go는 패키지(Package)를 통해 코드의 모듈화, 코드의 재사용 기능을 제공한다. Go는 패키지를 사용해서 작은 단위의 컴포넌트를 작성하고, 이러한 작은 패키지들을 활용해서 프로그램을 작성할 것을 권장한다. Go는 실제 프로그램 개발에 필요한 많은 패키지들을 표준 라이브러리로 제공한다. 이러한 표준 라이브러리 패키지들은 GOROOT/pkg 안에 존재한다. GOROOT 환경변수는 Go 설치 디렉토리를 가리키는데, 보통 Go 설치시 자동

golang.site

https://github.com/golang-kr/golang-doc/wiki/Go-%EC%BD%94%EB%93%9C%EB%A5%BC-%EC%9E%91%EC%84%B1%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95

 

golang-kr/golang-doc

Korean Translation of golang.org/doc. Contribute to golang-kr/golang-doc development by creating an account on GitHub.

github.com

https://thebook.io/006806/ch02/05/02/

 

Go 언어 웹 프로그래밍 철저 입문: 2.5.2 접근 제어

 

thebook.io