Go에서 간단한 자체 문서화 유형 만들기
                                            
                                                
                                                
                                                
                                                
                                                
                                                 8414 단어  programminggo
                    
예를 들어 다음 복합 유형을 고려하십시오.
type member struct {
    id   string
    img  string
    desc string
}
여기에 세 개의 필드가 있는 구조체인
member 이 있습니다.id 구조체를 만들기 전에 둘 이상의 위치에서 수신 데이터의 유효성을 검사해야 할 수 있습니다. 그 코드 조각은 원시적 집착으로 알려진 코드 "냄새"의 전형적인 예입니다. 코드 냄새는 소프트웨어 부패의 추상적 징후 또는 증상이며 원시적 집착은 그 중 하나입니다. 작은 응용 프로그램이나 간단한 명령줄 도구인 struct def 그런 것은 괜찮지만 더 큰 프로그램(수만 줄의 코드를 생각해 보십시오)에서는 실제 문제가 됩니다.
의도를 더 잘 표현하는 데 도움이 되는 유형을 추가할 수 있습니다.
type member struct {
    id   uuidStr
    img  urlStr
    desc text150
}
type (
  uuidStr string
  urlStr  string
  text150 string
)
세 가지 새로운 유형을 정의했습니다.
img , desc 및 member 모두 기본 유형으로 uuidStr 을 가지며 urlStr struct 필드는 더 잘 사용하는 문자열 형식을 설명합니다.우리는 이것을 더 발전시켜 제작자 기능을 만들 수 있습니다.
func makeUuidStr(rawId string) (uuidStr, error) {
  if !canBeUUID(rawId) {
      return "", fmt.Errorf("\"%s\" is not a valid UUID string", rawId)
  }
  return uuidStr(rawId), nil
}
func makeUrlStr(rawURL string) (urlStr, error) {
  if !canBeURL(rawURL) {
      return "", fmt.Errorf("\"%s\" is not a valid URL", rawURL)
  }
  return urlStr(rawURL), nil
}
func makeText150(rawText string) (text150, error) {
  if len(rawText) > 150 {
    return "", fmt.Errorf("\"%s\" is over 150 bytes long!", rawText[:25])
  }
  return text150(rawText), nil
}
이러한 함수의 도움으로 구성원에 대한 생성자를 작성할 수 있습니다.
func createMember(rawId, rawImgURL, rawDesc string) (member, error) {
  id, idErr := makeUuidStr(rawId)
  img, imgErr := makeUrlStr(rawImgURL)
  desc, descErr := makeText150(rawDesc)
  if idErr != nil {
    return member{}, idErr
  } else if imgErr != nil {
    return member{}, imgErr
  } else if descErr != nil {
    return member{}, descErr
  }
  return member{id, img, desc}, nil
}
이것은 많은 작업처럼 보일 수 있지만 기본적으로 구성 시간에 데이터가 유효성 검사되었는지 확인했습니다. 필드를 업데이트하지 않는 한 이후에 유효성 검사를 수행할 필요가 없습니다. 멤버는 항상 고려해야 할 사항이 있다고 말하는 유효한 상태:
text150을 슬라이싱하거나 인덱싱하거나 두 개의 string 값을 함께 연결할 수도 있습니다. Reference
이 문제에 관하여(Go에서 간단한 자체 문서화 유형 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/mse99/creating-simple-self-documenting-types-in-go-3d8i텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
                                
                                
                                
                                
                                
                                우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)