Go 배우기 시도 - 모듈화하자!
모듈화하자
이것을 기억?
mkdir $GOTPATH/github.com/shindakun/mailgunner
mkdir $GOTPATH/github.com/shindakun/mailgunner/client
MailGun을 통해 이메일을 보내지 않았다면 그렇지 않을 수도 있습니다. 정말 엉성하고 적절한 예제와 함께 패키지를 로컬에서 좀 더 쉽게 사용할 수 있도록 그렇게 한 것뿐입니다. 나는 그것을별로 좋아하지 않았고 그것 때문에 여전히 GitHub에 게시되지 않았습니다. 그래서 적절한 Go 모듈 만들기mailgunner
를 다루는 빠른 게시물을 작성해야겠다고 생각했습니다.
준비 작업
가장 먼저 할 일은 $GOPATH
외부에 디렉토리를 만드는 것입니다. 내부에서 GO111MODULE=on
환경 변수와 함께 모듈을 사용할 수 있지만 이것은 $GOPATH
를 없애는 것이므로 외부에서 작업할 것입니다.
mkdir ~/Code/mailgunner
이제 main.go
를 만들고 VS Code에서 엽니다.
touch main.go
code .
코드는 이미 작성되어 있으므로 그냥 붙여넣습니다. 패키지 이름을 client
에서 mailgunner
로 업데이트했습니다. 내보낸 함수에 간단한 주석도 추가했습니다. 이것은 VS Code에서 Intellisense를 사용하여 몇 가지 세부 정보를 제공합니다. 그래도 조금 더 유용하게 만들어야 할 것 같습니다.
코드를 다시 검토하지 않고 여기에 제공하기만 하면 저장소나 이전 기사로 이동할 필요가 없습니다. *참고: 이후에 코드를 약간 수정했으며 NewMgClient
함수의 이름을 더 정확한 이름New()
으로 변경했습니다.
package mailgunner
import (
"net/http"
"net/url"
"strings"
)
// MgClient struct holds our URL and API key
type MgClient struct {
MgAPIURL string
MgAPIKey string
Client *http.Client
}
// New returns our MgClient with the proper settings
func New(apiurl, apikey string) MgClient {
return MgClient{
apiurl,
apikey,
http.DefaultClient,
}
}
// FormatEmailRequest puts everything together for sending
func (mgc *MgClient) FormatEmailRequest(from, to, subject, body string) (r *http.Request, err error) {
data := url.Values{}
data.Add("from", from)
data.Add("to", to)
data.Add("subject", subject)
data.Add("text", body)
r, err = http.NewRequest(http.MethodPost, mgc.MgAPIURL+"/messages", strings.NewReader(data.Encode()))
if err != nil {
return nil, err
}
r.SetBasicAuth("api", mgc.MgAPIKey)
r.Header.Add("Content-Type", "application/x-www-form-urlencoded")
return r, nil
}
적절한 모듈로 만들려면 초기화해야 합니다.
$ go mod init github.com/shindakun/mailgunner
go: creating new go.mod: module github.com/shindakun/mailgunner
이제 Git 저장소를 설정해 보겠습니다. Git에 익숙하지 않다면 시간을 내어 확인해 보는 것이 좋습니다. Pro Git은 온라인에서 무료로 사용할 수 있습니다.
git init
git add .
git commit -m "Initial commit"
git remote add origin https://github.com/shindakun/mailgunner.git
git push -u origin master
이제 Go 모듈을 최대한 활용하려면 릴리스에 버전 번호를 태그해야 합니다. Semantic Versioning을 팔로우하고 버전 1 또는 v1.0.0
로 릴리스 태그를 지정하고 태그를 Github에 푸시합니다.
git tag v1.0.0
git push --tags
신다쿤
/
우편 총잡이
Go에서 Mailgun 클라이언트의 매우 단순한 전송 전용 구현입니다.
우편 총잡이
Go에서 Mailgun 클라이언트의 매우 단순한 전송 전용 구현입니다.
설치
모듈로 사용하고 가져오기github.com/shindakun/mailgunner/v2
후 실행go mod init module
go build
mkdir $GOTPATH/github.com/shindakun/mailgunner
mkdir $GOTPATH/github.com/shindakun/mailgunner/client
mkdir ~/Code/mailgunner
touch main.go
code .
package mailgunner
import (
"net/http"
"net/url"
"strings"
)
// MgClient struct holds our URL and API key
type MgClient struct {
MgAPIURL string
MgAPIKey string
Client *http.Client
}
// New returns our MgClient with the proper settings
func New(apiurl, apikey string) MgClient {
return MgClient{
apiurl,
apikey,
http.DefaultClient,
}
}
// FormatEmailRequest puts everything together for sending
func (mgc *MgClient) FormatEmailRequest(from, to, subject, body string) (r *http.Request, err error) {
data := url.Values{}
data.Add("from", from)
data.Add("to", to)
data.Add("subject", subject)
data.Add("text", body)
r, err = http.NewRequest(http.MethodPost, mgc.MgAPIURL+"/messages", strings.NewReader(data.Encode()))
if err != nil {
return nil, err
}
r.SetBasicAuth("api", mgc.MgAPIKey)
r.Header.Add("Content-Type", "application/x-www-form-urlencoded")
return r, nil
}
$ go mod init github.com/shindakun/mailgunner
go: creating new go.mod: module github.com/shindakun/mailgunner
git init
git add .
git commit -m "Initial commit"
git remote add origin https://github.com/shindakun/mailgunner.git
git push -u origin master
git tag v1.0.0
git push --tags
Go에서 Mailgun 클라이언트의 매우 단순한 전송 전용 구현입니다.
설치
모듈로 사용하고 가져오기
github.com/shindakun/mailgunner/v2
후 실행go mod init module go build
If you are new to modules checkout my post on .
go get github.com/shindakun/mailgunner
용법
See example/main.go for a usage example.
변경 로그
- Updated
New()
to take http.Client so we don't have to rely onhttp.DefaultClient
모듈 사용
Alright, great - but, how do we use it? The Git repo includes an example bit of code. Go ahead and clone the repo into a directory outside your $GOPATH
. Navigate to the example directory. Then we'll initialize it to make use of the module. Finally, run go build
, it will look something like the following.
$ go mod init example
go: creating new go.mod: module example
$ go build
go: finding github.com/shindakun/mailgunner v1.0.0
go: downloading github.com/shindakun/mailgunner v1.0.0
보세요, 더 이상
go get
를 사용하지 않아도 됩니다!다음번
Go에서 웹 서버를 살펴보는 시간을 갖고 싶기 때문에 간단한 서버를 만드는 방법을 살펴보겠습니다. 생산 준비가 되지 않았을 수도 있지만 인터넷에 올려 실제로 작동하는 것을 보는 것은 여전히 재미있을 것입니다. 나는 시도하고 작업할 어리석은 프로젝트에 대한 몇 가지 다른 아이디어를 가지고 있었는데 먼저 도달할 수 있습니다. 무슨 일이 일어나는지 보겠습니다.
그때까지...
GitHub의 리포지토리에서 이것과 대부분의 다른 Go 학습 시도 게시물에 대한 코드를 찾을 수 있습니다.
신다쿤 / atlg
dev.to에 올린 "Attempting to Learn Go" 게시물의 소스 저장소
Go 배우기 시도
여기에서 내가 작성하고 게시한 Go 학습 시도 게시물에 대해 작성한 코드를 찾을 수 있습니다.
포스트 색인
게시하다
암호
-
-
-
-
-
src
src
src
src
src
src
src
src
src
src
src
src
src
src
src
위 코드 참조
View on GitHub
이 게시물을 즐기십니까?
How about buying me a coffee?
Reference
이 문제에 관하여(Go 배우기 시도 - 모듈화하자!), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/shindakun/attempting-to-learn-go---lets-get-modular-390i텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)