initial commit
This commit is contained in:
commit
493ce92e02
62 changed files with 1213 additions and 0 deletions
58
structs/structs.go
Normal file
58
structs/structs.go
Normal file
|
|
@ -0,0 +1,58 @@
|
|||
package main
|
||||
|
||||
import "fmt"
|
||||
// Structs are typed collections of fields.
|
||||
// they're useful for grouping data together to form records
|
||||
// the 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
|
||||
// you can safely return a pointer to local variable as a local variable
|
||||
// will survive the scope of the func
|
||||
func newPerson(name string) *person {
|
||||
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 initalizing the 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})
|
||||
//its idiomatic to encapsulate new struct creation in constructor functions
|
||||
fmt.Println(newPerson("Jon"))
|
||||
|
||||
//access struct fields with . notation
|
||||
s := person{name: "Sean", age: 50}
|
||||
fmt.Println(s.name)
|
||||
|
||||
// you can also use . notation 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 dont have to give it a name
|
||||
// the value can have an anonymous struct type.
|
||||
// this tech is used commonly in table driven tests
|
||||
dog := struct {
|
||||
name string
|
||||
isGood bool
|
||||
}{
|
||||
"Rex",
|
||||
true,
|
||||
}
|
||||
fmt.Println(dog)
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue