2020. 5. 14. 21:22ㆍTrouble Shooting
개발자마다 또는 사용자마다 사용하는 코드 스타일 및 컨벤션은 제각각 다릅니다.
하지만 언어마다 권장하는 표준 방식이 존재하는데 이를테면
Python에서는 snake_case를
// snake_case(스네이크 케이스 표기법)
snake_case = 1
camel_case = ""
pascal_case = None
Javascript와 Go에서는 camelCase를 사용할 것을 권장합니다.
// camelCase(카멜 케이스 표기법)
// JS
snakeCase = 1
camelCase = ""
pascalCase = null
// Go
snakeCase = 1
camelCase = ""
pascalCase = nil
Python은 Class 명을 작성할 때는 파스칼케이스를
// Class명은 반드시 PascalCase(파스칼 케이스)
class PascalCase:
def __init__(self):
pass
Go는 Struct(구조체) 명과 구조체 내부 타입을 정의할 때는 파스칼케이스를 사용할 것을 권고합니다.
// 구조체명, 구조체 변수타입 은 PascalCase(파스칼 케이스)
type PascalCase struct {
Pascal uint64
Case string
}
이처럼 언어만해도 제각기 사용하는 케이스 방식이 다른데,
Django에서 models.py처럼 스키마를 정의 하는단계를
# Django에서의 스키마 정의 - python3 manage.py --database=test inspectdb
class Test(models.Model):
snake_case = models.AutoField(primary_key=True)
camel_case = models.Charfield(max_length=45)
pascal_case = models.IntegerField(default=0)
Go에서 사용되는 GORM 에서는 구조체를 통해 이루어집니다.
이 스키마를 정의할때 구조체의 파스칼케이스를 따르게 되는데, 태그를 사용하여 json출력을 해보신분들이라면
태그로 정의할 수 있습니다.
// Go의 스키마 정의
type Test {
SnakeCase uint64 `json:"snake_case"`
CamelCase string `json:"camelCase"`
PascalCase float64 `json:"PascalCase"`
}
하지만 json만 태그를 정의하게 될 경우 출력되는 결과만 변형될 뿐 DB에서 읽어들일때는 전혀 상관없이 동작하며,
Gorm에서는 파스칼케이스로 정의될때 자동으로 스네이크케이스로 변형하여 읽어들입니다.
// Goland의 json 태그 자동완성 상태
type Test {
SnakeCase uint64 `json:"snake_case"`
CamelCase string `json:"camel_case"`
PascalCase float64 `json:"pascal_case"`
}
여기서 DB 컬럼(필드)명이 만약 스네이크 케이스가 아닌 카멜케이스나, 파스칼케이스로 정의되어 있는경우는 암이 걸리기 시작하는데요.
공식 문서에서 이를 해결 하는방법이 이미 정의되어 있습니다.
공식 홈페이지의 구조체 지원 태그들 가장 첫번째에 기술된 것이 바로 Column 입니다.
type Test struct {
NameSpace string `json:"nameSpace" Column:"nameSpace"`
SnakeCase uint64 `gorm:"Column:snake_case;UNIQUE"`
CamelCase float64 `gorm:"Column:camelCase"`
PascalCase int32 `gorm:"Column:Pascalcase"`
}
위 처럼 정의할 수 있으며 순서는 상관이 없습니다.
다만 Column에서 C는 반드시 대문자여야 하며, 내용물은 반드시 "으로 감싸줘야하고,
여러 구조체 태그를 명시할때는 ; 으로 구분 지어 주어야 합니다.
'Trouble Shooting' 카테고리의 다른 글
Go Dockerfile 멀티스테이징 scratch를 이용한 경량화 + 타임존 맞추기 (0) | 2020.06.26 |
---|---|
[Mysql, MariaDB] [1292] Truncated incorrect DOUBLE value (0) | 2020.06.08 |
mysql 1406 / Data too long for column '' at row ? (0) | 2020.05.04 |
Oracle Cloud VM Instance 포트 개방 안될때 (0) | 2020.05.01 |
DevTools failed to parse SourceMap (0) | 2020.03.20 |