Чӣ гуна навиштани коди умумӣ дар Go вуҷуд дорад?
sobes.tech AI
Ҷавоб аз AI
Дар Go пешниҳод шудаанд роҳҳои асосии навиштани коди умумӣ:
-
Интерфейсҳо: Имкон медиҳанд, ки функсияҳоро нависед, ки бо ҳар гуна намудҳо кор мекунанд, ки ба маҷмӯи муайяншудаи методҳо ҷавобгӯ мебошанд.
// Тартиби интерфейси Reader type Reader interface { Read(p []byte) (n int, err error) } // Функсия, ки бо ҳар гуна намуд, ки Reader-ро иҷро мекунад, кор мекунад func ProcessData(r Reader) error { // хондани маълумот аз Reader return nil } -
Интерфейси холӣ (
interface{}): Навъи умумӣ, ки метавонад ҳар гуна арзишро ифода кунад. Пеш аз истифода бояд навъи онро табдил дод.func PrintAnything(v interface{}) { // Табдил додан бо санҷиш if s, ok := v.(string); ok { fmt.Println("Ин сатр:", s) } else if i, ok := v.(int); ok { fmt.Println("Ин адади пурра:", i) } } -
Дженерикҳо (Generics) / Намудҳои параметрӣ (type parameters): Имкон медиҳанд, ки функсияҳо ва намудҳоро нависед, ки бо маҷмӯи намудҳои ихтиёрӣ кор мекунанд, ки дар вақти эълон муайян карда мешаванд. Аз Go 1.18 илова шудаанд.
// Функсия, ки бо ломтҳои ҳар гуна намуд T кор мекунад func PrintSlice[T any](s []T) { for _, v := range s { fmt.Println(v) } } // Намуди умумии Pair бо параметрҳои T1 ва T2 type Pair[T1, T2 any] struct { First T1 Second T2 } -
Рефлексия (
reflect): Имкон медиҳад, ки бо намудҳо ва арзишҳо дар вақти иҷрои барномаро таҳқиқ ва муошират кунед. Аксар вақт барои сценарийҳои мураккаб истифода мешавад, аммо метавонад камтар самаранок ва бехатар бошад, нисбат ба дигар роҳҳо.import "reflect" func GetTypeName(v interface{}) string { return reflect.TypeOf(v).Name() }
Интихоби роҳ аз вазифаи мушаххас ва сатҳи талаботи чандирӣ ва самаранокӣ вобаста аст. Дженерикҳо роҳи беҳтарин барои эҷоди алгоритмҳои умумӣ ва структураҳои додаҳо дар Go-и муосир мебошанд. Интерфейсҳо ҳанӯз механизмҳои асосӣ барои полиморфизм ва муайян кардани рафтор мебошанд. Интерфейсҳои холӣ ва рефлексия бештар барои ҳолатҳои махсус истифода мешаванд.