Shermans's Notes
Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Back to homepage

Golang - Types

Structs

Basics

Similar to C/C++, you can declare custom types :

1
2
3
type Tuple struct {
	X, Y, Z, W float64
}

You can also declare an alias to a type:

1
2
3
type Foo String

var bar Foo = "FooString"

However, it is essential to note that Foo and string are now two different types. Since 1.9, you are able to tell the compiler that a type alias is just another name but should be considered the same type overall.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
type Tuple struct {
	X, Y, Z, W float64
}

type Point = Tuple
type Vector = Tuple


func NewTuple(x, y, z, w float64) *Tuple {
	t := new(Tuple)

	t.X = x
	t.Y = y
	t.Z = z
	t.W = w

	return t
}

func NewPoint(x, y, z float64) *Point {
	return NewTuple(x, y, z, 0)
}

func NewVector(x, y, z float64) *Vector {
	return NewTuple(x, y, z, 1)
}

Anonymous Structs

Structs can be declared on the fly, bound to the current scope:

1
2
3
4
5
6
7
8
9
func foo(){

	type Bar {
		baz String
	}

	s := Bar{ baz: "I like trains" }
	...
}

You can also define structs inline with an assignment and assign values at the same time:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
func foo() {

	m := map[string]struct {
		Foo int
	
	}{
		"keyA" : { Foo: 1},
		"keyB" : { Foo: 2},
	}

}