Go 언어 학습 후 처음 실습해보는 예제로 REST API를 만들어보았다1. 동영상 강좌로 TutorialEdge, Golang Development를 추천한다.
go 설치 후 환경변수 설정
GOPATH는 Go 언어에서 프로젝트를 생성하고 개발할 때 기본 작업 디렉터리로 사용한다. 아래처럼 ‘GoProjects’ 폴더를 만들었다면 이 안에 ‘bin’, ‘pkg’, ‘src’ 폴더를 만들고 다시 src 폴더에 프로젝트 폴더(예, hello)를 만들고 이 안에 ‘main.go’ 파일을 만든다. 이제 ‘go run’을 실행할 경우 화면에 결과를 보여주며(temp폴더에 임시빌드), ‘go build’ 하면 프로젝트 폴더명(hello)으로 실행 파일(hello.exe)을 만들어 준다.
rem C:\GoProjects\bin
rem C:\GoProjects\pkg
rem C:\GoProjects\src\hello\main.go
set Path=%PATH%;C:\Go\bin
set GOCACHE=C:\GoProjects\go-build
set GOENV=C:GoProjects\env
set GOPATH=C:\GoProjects
set GOTMPDIR=C:\GoProjects\temp
Temp 디렉터리는 ‘go run’을 실행할 때 백신에 따라 ‘access denied’가 메시지가 나오는 데 백신에 예외처리를 해주어 해결한다.
main.go example
package main
import (
"encoding/json"
"log"
"math/rand"
"net/http"
"strconv"
"github.com/gorilla/mux"
)
// Book Model
type Book struct {
ID string `json:"id"`
Isbn string `json:"isbn"`
Title string `json:"title"`
Author *[]Author `json:"author"`
}
// Author Model
type Author struct {
Name string `json:"name"`
Address string `json:"address"`
}
var books []Book
func setBook(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
var book Book
_ = json.NewDecoder(r.Body).Decode(&book)
book.ID = strconv.Itoa(rand.Intn(100000000))
books = append(books, book)
json.NewEncoder(w).Encode(book)
}
func main() {
r := mux.NewRouter()
r.HandleFunc("/books", setBook).Methods("POST")
log.Fatal(http.ListenAndServe(":8000", r))
}
go get -u github.com/gorilla/mux
명령어로 mux router를 설치한다. 아래는 Concurrency2.
Concurrency
package main
import (
"fmt"
"log"
"net/http"
"os"
"sync"
)
var wg sync.WaitGroup
var mut sync.Mutex
func sendRequest(url string) {
defer wg.Done()
res, err := http.Get(url)
if err != nil {
panic(err)
}
mut.Lock()
defer mut.Unlock()
fmt.Printf("[%d] %s\n", res.StatusCode, url)
}
func main() {
if len(os.Args) < 2 {
log.Fatalln("usage: go run main.go <url 1>...<url n>")
}
for _, url := range os.Args[1:] {
go sendRequest("https://" + url)
wg.Add(1)
}
wg.Wait()
}
참고자료(study)
- TutorialEdge, Golang Development
- Traversy Media, Go / Golang Crash Course
- freeCodeCamp.org, Learn Go Programming - Golang Tutorial for Beginners