>백엔드 개발 >Golang >이 두 기능을 하나로 결합하는 관용적 방법

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

王林
王林앞으로
2024-02-05 22:33:04699검색

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

질문 내용

저는 이 두 가지 매우 유사한 기능을 가지고 있습니다. 이들은 각각 명명된 쿼리 매개변수에서 특정 기본/비트 길이 정수를 구문 분석합니다. 부호 없는/부호 있는 정수를 처리할 수 있고 호출해야 하는 두 가지 함수가 있습니다 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으로 문의하시기 바랍니다. 삭제