Golang - 패키지 함수 정리

Lumi·2022년 2월 22일
0

Golang

목록 보기
35/38
post-thumbnail

🔥 개요

이때까지 학습하고 사용했던 패키지들을 한번 정리하는 시간을 가져보았습니다.

항상 새로 사용할때마다 새로운 함수처럼 느껴지기 떄문에 그냥 한번 복습한다는 기분으로 정리를 하고 좀더 익숙해지는 시간을 가져보고자 합니다.

이 글에 적히는 패키지 함수들은 제가 서버, 블록체인 구현을 구성하는데에 한에서 사용되었던 패키지 함수에 대해서만 다루었습니다.

🔥 mysql - 책 관리 시스템

🔨 github.com/jinzhu/gorm

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이런 옵션을 기본으로 사용을 하게 됩니다.

  • user : 사용자 이름
  • pass : 비밀번호
  • tcp : ip주소
  • dbname : DB이름

부가적인 옵션들은 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에 해당하는 값을 삭제

🔨 github.com/gorilla/mux

서버를 구성하는데에 기본적으로 사용하는 패키지 입니다.

보통 mux := mux.NewRouter()을 통해서 인스턴스를 생성하여 접근을 하게 되며

서버를 실행시킬떄에는 http.ListenAndServer(포트번호, 인스턴스)를 통해서 서버를 만들어 줄 수 있습니다.

  • 이떄 net/http라는 모듈이 부수적으로 필요합니다.

이후 mux값을 통해서 router를 만들어 줄 수 있습니다.

  • mux.HandleFunc("링크", 함수).Methods("메서드") 이런 방식으로 router을 설정이 가능합니다.

🔨 io/ioutil

일종의 유틸리티 기능을 제공하며 제가 사용한 함수는 ReadAll입니다.

  • ioutil.ReadAll을 통해서 접근이 가능합니다.

Post요청일시에는 Json데이터를 받게 되는데 이는 golang이 읽을수 있게 변환시켜 주어야 합니다.

그러기 떄문에 일단 들어오는 데이터를 읽기 위해서

ioutil.ReadAll(r.Body)를 통해서 읽게 되고 이는 JSON파일을 읽는 정도로만 이해해도 될 것 같습니다.

그후 저희는 이 JSON데이터를 변환시켜주어야 합니다.

🔨 encoding/json

보통 들어오는 Json데이터를 변환할떄 사용하는 패키지 입니다.

mysql서버를 통해서 작동을 시킬떄는 json.Unmarshal을 활용하였고 이는 JSON데이터를 golang읽을수 있게 역직렬화 해줍니다.

json.Unmarshal([]byte(body), &data)

  • 보통 이렇게 사용하며 byte슬라이스로 변환하여 넣은뒤에 포인터를 넣어줌으로써 바로 변환이 완료되게 해 줍니다.
  • 보통 포인터 값은 구조체의 값을 가지고 있습니다.

이와 반대로 처리를 완료하고 응답을 해주어야 할때에는 json데이터를 보내주는 것이 좋기 떄문에 json.Marshal(data)를 통해서 출력해 줍니다.

이외에도 단순히 err := json.NewDecoder(r.Body).Decode(&todo)를 통해서 json데이터를 직렬화 가능하며

이후 출력을 할떄에는 앞서 적은것과 동일하게 json.Marshal(data)를 통해서 변환후 출력을 해 주면 됩니다.

좀더 명확하게 보기 위해서 post요청을 해보았습니다.

🔥 Go로 구현하는 블록체인

🔨 strconv

변환을 하는데에 도움을 주는 패키지 입니다.

저 같은 경우에는 FormatInt를 활용하였고 이는 숫자를 진수 문자열로 바꾸는 역할을 합니다.

  • strconv.FormatInt(100 ,10) : 100을 10진수 문자열로 변환

이외에도 strconv.Atoi도 자주 사용했습니다.

  • strconv.Atoi("100") : 문자열을 숫자(정수)로 변환
  • 이는 strconv.ParseInt("100", 10) 와 동일합니다.

🔨 bytes

bytes.join은 아마 이 부분에서 많이 사용했습니다.

말 그대로 bytes값들을 합치는 역할을 수행하게 됩니다.

  • 비슷한 역할로는 strings.Join이 있고 이는 string값들을 합치는 역할을 합니다.

🔨 encoding/binary

대표적으로 사용한 함수는 Write입니다.

  • binary.Write(w, order, interface{})
  • w의 경우에는 데이터를 적용하고자 하는 값
  • order의 경우에는 일종의 조건
  • interface{}부분은 이제 쓸 값을 의미합니다.

이러한 기준에서 실행을 시키게 되면 w에 이진표현을 적용하여 적게 됩니다.

  • 이 함수는 개인적으로 단순히 어떠한 값을 w에 2진법으로 적용시켜준다 정도로만 이해를 하였습니다.

🔨 crypto/sha256

쉽게 말해서 해시를 지원해주는 패키지로 들어오는 데이터를 해시화 한다?? 정도로만 이해를 하였습니다.

  • sha256.Sum256(data)
  • 여기에서 data부분은 []byte 아니면 string이 들어가게 됩니다.

🔥 참고 링크

profile
[기술 블로그가 아닌 하루하루 기록용 블로그]

0개의 댓글