이때까지 학습하고 사용했던 패키지들을 한번 정리하는 시간을 가져보았습니다.
항상 새로 사용할때마다 새로운 함수처럼 느껴지기 떄문에 그냥 한번 복습한다는 기분으로 정리를 하고 좀더 익숙해지는 시간을 가져보고자 합니다.
이 글에 적히는 패키지 함수들은 제가 서버, 블록체인 구현을 구성하는데에 한에서 사용되었던 패키지 함수에 대해서만 다루었습니다.
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.DBdb라는 변수는 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이 들어가게 됩니다.