본문 바로가기

분류 전체보기

(658)
[GO] Todo list - interface 구현1 다음 단계는 map 방식의 구조에서 sqlite DB 형식으로 todo list 저장방식을 변경할 예정입니다. 그래서 구조변경을 쉽게할수 있는 interface 방식으로 구조를 변경하는 샘플입니다. interface 의 장점은 특정 기능을 변경시, 간결하여 유지보수가 쉬운 장점이 있다. 예를 들면, todo lists 를 저장하는 방식을 메모리방식에서 DB 방식으로 변경시 수정사항을 최소화 할 수 있다. 코딩량이 줄어 든다는 의미는 아니고, 변경사항을 최소화하여 오류 발생 가능성을 최소화 할 수 있다. 기본 구조는 아래와 같다. ./model/model.go 변경 사항 1. interface 에 실제 함수 기능 선언 package model import ( "time" ) type Todo struct ..
[GO] Todo list - refactoring(구조변경) 지난 게시글에서 만든 todo list 를 refactoring 하였습니다. refactoring 을 쉽게 하기 위해서 테스트 코드를 먼저 작성하여 현재의 기능을 검증하고 코드를 수정하면 refactoring 으로 인한 오류를 쉽게 검증할 수 있습니다. 기본구조는 아래와 같다. 1. 테스트 코드를 먼저 만들어서 기존 기능을 검증하겠습니다 ./myapp/app_test.go package myapp import ( // 모델은 검증코드 이후, refactoring 에서 추가한 부분입니다 "GO/tuckersGo/goWeb/web16-todo_refactoring/model" "encoding/json" "log" "net/http" "net/http/httptest" "net/url" "strconv" "..
[GO] Todo list - map 자료구조 참고자료인 bootstrap template 은 todo list 를 html 화면에 직접 추가/제거하는 방식입니다. 기본 템플릿을 수정하여 데이터를 서버의 메모리, map에 저장하는 방식입니다. 서버를 새로 시작하면 이전 데이터는 지워지고 기본 데이터에서 시작합니다. 초기화면 기본 폴더 구조는 아래와 같습니다. ./main.go package main import ( "GO/tuckersGo/goWeb/web16-todo/myapp" "log" "net/http" "github.com/urfave/negroni" ) const portNumber = ":3000" func main() { mux := myapp.MakeNewHandler() ng := negroni.Classic() ng.UseHand..
[GO] Decorator - 심화(log pattern) main.go package main import ( "GO/tuckersGo/goWeb/web10/decoHandler" "GO/tuckersGo/goWeb/web10/myapp" "log" "net/http" "time" ) const portNumber = ":3000" func logger1(w http.ResponseWriter, r *http.Request, h http.Handler) { start := time.Now() log.Printf("[LOGGER1] Started\n") h.ServeHTTP(w, r) log.Printf("[LOGGER1] Completed, time: %v ms\n", time.Since(start).Milliseconds()) } func logger2(w ..
[GO] Decorator 패턴 decorator 패턴을 이용한 샘플코드, 함수를 추가 제거가 쉽다. 유지보수가 편하다. main.go 1. 암호화 > 압축 > 압축해제 > 복호화 2. 압축 > 압축해제 구현 부분에서 간단한 코드 변경만으로 암호화/복호화 부분을 추가하거나 제거하기가 쉬워진다. package main import ( "github.com/tuckersGo/goWeb/web9/lzw" "github.com/tuckersGo/goWeb/web9/cipher" "fmt" ) var sentData string var recvData string type Component interface { Operator(string) } type SendComponent struct{} func (self *SendComponent) O..
[GO] Web - Restful API, TDD 패키지 설치 위치 - 본인의 프로젝트 폴더에서 실행. 패키지 설치 방법 1. go get -u github.com/gorilla/mux D:\workspace\GO\tuckersGo\goWeb\web05>go get -u github.com/gorilla/mux go: downloading github.com/gorilla/mux v1.8.0 go get: added github.com/gorilla/mux v1.8.0 환경 설정은 아래와 같이 설정함. PS D:\workspace\GO\tuckersGo\goWeb> cd .\web05\ PS D:\workspace\GO\tuckersGo\goWeb\web05> go mod init GO/tuckersGo/goWeb/web05 go: creating ne..
[GO] Web - 테스트 코드 작성방법(TDD) 기존에 작업한 "Web - Text, json, URL 쿼리 방식" 코드에 대한 테스트 코드입니다. 테스트 코드를 작성하기 전에 2개의 패키지를 설치해야 함. 설치 위치 - 본인의 프로젝트 폴더에서 실행. 설치방법 1. go get github.com/smartystreets/goconvey 2. 환경변수 path에 추가 ===> "%GOPATH%\bin" 3. go get github.com/stretchr/testify/assert ./myapp/app_test.go - 5가지의 테스트 경우를 점검함. package myapp import ( "encoding/json" "github.com/stretchr/testify/assert" "io/ioutil" "net/http" "net/http/htt..
[GO] Web - Text, json, URL 쿼리 방식 간단한 golang 으로 만든 웹페이지 입니다. 프로젝트 폴더위치 및 패키지 위치에 따른 오류는 본인의 환경에 맞게 수정이 필요함. ./main.go package main import ( "GO/tuckersGo/goWeb/web04/myapp" // 개인 패키지 위치이므로 본인에 맞게 수정할것 "net/http" ) const portNumber = ":3000" func main() { mux := myapp.NewHttpHandler() http.ListenAndServe(portNumber, mux) } ./myapp/app.go package myapp import ( "encoding/json" "fmt" "net/http" "time" ) type User struct { FirstName..