Triển khai thuật toán cân bằng trong Golang 1.18 Generic Style

Mar 22 2022
Lâu lắm rồi ..

Một thời gian dài trước đây ...
Chúng tôi đã gặp phải các chức năng triển khai dư thừa để đáp ứng các yêu cầu của chúng tôi

Ví dụ:
Chúng tôi muốn triển khai một hàm Min-Max chuyển đối số 2 số sau đó trả về giá trị tối thiểu hoặc tối đa trở lại kết quả như thế này.

hàm tối thiểu

nhưng phiên bản trước của Golang (cũ hơn 1.18) không cho phép chúng tôi làm như vậy, chúng tôi phải chỉ định kiểu chính xác như uint, int, float, float64. Tôi đoán bạn có thể tưởng tượng nó phức tạp như thế nào? Đó là bạn phải triển khai tất cả các loại có thể có mà bạn có thể quan tâm

Bây giờ chúng ta hãy xem xét gói tiêu chuẩn mà Golang cung cấp trong gói toán học

hàm min-max trong gói tiêu chuẩn

Cái quái gì vậy! không có Max-Min cho uint, int64, v.v.…
Chúng ta phải chuyển tất cả các loại vào float64, điều đó hoàn toàn vô nghĩa!

Hãy tự mình thực hiện nó!

hàm min-max trong Golang 1.18

Ôi Chúa ơi! nó dễ đọc và linh hoạt hơn, phải không?

Bây giờ chúng ta hãy chuyển sang chủ đề chính của chúng ta với tiêu đề “ Triển khai thuật toán cân bằng trong kiểu chung Golang 1.18

Chúng tôi muốn thực hiện một thuật toán cân bằng như vòng lặp, ít kết nối nhất và chúng tôi muốn chuyển bất cứ thứ gì muốn cân bằng không chỉ Máy chủ mà là những thứ chúng tôi muốn.

Đầu tiên, chúng tôi triển khai một thuật toán tổng hợp

vòng tròn

Tôi khá chắc rằng bạn có thể tò mò cái quái gì getZero [T] ()
Trong các dòng, 22–26 chỉ cần kiểm tra xem ngữ cảnh có bị vượt quá hay không nếu đã vượt quá. Tôi muốn trả về giá trị nil như một biến đầu tiên và chính xác là lỗi như một biến thứ hai
nhưng chúng tôi sử dụng một kiểu chung có nghĩa là chúng tôi không thể trả về nil, vì vậy tôi đã tạo một hàm sơ khai đại diện cho nil

hàm nil

Ồ, chờ đã! cái quái gì vậy ??? Nó có tương tự với Any in typecript không ?????
Hãy xem cách triển khai tiêu chuẩn trong Golang

Hahaha nó chỉ là một bí danh của giao diện {}

Bây giờ hãy triển khai kết nối ít nhất

thuật toán ít kết nối nhất

Theo quan điểm của tôi, nó phức tạp hơn so với cách tiếp cận vòng tròn. Tuy nhiên, đó không phải là ý chính của bài viết này.

Bây giờ triển khai giao diện LoadBalancer

Giao diện LoadBalancer

Nó khá rõ ràng, phải không?

Ví dụ dưới đây

số dư đơn giản
Cách sử dụng ví dụ

Cảm ơn bạn đã đọc. Chúc bạn viết mã vui vẻ

© Copyright 2021 - 2023 | vngogo.com | All Rights Reserved