instruction: Explain go by example: structs
output: Go by Example
  : Structs
  Go’s
  structs
  are typed collections of fields.
  They’re useful for grouping data together to form
  records.
  package
  main
  import
  "fmt"
  This
  person
  struct type has
  name
  and
  age
  fields.
  type
  person
  struct
  {
  name
  string
  age
  int
  }
  newPerson
  constructs a new person struct with the given name.
  func
  newPerson
  (
  name
  string
  )
  *
  person
  {
  Go is a garbage collected language; you can safely
  return a pointer to a local variable - it will only
  be cleaned up by the garbage collector when there
  are no active references to it.
  p
  :=
  person
  {
  name
  :
  name
  }
  p
  .
  age
  =
  42
  return
  &
  p
  }
  func
  main
  ()
  {
  This syntax creates a new struct.
  fmt
  .
  Println
  (
  person
  {
  "Bob"
  ,
  20
  })
  You can name the fields when initializing a struct.
  fmt
  .
  Println
  (
  person
  {
  name
  :
  "Alice"
  ,
  age
  :
  30
  })
  Omitted fields will be zero-valued.
  fmt
  .
  Println
  (
  person
  {
  name
  :
  "Fred"
  })
  An
  &
  prefix yields a pointer to the struct.
  fmt
  .
  Println
  (
  &
  person
  {
  name
  :
  "Ann"
  ,
  age
  :
  40
  })
  It’s idiomatic to encapsulate new struct creation in constructor functions
  fmt
  .
  Println
  (
  newPerson
  (
  "Jon"
  ))
  Access struct fields with a dot.
  s
  :=
  person
  {
  name
  :
  "Sean"
  ,
  age
  :
  50
  }
  fmt
  .
  Println
  (
  s
  .
  name
  )
  You can also use dots with struct pointers - the
  pointers are automatically dereferenced.
  sp
  :=
  &
  s
  fmt
  .
  Println
  (
  sp
  .
  age
  )
  Structs are mutable.
  sp
  .
  age
  =
  51
  fmt
  .
  Println
  (
  sp
  .
  age
  )
  If a struct type is only used for a single value, we don’t
  have to give it a name. The value can have an anonymous
  struct type. This technique is commonly used for
  table-driven tests
  .
  dog
  :=
  struct
  {
  name
  string
  isGood
  bool
  }{
  "Rex"
  ,
  true
  ,
  }
  fmt
  .
  Println
  (
  dog
  )
  }
  $
  go run structs.go
  {Bob 20}
  {Alice 30}
  {Fred 0}
  &{Ann 40}
  &{Jon 42}
  Sean
  50
  51
  {Rex true}
  Next example:
  Methods
  .
  by
  Mark McGranaghan
  and
  Eli Bendersky
  |
  source
  |
  license