Golang: Struct

By Xah Lee. Date: . Last updated: .

Struct is user-defined type. It defines a collection of “fields”, each field is a name and a value of a specific type.

Struct is similar to golang map, except that number of keys and key names are fixed.

Once you defined a struct type (with a given name), you can create struct of that name.

Note, struct is very important in golang. Because “object oriented programing”'s concept of interface and methods, are based on it.

Define a New Struct Type

Here's how to define a struct.

type Name struct { name1 type1 name2 type2 … }

here's how to create a struct you just defined:

Name{name1:val1, name2:val2 …}

or

Name{val1, val2 …}

package main

import "fmt"

// define a struct named PP
type PP struct {
	x int
	y int
}

func main() {
	// create a struct PP
	var x PP = PP{1, 2}

	// print struct with value only
	fmt.Printf("%v\n", x) // {1, 2}

	// print struct with field name and value
	fmt.Printf("%+v\n", x) // {x:1 y:2}
}

Create Struct: Struct Literals

A struct literal lets you create a value of a given struct type.

For example, if you have this struct type

type PP struct{ x, y int }

you can create a value by

var p1 = PP{x:3, y:4}

or

var p1 = PP{}

and use PP.x=3 etc to fill the field values later.

package main

import "fmt"

// define a struct type
type PP struct{ x, y int }

func main() {

	// create a struct of PP
	var p1 = PP{x: 3, y: 4}

	fmt.Printf("%#v\n", p1) // main.PP{x:3, y:4}

}

If a key is omitted, it defaults to its zero value.

[see Zero Value]

package main

import "fmt"

type PP struct{ x, y int }

func main() {
	var p1 = PP{y: 4}
	fmt.Printf("%#v\n", p1) // main.PP{x:0, y:4}
}

Alternatively, you can omit keys and only use values.

var p1 = PP{3, 4}

If you omit keys, you must omit all keys, and the order must be the same order as in the struct definition.

package main

import "fmt"

type PP struct{ x, y int }

func main() {
	var tt = PP{3, 4}
	fmt.Printf("%#v\n", tt) // main.PP{x:3, y:4}
}

Get/Set Field Value

Struct fields are accessed using a dot.

package main

import "fmt"

type PP struct {
	x int
	y int
}

func main() {

	v := PP{3, 4}

	// get a field value
	fmt.Println(v.x) // 3

	// set a field value
	v.x = 4
	fmt.Println(v.x) // 4
}

Print Struct

package main

import "fmt"

// using print struct

func main() {

	type PP struct {
		x int
		y int
	}

	var stc = PP{1, 2}
	fmt.Printf("%T\n", stc)  // main.PP
	fmt.Printf("%v\n", stc)  // {1 2}
	fmt.Printf("%+v\n", stc) // {x:1 y:2}
	fmt.Printf("%#v\n", stc) // main.PP{x:1, y:2}
}

Reference

The Go Programming Language Specification - The Go Programming Language#Struct_types

If you have a question, put $5 at patreon and message me.

Golang

  1. Compile, Run
  2. Source Encoding
  3. Package, Import
  4. Comment
  5. Print
  6. String
  7. String Functions
  8. Print String
  9. String Backslash Escape
  10. Rune
  11. Variable
  12. Zero Value
  13. Constant
  14. If Then Else
  15. Switch/Case
  16. Loop
  17. Basic Types
  18. Array
  19. Slice
  20. Map
  21. Struct
  22. Function
  23. Closure
  24. Pointer
  25. String, Byte Slice, Rune Slice
  26. regexp
  27. Read File
  28. Write to File
  29. Walk Dir
  30. Check File Exist
  31. System Call
  32. Get Script Path
  33. Defer
  34. Random Number

Examples

  1. Match Any Regexp
  2. Find String
  3. Find Replace
  4. Validate Links
  5. Generate Sitemap

Reference

  1. Go Spec