Open In App

How to create a Struct Instance Using a Struct Literal in Golang?

Last Updated : 21 Feb, 2022
Improve
Improve
Like Article
Like
Save
Share
Report

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: 
 

  1. A key must be a field name declared in the struct type.
  2. 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.
  3. 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.
  4. A literal may omit the element list; such a literal evaluates to the zero value for its type.
  5. It is an error to specify an element for a non-exported field of a struct belonging to a different package.

Example 1:
 

C




// Golang program to show how to
// declare and define the struct
// using struct literal
package main
 
// importing required modules
import "fmt"
 
// Defining a struct type
type Student struct {
    name       string
    roll_no    int
    city       string
    department string
}
 
func main() {
 
    // Declaring a variable of a `struct` type
    // All the struct fields are initialized
    // with their zero value
    var x Student
    fmt.Println("Student0:", x)
 
    // Declaring and initializing a
    // struct using a struct literal
    // Fields should be initialised in
    // the same order as they are declared
    // in struct's definition
    x1 := Student{"Akshay", 1, "Lucknow", "Computer Science"}
     
    fmt.Println("Student1: ", x1)
 
    // You can specify keys for
    // their respective values
    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




// Golang program illustrating
// the use of string literals
package main
 
// importing required modules
import "fmt"
 
// Defining a struct type
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




// Golang program illustrating
// the use of string literals
package main
 
// importing required modules
import "fmt"
 
// Defining a struct type
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
 
// importing required modules
import "fmt"
 
// Defining a struct type
type Address struct {
    name, city string
    Pincode    int
}
 
func main() {
    // Only 1 key is specified here
    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 can see we are instantiating a Struct using new keyw
1 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 back to the first struct. Example 1: // Golang progr
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 integer and taking no parameter would look like. func
3 min read
Pointer to a Struct in Golang
Pointers in Golang is a variable which is used to store the memory address of another variable. Pointers in Golang is also termed as the special variables. The variables are used to store some data at a particular memory address in the system. You can also use a pointer to a struct. A struct in Golang is a user-defined type which allows to group/co
3 min read
Printing Struct Variables in Golang
Suppose, we need to print the structure with its fields corresponding value. We can do this with the help of package fmt which implements formatted I/O with functions analogous to C's printf and scanf. Let's first try if we just print the structure, what will happen. C/C++ Code package main import ("fmt") // Fields: structure to b
2 min read
How to find the type of Struct in Golang?
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 that has some set of properties/fields. Go does not support the concept of classes, structs are the only way t
3 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 data assigned to a struct. To use pointer to a st
2 min read
How to use Field Tags in the Definition of Struct Type in Golang?
Golang provide structures for the definition of a custom datatype. The concept of structure in Go is similar to the structure in C/C++. Example: type Person struct { Name string Aadhaar int Street string HouseNo int } Structures in Golang can be written to files like JSON for storing data on a hard drive or for sending over the network. JSON is a l
2 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 identical types are deeply equal if one of the fo
3 min read
How to Assign Default Value for Struct Field in Golang?
Default values can be assigned to a struct by using a constructor function. Rather than creating a structure directly, we can use a constructor to assign custom default values to all or some of its members. Example 1: // Golang program to assign // default values to a struct // using constructor function package main import ( "fmt" ) // d
2 min read