Golang+Docker+RDB 유닛 테스트를 실행할 때 로컬 호스트 이름에 대한 문제
Golang+Docker+RDB 유닛 테스트를 실행할 때 로컬 호스트 이름에 대한 문제
최근 골랑이 흥미로워졌다. 이번에는 골랑+Docker+RDB에 골랑의 단원 테스트에 RDB 등에 기록을 삽입하려면 실행할 때의 로컬 호스트 이름을 다시 읽어야 하는 문제에 대해 자동화하는 방법이기 때문에 이 노트를 작성했다.
너 뭐 하고 싶어?
Golang의test 코드에서 호출
config.ReadConfig()
하면 설정을 다시 읽을 수 있습니다.Docker 등을 사용할 때 로컬 및 가상 루프 내에서 연결 대상을 전환하는 데 사용합니다.
여러 단계
다시 쓸 파일
config.yml
db:
host: host.docker.internal #ここをlocalhostに書き換えたい
name: title
password: password
user: user
지금까지 수동으로 하나씩 전환했지만 효율이 너무 떨어져서 테스트를 뛸 때 자동으로 다시 쓰고 싶어요.먼저
config.go
config.gopackage config
import (
"io/ioutil"
"os"
err "path/to/pkg/error"
yaml "gopkg.in/yaml.v2"
)
type Config struct {
DB configDB `yaml:"db"`
}
type configDB struct {
Host string `yaml:"host"`
Name string `yaml:"name"`
Password string `yaml:"password"`
User string `yaml:"user"`
}
func ReadConfig() (*Config, error) {
file := os.Getenv("CONFIG")
if file == "" {
return nil, err.ErrorEmptyEnvironmentVariableConfig
}
buf, err := ioutil.ReadFile(file)
if err != nil {
return nil, err
}
var config Config
err = yaml.Unmarshal([]byte(buf), &config)
if err != nil {
return nil, err
}
return &config, nil
}
Golang에는 YAML의 표준 라이브러리가 없습니다.따라서 외부 라이브러리 등을 사용합니다
골랑의 구조체나 지도 등을 (Unmarshal)로 변환할 수 있고, 골랑의 데이터 형식에서 YAML로 변환할 수 있다.
ライブラリ yaml.v2
ソース: go-yaml/yaml GitHub
구조적으로 config의 항목을 정의하여 다시 읽을 수 있도록 한다.type configDB struct {
Host string `yaml:"host"`
Name string `yaml:"name"`
Password string `yaml:"password"`
User string `yaml:"user"`
}
다음으로 쓰기setup_test.go
package db_test
import (
"path/to/pkg/config"
db "path/to/pkg/db"
"os"
"testing"
)
func TestMigration(t *testing.T) {
os.Setenv("CONFIG", "../../config.yml")
config, _ := config.ReadConfig()
config.DB.Host = "localhost" #ここで読みかえます
db.ConnectDatabase(config)
}
error 포장error.go
package error
import (
"golang.org/x/xerrors"
)
var (
ErrorEmptyEnvironmentVariableConfig = xerrors.New("Environment variable CONFIG is empty.")
)
이렇게 테스트 코드에서 호출config.ReadConfig()
하면 다시 읽을 수 있습니다.Docker 등을 이용하고 싶을 때 로컬과 가상 환경에서 연결처를 전환하고 싶을 때 자주 발생하는데 정말 편리해요.
고마워요 고마워요
더 똑똑한 방법을 아는 사람이 있다면 꼭 메시지를 남겨주세요!
Reference
이 문제에 관하여(Golang+Docker+RDB 유닛 테스트를 실행할 때 로컬 호스트 이름에 대한 문제), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/_kazuya/articles/015011e1401625ed2237텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)