Junior — Middle
Ինչպե՞ս իրականացնել արգումենտների արժեքների փոխանցումը ֆունկցիային, եթե պարամետրերը բացահայտորեն չեն փոխանցվել կանչի ժամանակ։
sobes.tech AI
Պատասխան AI-ից
Go լեզվում չկա աջակցություն նախնական պարամետրերի համար, ինչպես որոշ այլ լեզուներում։ Որպեսզի իրականացնել փոխանցումը արգումենտների արժեքների, երբ պարամետրերը բացահայտորեն չեն փոխանցվել, սովորաբար կիրառվում են հետևյալ մոտեցումներից մեկը՝
- Փոփոխական պարամետրերի օգտագործում (
...) — թույլ է տալիս փոխանցել ցանկացած քանակի արգումենտներ, և ֆունկցիայի ներսում ստուգել, փոխանցվել են արդյոք, և անհրաժեշտության դեպքում սահմանել նախնական արժեքներ։
func օրինակ(args ...int) {
var արժեք int
if len(args) > 0 {
արժեք = args[0]
} else {
արժեք = 42 // նախնական արժեք
}
fmt.Println(արժեք)
}
- Կառուցվածքի փոխանցում պարամետրերով — ստեղծվում է պարամետրերով կառուցվածք, և եթե դաշտերը լրացված չեն, ֆունկցիայի ներսում սահմանվում են նախնական արժեքներ։
type Config struct {
Param int
}
func օրինակ(cfg Config) {
if cfg.Param == 0 {
cfg.Param = 42 // նախնական արժեք
}
fmt.Println(cfg.Param)
}
- Ցանցային նշաններ և nil ստուգում — եթե պարամետրը փոխանցվում է որպես նշան, այն կարող է ստուգվել, փոխանցվել է արդյոք, և սահմանել նախնական արժեք։
Այսպիսով, Go լեզվում սովորաբար իրականացնում են նախնական պարամետրերի վարքագիծը լրացուցիչ ստուգումներով՝ ֆունկցիայի ներսում, քանի որ սինտաքսը չի նախատեսում նախնական պարամետրեր։