DEV Community

jguo
jguo

Posted on

Learning Golang 105

Custom Type and Receiver

define a type

type deck []string
Enter fullscreen mode Exit fullscreen mode

receiver

fun (d deck) print() {
   for i, card := range d {
     fmt.Printf(i, card)
   }
}
Enter fullscreen mode Exit fullscreen mode

call print func

d := deck{"card1", "card2"}
d.print()
Enter fullscreen mode Exit fullscreen mode

You can see that adding a receiver to a custom type, it extends the type's functionality.

Type assertions

A type assertion takes an interface value and extracts from it a value of the specified explicit type.
For example

res, ok := deck.([]string)
if ok {
    fmt.Printf("slice value is: %q\n", res)
} else {
    fmt.Printf("value is not a slice\n")
}
Enter fullscreen mode Exit fullscreen mode

Structs

define a struct

type person struct {
  firstName string
  lastName  string
}
Enter fullscreen mode Exit fullscreen mode

declare a struct

// alex := person{"Alex", "Anderson"} //rely on order.
alex := person{firstName: "Alex", lastName: "Anderson"}
alex.firstName = "Alex"

Enter fullscreen mode Exit fullscreen mode

Pointers

Go passes by value. It creates a copy when you pass a value.
& give the address of a value
* give the value of an address or define a pointer.

Turn address into value with *address.
Turn value into address with &value.

Value Types Reference Types
int slices
float maps
string channels
bool points
structs functions

when passing a reference type, go still make a copy, but reference type is a reference. So, it is like passing by reference.

Top comments (0)