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

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 on http.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?

좋은 웹페이지 즐겨찾기