Junior — Middle
როგორ განვახორციელოთ არგუმენტების მნიშვნელობების გადაცემა ფუნქციას, თუ პარამეტრები პირდაპირი გამოძახებისას არ იქნა გადაცემული?
sobes.tech AI
პასუხი AI-სგან
გო ენაში, ზოგ სხვა ენების მსგავსად, დეფოლტული პარამეტრების მხარდაჭერა არ არსებობს. Argumentების მნიშვნელობების გადაცემის განხორციელებისთვის, თუ პარამეტრები აშკარად არ გადაეცათ, ჩვეულებრივ გამოიყენება ერთ-ერთი შემდეგი მიდგომა:
- მერყევი პარამეტრების გამოყენება (
...) — საშუალებას აძლევს გადმოიცეს ნებისმიერი რაოდენობის არგუმენტები და ფუნქციის შიგნით შემოწმდეს, გადაეცა თუ არა ისინი, და საჭიროების შემთხვევაში, დაყენდეს დეფოლტული მნიშვნელობები.
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 ენაში, ჩვეულებრივ, დეფოლტული პარამეტრების ქცევა დამატებითი შემოწმებებით ხორციელდება, რადგან სინტაქსი ამისთვის არ არსებობს.