>  기사  >  백엔드 개발  >  트랜스포머로 이동

트랜스포머로 이동

DDD
DDD원래의
2024-11-15 16:10:03605검색

Go Transformers

Go-Utils

go-utils는 go에서 유용한 라이브러리를 제공하여 개발자의 작업량을 줄이고 내용을 늘리는 것을 목표로 하는 라이브러리입니다.
생산성을 높이세요.

아래에는 몇 가지 기능이 언급되어 있습니다.

태스크 러너

이것이 해결하려는 기본적인 문제는 받은 요청을 기반으로 여러 작업을 실행하는 방법입니다.
다음 시나리오를 고려해보세요.

  • processA는 하나의 시나리오를 처리하고 오류가 발생할 수 있습니다.
  • processB는 두 번째 시나리오를 처리하고 오류가 발생할 수 있습니다.

보시다시피 이러한 모든 과정에서 오류가 발생할 수 있습니다. 본질적으로 Golang은 오류 처리에 있어 매우 장황합니다. 때로는 중복된 코드를 보고 싶지 않을 때도 있습니다.
이렇게 하면 가독성도 떨어집니다.

이제 또 다른 시나리오를 고려해 보세요.
processA에 대한 오류를 처리하고 processB에 대한 오류를 잊어버린 경우 Golang은 컴파일 시간 오류를 발생시켜 이 사례를 놓치게 만들지 않습니다. 작은 실수가 큰 혼란을 가져올 수 있습니다. 우리는 배송하기 전에 많은 과정을 따라야 하지만 항상 따라야 하는지 스스로에게 물어보십시오.

이 문제를 해결하기 위해 저는 여러분이 할 수 있는 접근 방식을 개발했습니다.
무엇이 중요한지, 그리고 fn을 보고 그것이 무엇을 하는지 이해하는 것이 얼마나 쉬운지 쓰는 데 더 집중했습니다. 이는 변수 섀도잉을 극복하는 데에도 도움이 됩니다. 여러 오류가 있는 경우 오류 섀도잉이 발생할 수 있으며 이는 좋지 않을 수 있습니다. 이 패턴을 따르고 올바른 코딩을 하면 이러한 이상한 시나리오를 피하는 데 도움이 됩니다.

예시 -

오류 처리가 중복되고 가독성이 떨어지는 코드입니다.

func FooBar() error {
    req := struct{
        isFoo bool
        isBar bool
    }{}
    ctx := context.TODO()
    err := processFoo(ctx, &req)
    if err != nil {
        return err
    }
    err = processBar(ctx, &req)
    if err != nil {
        return err
    }
    return nil
}

작업 실행기가 포함된 코드

func FooBar() error {
    req := struct{
        isFoo bool
        isBar bool
    }{}
    ctx := context.TODO()
    runner := NewSimpleTaskRunner(ctx, req)
    _, err := runner.
        Then(processFoo).
        Then(processBar).
        Result()
    return err
}

코드의 읽기 및 실행이 얼마나 좋아졌는지 확인할 수 있습니다. 이러한 사고 과정과 프레임워크는 코드의 가독성을 향상시킬 수 있습니다.

일상적인 활동을 좋아하는 사람

func FooBar() error {
    req := struct{
        isFoo bool
        isBar bool
    }{}
    ctx := context.TODO()
    runner := NewSimpleTaskRunner(ctx, req)
    _, err := runner.
        Parallel(processFooParallel).
        Parallel(processBarParallel).
        Result()
    return err
}

스트림 유틸리티

우리 모두는 유명한 람다와 화살표 함수를 알고 있습니다. 골랑
본질적으로 화살표 구문을 지원하지 않습니다. 있으면 좋을 것 같아요
그건 골랑에서요. 지금은
상황이 어려워졌나요? 이제 멋진 구현을 하게 되었습니다
당신을 위해 그 문제를 해결해 드리겠습니다. 아래 구현 후에는
이것이 어떻게 구현되었을지 스스로 생각해 보시기 바랍니다.

func TestMapRunner(t *testing.T) {
    // Create a map with some values
    floatingStrings := []string{"0.1", "0.2", "22", "22.1"}

    res, err := NewTransformer[string, float64](floatingStrings).
        Map(MapIt[string, float64](func(item string) (float64, error) { return strconv.ParseFloat(item, 64) })).
        Map(MapIt[float64, float64](func(item float64) (float64, error) { return item * 10, nil })).
        Result()
    if err != nil {
        t.Errorf("Testcase failed with error : %v", err)
        return
    }
    // Output: [0.1 0.2 22 22.1]
    t.Logf("Result: %v", res)
    assert.ElementsMatch(t, []any{float64(1), float64(2), float64(220), float64(221)}, res)

}

위의 예는 문자열을 float64로 변환하는 예입니다.
오류가 있는 경우 이를 처리합니다. 유일한 예외는 런타임 오류가 있을 수 있다는 점입니다
유형 캐스트 ​​문제 따라서 이에 주의하세요. 테스트케이스를 작성해 보세요
이 문제를 방지해야 합니다.

필터 및 매퍼 치명적인 콤보

이제 기능이 추가되어 필터링도 작동됩니다.
여러분 즐거운 시간 보내세요!!

func FooBar() error {
    req := struct{
        isFoo bool
        isBar bool
    }{}
    ctx := context.TODO()
    err := processFoo(ctx, &req)
    if err != nil {
        return err
    }
    err = processBar(ctx, &req)
    if err != nil {
        return err
    }
    return nil
}

멋진 것을 만들기 위해 프로젝트에 라이브러리를 가져옵니다.

-u github.com/mahadev-k/go-utils@v1.0.1을 받으세요

이 항목을 go.mod에 추가하세요.
예제 모듈에서와 같이 사용하세요.

func FooBar() error {
    req := struct{
        isFoo bool
        isBar bool
    }{}
    ctx := context.TODO()
    runner := NewSimpleTaskRunner(ctx, req)
    _, err := runner.
        Then(processFoo).
        Then(processBar).
        Result()
    return err
}

간단한 예

func FooBar() error {
    req := struct{
        isFoo bool
        isBar bool
    }{}
    ctx := context.TODO()
    runner := NewSimpleTaskRunner(ctx, req)
    _, err := runner.
        Parallel(processFooParallel).
        Parallel(processBarParallel).
        Result()
    return err
}

저장소 확인:
Github: https://github.com/mahadev-k/go-utils

이 글을 끝까지 읽고 마음에 들어하셨다고 생각하시면 됩니다. 저와 소통하고 싶으시다면
X에서 나를 팔로우하세요 - https://x.com/mahadev_k_
링크드인 - https://in.linkedin.com/in/mahadev-k-934520223
관심이 있으시면 이 저장소에 기여하기 위한 더 많은 아이디어를 제안해 주십시오.
감사합니다 ??

위 내용은 트랜스포머로 이동의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.