최근 go를 공부하고 있는데 byte 라는 타입이 있어 흥미로워 정리를 해보고자한다.
func Signup(w http.ResponseWriter, r *http.Request) {
var user User
err := json.NewDecoder(r.Body).Decode(&user)
if err != nil {
http.Error(w, "Invalid request payload", http.StatusBadRequest)
return
}
// 비밀번호를 해싱
hashedPassword, err := bcrypt.GenerateFromPassword([]byte(user.Password), bcrypt.DefaultCost)
if err != nil {
http.Error(w, "Error hashing password", http.StatusInternalServerError)
return
}
예를 들면 위 코드에서 회원가입시 유저 비밀번호를 해싱하는과정에서 []byte
단위를 만나게된다.
위에서 사용되는 타입은 byte slice라고 불린다. 이를 이해하기위해 2가지를 먼저 알아야한다.
uint8의 타입을 alias로 나타낸것으로 그냥 8비트 부호 없는 정수를 나타낸다.
slice는 Go에서 동적으로 크기가 조절 가능한 배열입니다. 기본 배열에 대한 뷰를 제공하며, 가변 길이의 데이터를 저장할 수 있다.
hashedPassword, err := bcrypt.GenerateFromPassword([]byte(user.Password), bcrypt.DefaultCost)
이렇게 비밀번호를 해싱하기위해 기존 문자열을 바이트 단위로 변환한다. 비밀번호 길이가 얼마인지 알 수 없으므로 byte slice로 처리한 것이다.
파일 입출력이나 네트워크 통신에서 바이트 단위로 데이터를 처리할 때도 주로 사용된다