이때까지 학습하고 사용했던 패키지들을 한번 정리하는 시간을 가져보았습니다.
항상 새로 사용할때마다 새로운 함수처럼 느껴지기 떄문에 그냥 한번 복습한다는 기분으로 정리를 하고 좀더 익숙해지는 시간을 가져보고자 합니다.
이 글에 적히는 패키지 함수들은 제가 서버
, 블록체인 구현
을 구성하는데에 한에서 사용되었던 패키지 함수에 대해서만 다루었습니다.
Driver와 함께 사용을 해야 하기 떄문에 _ "github.com/jinzhu/gorm/dialects/mysql"
도 함께 불러온뒤에 사용이 가능합니다.
DB
에 연결을 지원하는 패키지로 DB를 연결할 떄에는 gorm.Open
을 통해서 접근이 가능합니다.
대표적으로 a,err := gorm.Open("DB종류", "옵션")
이와같이 DB에 연동이 가능하고 옵션의 경우에는 docs의 기준으로 보았을떄 user:pass@tcp(127.0.0.1:3306)/dbname?charset=utf&parseTime=True&loc=Local
이런 옵션을 기본으로 사용을 하게 됩니다.
부가적인 옵션들은 docs를 참고하여 입맛에 맞게 작성이 가능합니다.
이후 변수통해서 DB에 접근이 가능합니다.
var db *gorm.DB
db
라는 변수는 gorm.Open
할떄에 a
의 변수값을 할당해 주어야 합니다.이후 이 db
라는 변수를 통해서 마이그래이션, create, delete등등 활용이 가능합니다.
db.AutoMigrate(&Book{})
- Book라는 구조체를 마이그레이션
bool := db.NewRecord(b)
- b라는 값이 DB에 있는지 확인하고 Boolean값을 반환
- 없을시에 true
db.Create(&b)
- b라는 값을 DB에 저장
var Books []Book
db.Find(&Books)
- Book라는 데이터를 가지고 있는 모든 값을 반환
var getBook Book
db := db.Where("Id=?", Id).Find(&getBook)
- ID에 해당하는 데이터를 반환
var book Book
db.Where("ID=?", ID).Delete(book)
- ID에 해당하는 값을 삭제
서버를 구성하는데에 기본적으로 사용하는 패키지 입니다.
보통 mux := mux.NewRouter()
을 통해서 인스턴스를 생성하여 접근을 하게 되며
서버를 실행시킬떄에는 http.ListenAndServer(포트번호, 인스턴스)
를 통해서 서버를 만들어 줄 수 있습니다.
net/http
라는 모듈이 부수적으로 필요합니다.이후 mux
값을 통해서 router를 만들어 줄 수 있습니다.
mux.HandleFunc("링크", 함수).Methods("메서드")
이런 방식으로 router을 설정이 가능합니다.일종의 유틸리티 기능을 제공하며 제가 사용한 함수는 ReadAll입니다.
ioutil.ReadAll
을 통해서 접근이 가능합니다.Post요청일시에는 Json데이터를 받게 되는데 이는 golang이 읽을수 있게 변환시켜 주어야 합니다.
그러기 떄문에 일단 들어오는 데이터를 읽기 위해서
ioutil.ReadAll(r.Body)
를 통해서 읽게 되고 이는 JSON파일을 읽는 정도로만 이해해도 될 것 같습니다.
그후 저희는 이 JSON데이터를 변환시켜주어야 합니다.
보통 들어오는 Json데이터를 변환할떄 사용하는 패키지 입니다.
mysql서버를 통해서 작동을 시킬떄는 json.Unmarshal
을 활용하였고 이는 JSON데이터를 golang읽을수 있게 역직렬화 해줍니다.
json.Unmarshal([]byte(body), &data)
이와 반대로 처리를 완료하고 응답을 해주어야 할때에는 json데이터를 보내주는 것이 좋기 떄문에 json.Marshal(data)
를 통해서 출력해 줍니다.
이외에도 단순히 err := json.NewDecoder(r.Body).Decode(&todo)
를 통해서 json데이터를 직렬화 가능하며
이후 출력을 할떄에는 앞서 적은것과 동일하게 json.Marshal(data)
를 통해서 변환후 출력을 해 주면 됩니다.
좀더 명확하게 보기 위해서 post요청을 해보았습니다.
변환을 하는데에 도움을 주는 패키지 입니다.
저 같은 경우에는 FormatInt
를 활용하였고 이는 숫자를 진수 문자열로 바꾸는 역할을 합니다.
strconv.FormatInt(100 ,10)
: 100을 10진수 문자열로 변환이외에도 strconv.Atoi
도 자주 사용했습니다.
strconv.Atoi("100")
: 문자열을 숫자(정수)로 변환strconv.ParseInt("100", 10)
와 동일합니다.bytes.join
은 아마 이 부분에서 많이 사용했습니다.
말 그대로 bytes값들을 합치는 역할을 수행하게 됩니다.
strings.Join
이 있고 이는 string값들을 합치는 역할을 합니다.대표적으로 사용한 함수는 Write
입니다.
binary.Write(w, order, interface{})
이러한 기준에서 실행을 시키게 되면 w에 이진표현을 적용하여 적게 됩니다.
쉽게 말해서 해시를 지원해주는 패키지로 들어오는 데이터를 해시화 한다?? 정도로만 이해를 하였습니다.
sha256.Sum256(data)
[]byte
아니면 string
이 들어가게 됩니다.