본문 바로가기

아카이브/Mine Villages

Mine Villages 3일차 코드리뷰 : 4월 5일

728x90

1. 구조체 쓸 수 있는 것은 struct 사용해서 객체화 하기

package db

import (
	"context"
	"log"
	"time"

	"github.com/go-redis/redis/v8"
)

var client *redis.Client

type Redis struct {
	Addr     string
	Password string
	DBcount  int
}

type RedisSetter struct {
	Key    string
	Value  string
	Expire time.Duration
}

type RedisGetter struct {
	Key string
}

func (r *Redis) Connection() {
	// Connect to Redis server
	client = redis.NewClient(&redis.Options{
		Addr:     r.Addr,
		Password: r.Password,
		DB:       r.DBcount})

	// Ping Redis to ensure connectivity
	ctx := context.Background()
	_, err := client.Ping(ctx).Result()
	if err != nil {
		log.Println("Failed to ping Redis:", err)
		return
	} else {
		log.Println("Success to ping Redis.")
	}
}

func (r *RedisSetter) Set() error {
	ctx := context.Background()
	return client.Set(ctx, r.Key, r.Value, r.Expire).Err()
}

func (r *RedisGetter) Get() (string, error) {
	ctx := context.Background()
	return client.Get(ctx, r.Key).Result()
}

 

GPT: 
Go 언어에서 구조체(struct)를 사용하는 이유는 여러 가지가 있습니다:

데이터 구조 정의: 구조체를 사용하면 여러 필드(멤버 변수)를 그룹화하여 데이터 구조를 정의할 수 있습니다. 이는 데이터를 더 구조화하고 조직화하여 코드를 이해하기 쉽게 만들어 줍니다.

코드의 가독성 및 유지보수성 향상: 구조체를 사용하면 코드의 가독성이 향상됩니다. 관련된 데이터를 한데 묶어서 사용하므로, 코드를 읽고 이해하기 쉽습니다. 이는 유지보수성을 높이고 버그를 예방하는 데 도움이 됩니다.

메서드와 함께 사용 가능: Go 언어에서는 구조체에 메서드를 연결할 수 있습니다. 이는 데이터와 그 데이터를 조작하는 함수를 함께 묶을 수 있음을 의미합니다. 이러한 접근 방식은 객체 지향 프로그래밍에서 볼 수 있는 개념과 유사하지만, Go는 명시적인 클래스 개념 대신 구조체와 메서드를 활용하여 객체 지향적인 디자인을 지원합니다.

인터페이스 구현: 구조체는 인터페이스를 구현하는 데 사용될 수 있습니다. 이를 통해 코드의 유연성과 재사용성을 높일 수 있습니다.

메모리 관리 및 성능: Go는 간결하고 효율적인 메모리 관리를 지향합니다. 구조체는 필드의 메모리 레이아웃을 보장하여 메모리를 효율적으로 사용할 수 있습니다. 또한 구조체는 값 형태로 전달되므로, 복사가 발생할 수 있지만 포인터를 이용하여 참조 형태로 전달하여 이를 최소화할 수 있습니다.

JSON/XML 등과의 상호 작용: 구조체는 일반적으로 JSON이나 XML과 같은 외부 데이터 형식과의 상호 작용에 유용합니다. 구조체는 이러한 형식의 데이터를 Go의 데이터 구조로 쉽게 매핑할 수 있습니다.

요약하면, Go 언어에서 구조체를 사용하는 이유는 코드를 구조화하고 관리하기 쉽게 만들며, 유연성과 성능을 향상시키고 외부 데이터와의 상호 작용을 간단하게 만들기 위함입니다.