hoony's web study

728x90
반응형

1. Go Modules

Go lang을 사용하다보면 다른 프로젝트 처럼 폴더별로 모듈을 선언하고 사용하고 싶은데 사실 이 부분이 접근하는게 이해가 되지를 않아서 이렇게 정리해 봅니다. 
go.mod 는 현재 프로젝트의 프로젝트명으로 보통 선언이 되어있다.
이런 이유로 인해서 GOPATH의 압박을 벗어날 수가 없었다. 
하지만 해결 방법은 분명히 존재한다. 

2. Module 분리 방법

사실 위의 문구도 정확히 맞는지는 모르겠다. 
하지만 오늘 적용하면서 성공한것을 이렇게 포스팅해봅니다.

1. go.mod 파일을 열어줍니다.
   상단에 module goDbConnectionPool 을 삭제하고 본인이 생각하는 모듈의 명으로 변경을 해준다.

2. 저는 아래와 같이 선언을 하였다. 
   module ourCodelabs.kr/goDbConnectionPool

   go 1.18

  require github.com/go-sql-driver/mysql v1.6.0

3. 위의 방법이 좀 거시기하시면 
   go mod ourcodelabs.kr/goDbConnectionPool 로 하셔도 무방합니다. 
   이름은 본인이 원하시는 도메인으로 하시는게 최고인듯합니다.

3. 소스 부분 

프로젝트구조

위와같이 폴더를 나누어서 db 관련된 것을 분리했습니다.
go lang은 함수형 언어이니 소스 부터 한번 보시면 아래와 같습니다.

package common

import (
	"database/sql"
	"fmt"
	_ "github.com/go-sql-driver/mysql"
)

func DbCon() *sql.DB {
	db, _ := sql.Open("mysql", "사용자명:사용자비번@tcp(127.0.0.1:3306)/db명")
	db.SetMaxIdleConns(10)
	db.SetMaxOpenConns(10)

	fmt.Println("db connection!!!")

	return db
}

//DB 리스트를 불러오는 함수 
func Scan(list *sql.Rows) (rows []map[string]interface{}) {
	fields, _ := list.Columns()
	for list.Next() {
		scans := make([]interface{}, len(fields))
		row := make(map[string]interface{})

		for i := range scans {
			scans[i] = &scans[i]
		}
		list.Scan(scans...)
		for i, v := range scans {
			var value = ""
			if v != nil {
				value = fmt.Sprintf("%s", v)
			}
			row[fields[i]] = value
		}
		rows = append(rows, row)
	}
	return
}
import (
	_ "database/sql"
	"fmt"
	_ "github.com/go-sql-driver/mysql"
	myDB "ourCodelabs.kr/goDbConnectionPool/common"
)


func main() {
	db := myDB.DbCon()
	defer db.Close()

	seller_list, err := db.Query("select * from table명 ")
	if err != nil {
		panic("no!!!")
	}
	defer seller_list.Close()

	list := myDB.Scan(seller_list)
	for index := range list {
		fmt.Print(list[index])
	}
}

main.go 에서 폴더에 있는 것을 불러와서 사용하는 예제입니다. 

아직 go Lang 에 대해서는 감을 잡아나가는 단계이니 양해 부탁드립니다.
비천한 소스지만 도움이 되셨으면 해서 올려드립니다. 
DB 관련된 것은 더 좋은 모듈을 만들면 업데이트 된 것으로 다시 올려드리겠습니다. 


728x90

'개발관련 > Go Lang' 카테고리의 다른 글

[GO]MAC zsh 에 GOPATH 설정하기  (0) 2022.07.13
[API JSON] Go 언어 API Json parsing 하기  (0) 2022.07.12
[Go] Scheduler 예제  (0) 2022.07.06
go timer 예제코드  (0) 2022.07.05
Go language package 찾는 주소  (0) 2021.09.09

공유하기

facebook twitter kakaoTalk kakaostory naver band
loading