Структуре у Голангу су једна од најчешће коришћених и начин да се креирају кориснички дефинисани типови.
У овоме ћу покрити све основе о структурама и како их користити у вашим го програмима са неколико примера.
Хајде да почнемо!
Преглед садржаја
Увод
А струцт је збирка вишеструких поља података са њиховим дефинисаним типовима података груписаним заједно. Они су корисни за груписање података како би се формирали прилагођени записи. Структура се састоји од уграђених и кориснички дефинисаних типова (сама структура је кориснички дефинисани тип).
Структуре у Голангу су променљиве, тј. могу се мењати кроз програм.
Структуре помажу у побољшању укупног квалитета кода омогућавајући нам да креирамо и прослеђујемо сложене структуре података кроз више модула. Замислите да проследите 10 параметара у функцију, ускоро ћете побећи од кода. Управо због тога су структуре корисне, сада уместо 10 параметара једноставно прослеђујете једну структуру тој функцији.
Структура је декларисана помоћу две кључне речи – тип анд струцт. Обмотан је витичастим заградама (баш као класе у Јави) – који садржи скуп поља која имају дефинисан тип и идентификатор (име). О детаљима имплементације расправљамо у следећем одељку.
Ако долазите из позадине објектно оријентисаног програмирања (ООП), структуру можете замислити као класу, али без наслеђа.
Декларисање структура
Сада, када разумете шта је структура и зашто се користи, време је да научите како да декларишете структуре. Основни скелет структуре изгледа као –
type name_of_struct struct { field1 data_type_field1 field2 data_type_field2 }
Овде су тип и структура кључне речи, док структура садржи више поља са њиховим дефинисаним типом података.
Хајде да видимо пример –
package main import ( "fmt" ) type User struct { name string age int bankBalance float32 } func main() { var user User fmt.Println(user) }
Овде дефинишемо корисничку структуру која се састоји од стринг, инт и флоат32 поља. У маин() декларишемо нашу структуру као корисника и штампамо је! Излаз који добијамо је нула/празна вредност структуре пошто је још нисмо иницијализовали! Тхе нулта вредност је у основи нула вредности сваког поља.
{ 0 0}
Иницијализација структура
У претходном одељку научили смо како да декларишемо структуре. Сада бисмо желели да им иницијализујемо или доделимо вредности. Проверите код у наставку како то радимо –
package main import ( "fmt" ) type User struct { name string age int bankBalance float32 } func main() { // With field names user1 := User{ name: "Mohit", age: 24, bankBalance: 100.0, } // Without field names user2 := User{"Nidhi", 21, 1000.0} fmt.Println(user1) fmt.Println(user2) }
Сам код објашњава како иницијализујемо две структуре са и без имена поља. Овде ће излаз бити –
{Mohit 24 100} {Nidhi 21 1000}
У горњем случају, ако једно од поља није иницијализовано, онда то поље подразумевано поставља нулту вредност.
user1 := User{ name: "Mohit", age: 24, } // Output - { Mohit 24 0.0 }
Постоји још један начин да се креирају структуре користећи нову кључну реч. Погледаћемо како га користити у следећем одељку.
Приступ пољима структуре
Сада знамо како да креирамо и иницијализујемо структуре, да видимо како да приступимо пољима структуре. За ово нам Голанг обезбеђује оператор тачке. Настављајући са претходним примером, приступимо пољима за име и узраст и одштампамо их.
package main import ( "fmt" ) type User struct { name string age int bankBalance float32 } func main() { // With field names user := User{ name: "Mohit", age: 24, bankBalance: 100.0, } fmt.Println(user.name) fmt.Println(user.age) fmt.Println(user.bankBalance) }
Овде користимо струцт_наме.фиелд_наме за приступ пољима у структури. Излаз горњег кода ће бити –
Mohit 24 100
Као што је раније поменуто, можемо креирати структуре са новом кључном речи. Да видимо како –
user := new(User) user.name = "Mohit" user.age = 24 user.bankBalance = 100.0 fmt.Println(user) // Output - &{Mohit 24 100}
Нова кључна реч враћа показивач на иницијализовану структуру. У Голангу не морате експлицитно да дереференцирате показивач, али фмт.Принтлн(*усер) би резултирао истим излазом.
Угнежђене структуре
Структуре у голангу могу да садрже и друге типове које дефинише корисник. Дакле, структура може да садржи друге угнежђене структуре.
package main import ( "fmt" ) type User struct { name string age int bankBalance float32 roleDetails RoleDetails } type RoleDetails struct { position string team string } func main() { roleDetailForMohit := RoleDetails{ position: "Software Engineer", team: "Transport", } user := User{ name: "Mohit", age: 24, bankBalance: 100.0, roleDetails: roleDetailForMohit, } fmt.Println(user) }
У коду изнад, имамо структуру РолеДетаилс као део корисничке структуре. Излаз ће бити –
{Mohit 24 100 {Software Engineer Transport}}
Ако желите да приступите ролеДетаилс, то можете учинити помоћу истог оператора тачке –
усер.ролеДетаилс.поситион
Структура једнакости
Две структуре су једнаке ако је свако од поља које имају једнака (и уграђена и кориснички дефинисана), али нису сви типови података упоредиви. (мапа није директно упоредива). Хајде да видимо пример да покажемо једнакост.
package main import ( "fmt" ) type User struct { name string age int bankBalance float32 } func main() { user1 := User{ name: "Mohit", age: 24, bankBalance: 100.0, } user2 := User{ name: "Mohit", age: 24, bankBalance: 100.0, } user3 := User{ name: "Nidhi", age: 21, bankBalance: 1000.0, } if user1 == user2 { fmt.Println("user1 and user2 are equal") } else { fmt.Println("user1 and user2 are not equal") } if user1 == user3 { fmt.Println("user1 and user3 are equal") } else { fmt.Println("user1 and user3 are not equal") } }
Празне структуре и структуре нулте вредности су једнаке. Редослед поља није битан, у основи, свако поље треба да одговара за једнакост. Излаз за горњи код ће бити –
user1 and user2 are equal user1 and user3 are not equal
Закључак
Сјајно!
Сада сте спремни да користите структуре у голангу. Покрили смо све основе као што су декларација, иницијализација и приступ пољима структуре. Такође смо погледали како да упоредимо две структуре и чак смо имплементирали угнежђену структуру. Ево неких ресурса да сазнате више о структурама –
Има још много тога да се научи о структурама, али за сада је то добар почетак. Надам се да сте научили нешто ново!
Наставите да истражујете. Наставити са учењем!