A structure or struct in Golang is a user-defined type that allows to group/combine items of possibly different types into a single type. Any real-world entity which has some set of properties/fields can be represented as a struct. This concept is generally compared with the classes in object-oriented programming. It can be termed as a lightweight class that does not support inheritance but supports composition. For Example, an address has a name, street, city, state, Pincode. It makes sense to group these three properties into a single structure address as shown below.
Declaring a structure:
type Address struct { name string street string city string state string Pincode int }
In the above, the type keyword introduces a new type. It is followed by the name of the type (Address) and the keyword struct to illustrate that we’re defining a struct. The struct contains a list of various fields inside the curly braces. Each field has a name and a type.
Note: We can also make them compact by combining the various fields of the same type as shown in the below example:
type Address struct { name, street, city, state string Pincode int }
To Define a structure: The syntax for declaring a structure:
var a Address
The above code creates a variable of a type Address which is by default set to zero. For a struct, zero means all the fields are set to their corresponding zero value. So the fields name, street, city, state are set to "", and Pincode is set to 0. You can also initialize a variable of a struct type using a struct literal as shown below:
var a = Address{"Akshay", "PremNagar", "Dehradun", "Uttarakhand", 252636}
Note:
- Always pass the field values in the same order in which they are declared in the struct. Also, you can’t initialize only a subset of fields with the above syntax.
- Go also supports the name: value syntax for initializing a struct (the order of fields is irrelevant when using this syntax). And this allows you to initialize only a subset of fields. All the uninitialized fields are set to their corresponding zero value. Example:
var a = Address{Name:"Akshay", street:"PremNagar", state:"Uttarakhand", Pincode:252636} //city:""
Go // Golang program to show how to // declare and define the struct package main import "fmt" // Defining a struct type type Address struct { Name string city string Pincode int } func main() { // Declaring a variable of a `struct` type // All the struct fields are initialized // with their zero value var a Address fmt.Println(a) // Declaring and initializing a // struct using a struct literal a1 := Address{"Akshay", "Dehradun", 3623572} fmt.Println("Address1: ", a1) // Naming fields while // initializing a struct a2 := Address{Name: "Anikaa", city: "Ballia", Pincode: 277001} fmt.Println("Address2: ", a2) // Uninitialized fields are set to // their corresponding zero-value a3 := Address{Name: "Delhi"} fmt.Println("Address3: ", a3) }
Output:
{ 0} Address1: {Akshay Dehradun 3623572} Address2: {Anikaa Ballia 277001} Address3: {Delhi 0}
How to access fields of a struct?
To access individual fields of a struct you have to use dot (.) operator.
Example:
Go // Golang program to show how to // access the fields of struct package main import "fmt" // defining the struct type Car struct { Name, Model, Color string WeightInKg float64 } // Main Function func main() { c := Car{Name: "Ferrari", Model: "GTC4", Color: "Red", WeightInKg: 1920} // Accessing struct fields // using the dot operator fmt.Println("Car Name: ", c.Name) fmt.Println("Car Color: ", c.Color) // Assigning a new value // to a struct field c.Color = "Black" // Displaying the result fmt.Println("Car: ", c) }
Output:
Car Name: Ferrari Car Color: Red Car: {Ferrari GTC4 Black 1920}
Pointers to a struct
Pointers in Go programming language or Golang is a variable which is used to store the memory address of another variable. You can also create a pointer to a struct as shown in the below example:
Go // Golang program to illustrate // the pointer to struct package main import "fmt" // defining a structure type Employee struct { firstName, lastName string age, salary int } func main() { // passing the address of struct variable // emp8 is a pointer to the Employee struct emp8 := &Employee{"Sam", "Anderson", 55, 6000} // (*emp8).firstName is the syntax to access // the firstName field of the emp8 struct fmt.Println("First Name:", (*emp8).firstName) fmt.Println("Age:", (*emp8).age) }
Output:
First Name: Sam Age: 55
The Golang gives us the option to use emp8.firstName instead of the explicit dereference (*emp8).firstName to access the firstName field. Example to show this is following:
Go // Golang program to illustrate // the pointer to struct package main import "fmt" // Defining a structure type Employee struct { firstName, lastName string age, salary int } // Main Function func main() { // taking pointer to struct emp8 := &Employee{"Sam", "Anderson", 55, 6000} // emp8.firstName is used to access // the field firstName fmt.Println("First Name: ", emp8.firstName) fmt.Println("Age: ", emp8.age) }
Output:
First Name: Sam Age: 55
In Go, a structure is a composite data type that groups together zero or more values of different types. Structures are defined using the type keyword, followed by the name of the new type, and the keyword struct. Here's an example:
In this example, we define a new type Person that has three fields: Name of type string, Age of type int, and Address of type string. We can then create new instances of the Person type and set the values of its fields:
Go func main() { person := Person{ Name: "John Doe", Age: 30, Address: "123 Main St", } fmt.Println(person) }
- Output:
{John Doe 30 123 Main St}
Advantages of using structures in Go:
- Encapsulation: Structures allow you to encapsulate related data together, making it easier to manage and modify the data.
- Code organization: Structures help to organize code in a logical way, which makes it easier to read and maintain.
- Flexibility: Structures allow you to define custom types with their own behavior, making it easier to work with complex data.
- Type safety: Structures provide type safety by allowing you to define the type of each field, which helps to prevent errors caused by assigning the wrong type of value.
- Efficiency: Structures in Go are very efficient, both in terms of memory usage and performance.
Disadvantages of using structures in Go:
- Complexity: Structures can make code more complex, especially if the structures have a large number of fields or methods.
- Boilerplate code: When defining large structures with many fields, it can be time-consuming to write out all of the field names and types.
- Inheritance: Go does not support inheritance, which can make it more difficult to work with large hierarchies of related data.
- Immutability: Go structures are mutable by default, which can make it more difficult to enforce immutability in your code.
- Overall, the advantages of using structures in Go typically outweigh the disadvantages, as they provide a powerful tool for managing and working with complex data. However, as with any programming technique, it's important to use structures judiciously and be aware of their limitations.
Here are some important points about structures in Go:
- Structures are composite data types that allow you to group together related data of different types.
- In Go, structures are defined using the type keyword, followed by the name of the new type, and the keyword struct.
- Structures can have fields that are of any type, including other structures.
- Fields can be accessed using the dot . operator.
- Structures in Go can also have methods associated with them.
- Methods can be defined on structures using the receiver syntax.
- Structures can be used to create custom types that encapsulate related data and behavior.
- Go structures are mutable by default, but you can create immutable structures by using pointers or methods that return a new instance of the structure.
- Structures in Go are very efficient in terms of both memory usage and performance.
- Go does not support inheritance, but you can use composition to achieve similar results.
Overall, structures in Go are a powerful tool for managing and working with complex data. By grouping related data together and associating behavior with it, you can create custom types that are more expressive and easier to work with.
Similar Reads
Go Tutorial Go or you say Golang is a procedural and statically typed programming language having the syntax similar to C programming language. It was developed in 2007 by Robert Griesemer, Rob Pike, and Ken Thompson at Google but launched in 2009 as an open-source programming language and mainly used in Google
2 min read
Overview
Go Programming Language (Introduction)Go is a procedural programming language. It was developed in 2007 by Robert Griesemer, Rob Pike, and Ken Thompson at Google but launched in 2009 as an open-source programming language. Programs are assembled by using packages, for efficient management of dependencies. This language also supports env
11 min read
How to Install Go on Windows?Prerequisite: Introduction to Go Programming Language Before, we start with the process of Installing Golang on our System. We must have first-hand knowledge of What the Go Language is and what it actually does? Go is an open-source and statically typed programming language developed in 2007 by Robe
3 min read
How to Install Golang on MacOS?Before, we start with the process of Installing Golang on our System. We must have first-hand knowledge of What the Go Language is and what it actually does? Go is an open-source and statically typed programming language developed in 2007 by Robert Griesemer, Rob Pike, and Ken Thompson at Google but
4 min read
Hello World in GolangHello, World! is the first basic program in any programming language. Letâs write the first program in the Go Language using the following steps:First of all open Go compiler. In Go language, the program is saved with .go extension and it is a UTF-8 text file.Now, first add the package main in your
3 min read
Fundamentals
Identifiers in Go LanguageIn programming languages, identifiers are used for identification purposes. In other words, identifiers are the user-defined names of the program components. In the Go language, an identifier can be a variable name, function name, constant, statement label, package name, or type. Example: package ma
3 min read
Go KeywordsKeywords or Reserved words are the words in a language that are used for some internal process or represent some predefined actions. These words are therefore not allowed to use as an identifier. Doing this will result in a compile-time error. Example: C // Go program to illustrate the // use of key
2 min read
Data Types in GoData types specify the type of data that a valid Go variable can hold. In Go language, the type is divided into four categories which are as follows: Basic type: Numbers, strings, and booleans come under this category.Aggregate type: Array and structs come under this category.Reference type: Pointer
7 min read
Go VariablesA typical program uses various values that may change during its execution. For Example, a program that performs some operations on the values entered by the user. The values entered by one user may differ from those entered by another user. Hence this makes it necessary to use variables as another
9 min read
Constants- Go LanguageAs the name CONSTANTS suggests, it means fixed. In programming languages also it is same i.e., once the value of constant is defined, it cannot be modified further. There can be any basic data type of constants like an integer constant, a floating constant, a character constant, or a string literal.
6 min read
Go OperatorsOperators are the foundation of any programming language. Thus the functionality of the Go language is incomplete without the use of operators. Operators allow us to perform different kinds of operations on operands. In the Go language, operators Can be categorized based on their different functiona
9 min read
Control Statements
Functions & Methods
Functions in Go LanguageIn Go, functions are blocks of code that perform specific tasks, which can be reused throughout the program to save memory, improve readability, and save time. Functions may or may not return a value to the caller.Example:Gopackage main import "fmt" // multiply() multiplies two integers and returns
3 min read
Variadic Functions in GoVariadic functions in Go allow you to pass a variable number of arguments to a function. This feature is useful when you donât know beforehand how many arguments you will pass. A variadic function accepts multiple arguments of the same type and can be called with any number of arguments, including n
3 min read
Anonymous function in Go LanguageAn anonymous function is a function that doesnât have a name. It is useful when you want to create an inline function. In Go, an anonymous function can also form a closure. An anonymous function is also known as a function literal.ExampleGopackage main import "fmt" func main() { // Anonymous functio
2 min read
main and init function in GolangThe Go language reserve two functions for special purpose and the functions are main() and init() function.main() functionIn Go language, the main package is a special package which is used with the programs that are executable and this package contains main() function. The main() function is a spec
2 min read
What is Blank Identifier(underscore) in Golang?_(underscore) in Golang is known as the Blank Identifier. Identifiers are the user-defined name of the program components used for the identification purpose. Golang has a special feature to define and use the unused variable using Blank Identifier. Unused variables are those variables that are defi
3 min read
Defer Keyword in GolangIn Go language, defer statements delay the execution of the function or method or an anonymous method until the nearby functions returns. In other words, defer function or method call arguments evaluate instantly, but they don't execute until the nearby functions returns. You can create a deferred m
3 min read
Methods in GolangGo methods are like functions but with a key difference: they have a receiver argument, which allows access to the receiver's properties. The receiver can be a struct or non-struct type, but both must be in the same package. Methods cannot be created for types defined in other packages, including bu
3 min read
Structure
Arrays
Slices
Slices in GolangSlices in Go are a flexible and efficient way to represent arrays, and they are often used in place of arrays because of their dynamic size and added features. A slice is a reference to a portion of an array. It's a data structure that describes a portion of an array by specifying the starting index
14 min read
Slice Composite Literal in GoThere are two terms i.e. Slice and Composite Literal. Slice is a composite data type similar to an array which is used to hold the elements of the same data type. The main difference between array and slice is that slice can vary in size dynamically but not an array. Composite literals are used to c
3 min read
How to sort a slice of ints in Golang?In Go, slices provide a flexible way to manage sequences of elements. To sort a slice of ints, the sort package offers a few straightforward functions. In this article we will learn How to Sort a Slice of Ints in Golang.ExampleGopackage main import ( "fmt" "sort" ) func main() { intSlice := []int{42
2 min read
How to trim a slice of bytes in Golang?In Go language slice is more powerful, flexible, convenient than an array, and is a lightweight data structure. The slice is a variable-length sequence which stores elements of a similar type, you are not allowed to store different type of elements in the same slice. In the Go slice of bytes, you ar
3 min read
How to split a slice of bytes in Golang?In Golang, you can split a slice of bytes into multiple parts using the bytes.Split function. This is useful when dealing with data like encoded strings, file contents, or byte streams that must be divided by a specific delimiter.Examplepackage mainimport ( "bytes" "fmt")func main() { // Initial byt
3 min read
Strings
Strings in GolangIn the Go language, strings are different from other languages like Java, C++, Python, etc. It is a sequence of variable-width characters where every character is represented by one or more bytes using UTF-8 Encoding. In other words, strings are the immutable chain of arbitrary bytes(including bytes
7 min read
How to Trim a String in Golang?In Go, strings are UTF-8 encoded sequences of variable-width characters, unlike some other languages like Java, python and C++. Go provides several functions within the strings package to trim characters from strings.In this article we will learn how to Trim a String in Golang.Examples := "@@Hello,
2 min read
How to Split a String in Golang?In Go language, strings differ from other languages like Java, C++, and Python. A string in Go is a sequence of variable-width characters, with each character represented by one or more bytes using UTF-8 encoding. In Go, you can split a string into a slice using several functions provided in the str
3 min read
Different ways to compare Strings in GolangIn Go, strings are immutable sequences of bytes encoded in UTF-8. You can compare them using comparison operators or the strings.Compare function. In this article,we will learn different ways to compare Strings in Golang.Examplepackage main import ( "fmt" "strings" ) func main() { s1 := "Hello" s2 :
2 min read
Pointers