저는 이 두 가지 매우 유사한 기능을 가지고 있습니다. 이들은 각각 명명된 쿼리 매개변수에서 특정 기본/비트 길이 정수를 구문 분석합니다. 부호 없는/부호 있는 정수를 처리할 수 있고 호출해야 하는 두 가지 함수가 있습니다 strconv.ParseUint
或 strconv.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 중국어 웹사이트의 기타 관련 기사를 참조하세요!