How to create a Struct Instance Using a Struct Literal in Golang?
Last Updated :
21 Feb, 2022
A structure or struct in Golang is a user-defined data type which is a composition of various data fields. Each data field has its own data type, which can be a built-in or another user-defined type. Struct represents any real-world entity which has some set of properties/fields.
For Example, a student has a name, roll number, city, department. It makes sense to group these four properties into a single structure address as shown below.
type Student struct {
name string
roll_no int
city string
department string
}
Syntax for declaring a structure:
var x Student
The above code creates a variable of type Student in which fields by default are set to their respective zero values.
Since struct is a composite data type, it is initialized using composite literals. Composite literals construct values for structs, arrays, slices, and maps where a single syntax is used for those types. Struct literals are used to create struct instances in Golang. You can create a struct instance using a struct literal as follows:
var d = Student{"Akshay", 1, "Lucknow", "Computer Science"}
We can also use a short declaration operator.
d := Student{"Akshay", 1, "Lucknow", "Computer Science"}
You must keep the following rules in mind while creating a struct literal:
- A key must be a field name declared in the struct type.
- An element list that does not contain any keys must list an element for each struct field in the order in which the fields are declared.
- An element list that contains keys does not need to have an element for each struct field. Omitted fields get the zero value for that field.
- A literal may omit the element list; such a literal evaluates to the zero value for its type.
- It is an error to specify an element for a non-exported field of a struct belonging to a different package.
Example 1:
C
package main
import "fmt"
type Student struct {
name string
roll_no int
city string
department string
}
func main() {
var x Student
fmt.Println("Student0:", x)
x1 := Student{"Akshay", 1, "Lucknow", "Computer Science"}
fmt.Println("Student1: ", x1)
x2 := Student{name: "Anita", roll_no: 2,
city: "Ballia", department: "Mechanical"}
fmt.Println("Student2: ", x2)
}
|
Output:
Student0: { 0 }
Student1: {Akshay 1 Lucknow Computer Science}
Student2: {Anita 2 Ballia Mechanical}
Uninitialized fields are set to their corresponding zero-values.
Example 2:
C
package main
import "fmt"
type Address struct {
name, city string
Pincode int
}
func main() {
add1 := Address{name: "Ram"}
fmt.Println("Address is:", add1)
}
|
Output:
Address is: {Ram 0}
It must be noted that uninitialized values are set to zero values when field:value initializer is used during instantiation. The following code will output an error.
Example:
C
package main
import "fmt"
type Address struct {
name, city string
Pincode int
}
func main() {
add1 := Address{"Ram"}
fmt.Println("Address is: ", add1)
}
|
Output:
Compilation Error: too few values in Address literal
If you specify least one key for an element, then you must specify all the other keys as well.
Example:
C
package main
import "fmt"
type Address struct {
name, city string
Pincode int
}
func main() {
add1 := Address{name: "Ram", "Mumbai", 221007}
fmt.Println("Address is: ", add1)
}
|
Output:
Compilation Error: mixture of field:value and value initializers
The above program throws an error as we have specified key for only one element and that creates a mixture of the field:value and value initializers. We should either go with the field:value or value initializers.
Similar Reads
How to instantiate Struct using new keyword in Golang?
A struct is mainly a holder for all other data types. By using a pointer to a struct we can easily manipulate/access the data assigned to a struct. We can instantiate Struct using the new keyword as well as using Pointer Address Operator in Golang as shown in the below example: Example: Here, you ca
1 min read
How to instantiate Struct Pointer Address Operator in Golang?
As pointers are the special variables that are used to store the memory address of another variable whereas, the struct is user-defined data type that consists of different types. A struct is mainly a holder for all other data types. By using a pointer to a struct we can easily manipulate/access the
2 min read
How to Copy Struct Type Using Value and Pointer Reference in Golang?
A structure or struct in Golang is a user-defined data type that allows to combine data types of different kinds and act as a record. A struct variable in Golang can be copied to another variable easily using the assignment statement(=). Any changes made to the second struct will not be reflected ba
2 min read
How to Read a File Line by Line to String in Golang?
To read a file line by line the bufio package Scanner is used. Let the text file be named as sample.txt and the content inside the file is as follows: GO Language is a statically compiled programming language, It is an open-source language. It was designed at Google by Rob Pike, Ken Thompson, and Ro
2 min read
How to iterate over an Array using for loop in Golang?
An array is a data structure of the collection of items of the similar type stored in contiguous locations. For performing operations on arrays, the need arises to iterate through it. A for loop is used to iterate over data structures in programming languages. It can be used here in the following wa
2 min read
How to fetch an Integer variable as String in GoLang?
To fetch an Integer variable as String, Go provides strconv package which has methods that return a string representation of int variable. There is nothing like an integer variable is converted to a string variable, rather, you have to store integer value as a string in a string variable. Following
2 min read
How to add a method to struct type in Golang?
Structs consist of data, but apart from this, structs also tell about the behavior in the form of methods. Methods attached to structs is very much similar to the definition of normal functions, the only variation is that you need to additionally specify its type. A normal function returning an inte
3 min read
How to Compare Equality of Struct, Slice and Map in Golang?
In Golang, reflect.DeepEqual function is used to compare the equality of struct, slice, and map in Golang. It is used to check if two elements are "deeply equal" or not. Deep means that we are comparing the contents of the objects recursively. Two distinct types of values are never deeply equal. Two
3 min read
How to Convert string to integer type in Golang?
Strings in Golang is a sequence of variable-width characters where each and every character is represented by one or more bytes using UTF-8 Encoding. In Go language, both signed and unsigned integers are available in four different sizes. In order to convert string to integer type in Golang, you can
2 min read
How to use strconv.QuoteToASCII() Function in Golang?
Go language provides inbuilt support to implement conversions to and from string representations of basic data types by strconv Package. This package provides a QuoteToASCII() function which is used to find a double-quoted Go string literal representing str and the returned string uses Go escape seq
2 min read