이 두 기능을 하나로 결합하는 관용적 방법

王林
풀어 주다: 2024-02-05 22:33:04
앞으로
670명이 탐색했습니다.

이 두 기능을 하나로 결합하는 관용적 방법

질문 내용

저는 이 두 가지 매우 유사한 기능을 가지고 있습니다. 이들은 각각 명명된 쿼리 매개변수에서 특정 기본/비트 길이 정수를 구문 분석합니다. 부호 없는/부호 있는 정수를 처리할 수 있고 호출해야 하는 두 가지 함수가 있습니다 strconv.ParseUintstrconv.ParseInt.

이들을 단일 기능으로 줄이는 간결하고 관용적인 방법은 무엇입니까? 인터페이스(및 제네릭?)를 사용하는 것이 좋은 방법인 것 같지만 진행 방법을 잘 모르겠습니다.

//////////////////////////////////////////////////////////////////////

func ParseQueryParamUnsigned(name string, base int, bits int, values *url.Values) (uint64, error) {

    param := (*values)[name]

    if len(param) < 1 {
        return 0, fmt.Errorf("missing parameter %s", name)
    }

    if len(param) > 1 {
        return 0, fmt.Errorf("duplicate parameter %s", name)
    }

    v, err := strconv.ParseUint(param[0], base, bits)

    if err != nil {
        return 0, fmt.Errorf("bad value for '%s' (%s)", name, err.Error())
    }
    return v, nil
}

//////////////////////////////////////////////////////////////////////

func ParseQueryParamSigned(name string, base int, bits int, values *url.Values) (int64, error) {

    param := (*values)[name]

    if len(param) < 1 {
        return 0, fmt.Errorf("missing parameter %s", name)
    }

    if len(param) > 1 {
        return 0, fmt.Errorf("duplicate parameter %s", name)
    }

    v, err := strconv.ParseInt(param[0], base, bits)

    if err != nil {
        return 0, fmt.Errorf("bad value for '%s' (%s)", name, err.Error())
    }
    return v, nil
}
로그인 후 복사

정답


다음과 같이 범용 파서를 만들 수 있습니다:

으아아아

다음과 같이 사용하세요:

으아아아

위 내용은 이 두 기능을 하나로 결합하는 관용적 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:stackoverflow.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿