If you start your programming career from c , then you know little about structs. Later Struct replace by classes in object oriented programming. However Go inherit from C. Structs : With the help of structs, programmer can develop any type of structure List Stack Queue Trees Graphs package main import ( "fmt" ) type Students struct{ ID int Name string } var record Students func Id(i int) int{ record.ID = i return record.ID } func Name(name string)string{ record.Name = name return record.Name } func main() { var id int = 0 var name string = "ali" fmt.Println("id:", Id(id), "name:", Name(name)) } When we want to create custom type such as Celsius type Celsius float64, same with structs type Students structs except type need data type and in structs. You tells that's struct. Inside Structs such as id, name called field. If field start with upper letter then it will export. var record Students record have fields which students. Instead, we use Students structs you can play with record just like students. User-defined-struct.Id (always"." follow struct). Working: If you run this example then you understand working. First i declare structs "record". then we pass 0 for id and ali for name. Then we print our data. Lets play with pointer: var r1 *Students = &record (*r1).ID = 0 (*r1).Name = "Ali" First i declare new variable name r1. (*r1).id , assign 0 value , not address to id, same with name and then print type Node struct{ Data int next *Node } var List Node func create_Node(i int)*Node{ List.Data = i List.next = nil return &List } func main(){ n := create_Node(0) fmt.Println(n) }