package main import "fmt" type person struct { name string age int } func newPerson(name string) *person { p := person{name: name} p.age = 42 return &p } func main() { fmt.Println(person{"Bob", 20}) fmt.Println(person{"Alice", 30}) // fmt.Println(person{"Fred"}) // will zero value age. Compiler don't like it actually. fmt.Println(&person{"Ann", 40}) fmt.Println(newPerson("Jon")) s := person{name: "Sean", age: 50} fmt.Println(s.name) sp := &s fmt.Println(sp.age) sp.age = 51 fmt.Println(sp.age) // If a single use struct you can omit the decalre the struct type and just use it directly on the initialization. dog := struct { name string isGood bool }{ "Mike", true, } fmt.Println(dog) }