Sobes.tech
Junior — Middle

Ինչպե՞ս իրականացնել արգումենտների արժեքների փոխանցումը ֆունկցիային, եթե պարամետրերը բացահայտորեն չեն փոխանցվել կանչի ժամանակ։

sobes.tech AI

Պատասխան AI-ից

Go լեզվում չկա աջակցություն նախնական պարամետրերի համար, ինչպես որոշ այլ լեզուներում։ Որպեսզի իրականացնել փոխանցումը արգումենտների արժեքների, երբ պարամետրերը բացահայտորեն չեն փոխանցվել, սովորաբար կիրառվում են հետևյալ մոտեցումներից մեկը՝

  1. Փոփոխական պարամետրերի օգտագործում (...) — թույլ է տալիս փոխանցել ցանկացած քանակի արգումենտներ, և ֆունկցիայի ներսում ստուգել, փոխանցվել են արդյոք, և անհրաժեշտության դեպքում սահմանել նախնական արժեքներ։
func օրինակ(args ...int) {
    var արժեք int
    if len(args) > 0 {
        արժեք = args[0]
    } else {
        արժեք = 42 // նախնական արժեք
    }
    fmt.Println(արժեք)
}
  1. Կառուցվածքի փոխանցում պարամետրերով — ստեղծվում է պարամետրերով կառուցվածք, և եթե դաշտերը լրացված չեն, ֆունկցիայի ներսում սահմանվում են նախնական արժեքներ։
type Config struct {
    Param int
}

func օրինակ(cfg Config) {
    if cfg.Param == 0 {
        cfg.Param = 42 // նախնական արժեք
    }
    fmt.Println(cfg.Param)
}
  1. Ցանցային նշաններ և nil ստուգում — եթե պարամետրը փոխանցվում է որպես նշան, այն կարող է ստուգվել, փոխանցվել է արդյոք, և սահմանել նախնական արժեք։

Այսպիսով, Go լեզվում սովորաբար իրականացնում են նախնական պարամետրերի վարքագիծը լրացուցիչ ստուգումներով՝ ֆունկցիայի ներսում, քանի որ սինտաքսը չի նախատեսում նախնական պարամետրեր։