add: more content to structs
This commit is contained in:
@ -1,65 +0,0 @@
|
||||
// For more tutorials: https://blog.learngoprogramming.com
|
||||
//
|
||||
// Copyright © 2018 Inanc Gumus
|
||||
// Learn Go Programming Course
|
||||
// License: https://creativecommons.org/licenses/by-nc-sa/4.0/
|
||||
//
|
||||
|
||||
package main
|
||||
|
||||
import "fmt"
|
||||
|
||||
func main() {
|
||||
/*
|
||||
USING VARIABLES
|
||||
*/
|
||||
|
||||
// var (
|
||||
// name, lastname string
|
||||
// age int
|
||||
// )
|
||||
//
|
||||
// name, lastname = "Pablo", "Picasso"
|
||||
// age = 95
|
||||
//
|
||||
// name2, lastname2 := "Sigmund", "Freud"
|
||||
// age2 := 83
|
||||
//
|
||||
// fmt.Println("Picasso:", name, lastname, age)
|
||||
// fmt.Println("Freud :", name2, lastname2, age2)
|
||||
|
||||
/*
|
||||
USING STRUCT VARIABLES
|
||||
*/
|
||||
|
||||
// // declare a struct variable
|
||||
// var picasso struct {
|
||||
// name, lastname string
|
||||
// age int
|
||||
// }
|
||||
|
||||
// create a new struct type
|
||||
type person struct {
|
||||
name, lastname string
|
||||
age int
|
||||
}
|
||||
|
||||
// short-declare struct variable without field names
|
||||
// you cannot omit values when you initialize without field names
|
||||
picasso := person{
|
||||
name: "Pablo",
|
||||
lastname: "Picasso",
|
||||
age: 95,
|
||||
}
|
||||
|
||||
// short-declare struct variable with field names
|
||||
// omitted fields will be zeroed
|
||||
freud := person{
|
||||
name: "Sigmund",
|
||||
lastname: "Freud",
|
||||
age: 83,
|
||||
}
|
||||
|
||||
fmt.Printf("Picasso: %#v\n\n", picasso)
|
||||
fmt.Printf("Freud : %#v\n\n", freud)
|
||||
}
|
51
x-tba/2-structs/01-intro/main.go
Normal file
51
x-tba/2-structs/01-intro/main.go
Normal file
@ -0,0 +1,51 @@
|
||||
// For more tutorials: https://blog.learngoprogramming.com
|
||||
//
|
||||
// Copyright © 2018 Inanc Gumus
|
||||
// Learn Go Programming Course
|
||||
// License: https://creativecommons.org/licenses/by-nc-sa/4.0/
|
||||
//
|
||||
|
||||
package main
|
||||
|
||||
import "fmt"
|
||||
|
||||
func main() {
|
||||
type Movie struct {
|
||||
Title string
|
||||
Genre string
|
||||
Rating int
|
||||
}
|
||||
|
||||
type Rental struct {
|
||||
Address string
|
||||
Rooms int
|
||||
Size int
|
||||
Price int
|
||||
}
|
||||
|
||||
type Person struct {
|
||||
Name string
|
||||
Lastname string
|
||||
Age int
|
||||
}
|
||||
|
||||
person1 := Person{Name: "Pablo", Lastname: "Picasso", Age: 91}
|
||||
person2 := Person{Name: "Sigmund", Lastname: "Freud", Age: 83}
|
||||
|
||||
fmt.Printf("person1: %+v\n", person1)
|
||||
fmt.Printf("person2: %+v\n", person2)
|
||||
|
||||
type VideoGame struct {
|
||||
Title string
|
||||
Genre string
|
||||
Published bool
|
||||
}
|
||||
|
||||
pacman := VideoGame{
|
||||
Title: "Pac-Man",
|
||||
Genre: "Arcade Game",
|
||||
Published: true,
|
||||
}
|
||||
|
||||
fmt.Printf("pacman: %+v\n", pacman)
|
||||
}
|
@ -1,53 +0,0 @@
|
||||
// For more tutorials: https://blog.learngoprogramming.com
|
||||
//
|
||||
// Copyright © 2018 Inanc Gumus
|
||||
// Learn Go Programming Course
|
||||
// License: https://creativecommons.org/licenses/by-nc-sa/4.0/
|
||||
//
|
||||
|
||||
package main
|
||||
|
||||
import "fmt"
|
||||
|
||||
func main() {
|
||||
// create a new struct type
|
||||
type person struct {
|
||||
name, lastname string
|
||||
age int
|
||||
}
|
||||
|
||||
picasso := person{"Pablo", "Picasso", 95}
|
||||
freud := person{name: "Sigmund", lastname: "Freud", age: 83}
|
||||
|
||||
// picasso.age++
|
||||
// picasso.name = "Master"
|
||||
|
||||
master := picasso
|
||||
// var master person
|
||||
// master.name = picasso.name
|
||||
// master.lastname = picasso.lastname
|
||||
// master.age = picasso.age
|
||||
|
||||
master = freud
|
||||
master.name = "Master"
|
||||
master.age++
|
||||
|
||||
for _, p := range []person{picasso, freud, master} {
|
||||
if p == picasso {
|
||||
// if p.name == picasso.name &&
|
||||
// p.lastname == picasso.lastname &&
|
||||
// p.age == picasso.age {
|
||||
|
||||
// p is a copy
|
||||
p.name = "Raphael"
|
||||
|
||||
fmt.Printf("%s's age is %d\n", p.name, p.age)
|
||||
}
|
||||
}
|
||||
|
||||
// Picasso is still the same
|
||||
fmt.Printf("\n%s's age is %d\n", picasso.name, picasso.age)
|
||||
|
||||
// type team struct{ scores []int }
|
||||
// _ = team{} == team{}
|
||||
}
|
63
x-tba/2-structs/02-basics/main.go
Normal file
63
x-tba/2-structs/02-basics/main.go
Normal file
@ -0,0 +1,63 @@
|
||||
// For more tutorials: https://blog.learngoprogramming.com
|
||||
//
|
||||
// Copyright © 2018 Inanc Gumus
|
||||
// Learn Go Programming Course
|
||||
// License: https://creativecommons.org/licenses/by-nc-sa/4.0/
|
||||
//
|
||||
|
||||
package main
|
||||
|
||||
import "fmt"
|
||||
|
||||
func main() {
|
||||
/*
|
||||
USING VARIABLES
|
||||
*/
|
||||
|
||||
var (
|
||||
name, lastname string
|
||||
age int
|
||||
|
||||
name2, lastname2 string
|
||||
age2 int
|
||||
)
|
||||
|
||||
name, lastname, age = "Pablo", "Picasso", 95
|
||||
name2, lastname2, age = "Sigmund", "Freud", 83
|
||||
|
||||
fmt.Println("Picasso:", name, lastname, age)
|
||||
fmt.Println("Freud :", name2, lastname2, age2)
|
||||
|
||||
// var picasso struct {
|
||||
// name, lastname string
|
||||
// age int
|
||||
// }
|
||||
|
||||
// var freud struct {
|
||||
// name, lastname string
|
||||
// age int
|
||||
// }
|
||||
|
||||
// create a new struct type
|
||||
type person struct {
|
||||
name, lastname string
|
||||
age int
|
||||
}
|
||||
|
||||
// picasso := person{name: "Pablo", lastname: "Picasso", age: 91}
|
||||
picasso := person{
|
||||
name: "Pablo",
|
||||
lastname: "Picasso",
|
||||
age: 91,
|
||||
}
|
||||
|
||||
var freud person
|
||||
freud.name = "Sigmund"
|
||||
freud.lastname = "Freud"
|
||||
freud.age = 83
|
||||
|
||||
fmt.Printf("\n%s's age is %d\n", picasso.lastname, picasso.age)
|
||||
|
||||
fmt.Printf("\nPicasso: %#v\n", picasso)
|
||||
fmt.Printf("Freud : %#v\n", freud)
|
||||
}
|
94
x-tba/2-structs/03-compare-assign/main.go
Normal file
94
x-tba/2-structs/03-compare-assign/main.go
Normal file
@ -0,0 +1,94 @@
|
||||
// For more tutorials: https://blog.learngoprogramming.com
|
||||
//
|
||||
// Copyright © 2018 Inanc Gumus
|
||||
// Learn Go Programming Course
|
||||
// License: https://creativecommons.org/licenses/by-nc-sa/4.0/
|
||||
//
|
||||
|
||||
package main
|
||||
|
||||
import "fmt"
|
||||
|
||||
// #1b: create the song struct type
|
||||
type song struct {
|
||||
title, artist string
|
||||
}
|
||||
|
||||
// #5: structs can contain other structs
|
||||
type playlist struct {
|
||||
genre string
|
||||
|
||||
// songTitles []string
|
||||
// songArtist []string
|
||||
|
||||
// #6: include a slice of song structs
|
||||
songs []song
|
||||
}
|
||||
|
||||
func main() {
|
||||
// #1: create two struct values with the same type
|
||||
song1 := song{title: "wonderwall", artist: "oasis"}
|
||||
song2 := song{title: "super sonic", artist: "oasis"}
|
||||
|
||||
fmt.Printf("song1: %+v\nsong2: %+v\n", song1, song2)
|
||||
|
||||
// #4: structs are copied
|
||||
// song1 = song2
|
||||
|
||||
// #3: structs can be compared
|
||||
if song1 == song2 {
|
||||
// #2: struct comparison works like this
|
||||
// if song1.title == song2.title &&
|
||||
// song1.artist == song2.artist {
|
||||
fmt.Println("songs are equal.")
|
||||
} else {
|
||||
fmt.Println("songs are not equal.")
|
||||
}
|
||||
|
||||
// #8
|
||||
songs := []song{
|
||||
// #7b: you don't have to type the element types
|
||||
{title: "wonderwall", artist: "oasis"},
|
||||
{title: "radioactive", artist: "imagine dragons"},
|
||||
}
|
||||
|
||||
// #7: a struct can include another struct
|
||||
rock := playlist{
|
||||
genre: "indie rock",
|
||||
songs: songs,
|
||||
}
|
||||
|
||||
// #9: you can't compare struct values that contains incomparable fields
|
||||
// you need to compare them manually
|
||||
|
||||
// clone := rock
|
||||
// if rock.songs == clone {
|
||||
// }
|
||||
// if songs == songs {
|
||||
|
||||
// #11: song is a clone, it cannot change the original struct value
|
||||
song := rock.songs[0]
|
||||
song.title = "live forever"
|
||||
|
||||
// #11c: directly set the original one
|
||||
rock.songs[0].title = "live forever"
|
||||
|
||||
// #11b
|
||||
fmt.Printf("\n%+v\n%+v\n", song, rock.songs[0])
|
||||
|
||||
// #10: printing
|
||||
fmt.Printf("\n%-20s %20s\n", "TITLE", "ARTIST")
|
||||
for _, s := range rock.songs {
|
||||
// s := rock.songs[i]
|
||||
|
||||
// #12b: s is a copy inside because struct values are copied
|
||||
s.title = "destroy"
|
||||
fmt.Printf("%-20s %20s\n", s.title, s.artist)
|
||||
}
|
||||
|
||||
// #12
|
||||
fmt.Printf("\n%-20s %20s\n", "TITLE", "ARTIST")
|
||||
for _, s := range rock.songs {
|
||||
fmt.Printf("%-20s %20s\n", s.title, s.artist)
|
||||
}
|
||||
}
|
66
x-tba/2-structs/04-embedding/main.go
Normal file
66
x-tba/2-structs/04-embedding/main.go
Normal file
@ -0,0 +1,66 @@
|
||||
// For more tutorials: https://blog.learngoprogramming.com
|
||||
//
|
||||
// Copyright © 2018 Inanc Gumus
|
||||
// Learn Go Programming Course
|
||||
// License: https://creativecommons.org/licenses/by-nc-sa/4.0/
|
||||
//
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
)
|
||||
|
||||
func main() {
|
||||
// #1: declare the types
|
||||
type text struct {
|
||||
title string
|
||||
words int
|
||||
}
|
||||
|
||||
type book struct {
|
||||
// title string
|
||||
// words int
|
||||
|
||||
// #3: include the text as a field
|
||||
// text text
|
||||
|
||||
// #4: embed the text
|
||||
text
|
||||
isbn string
|
||||
|
||||
// #5: add a conflicting field
|
||||
title string
|
||||
}
|
||||
|
||||
// #2: print a book
|
||||
// moby := book{title: "moby dick", words: 206052, isbn: "102030"}
|
||||
// fmt.Printf("%s has %d words (isbn: %s)\n", moby.title, moby.words, moby.isbn)
|
||||
|
||||
// #3b: type the text in its own field
|
||||
moby := book{
|
||||
// #5c: type the field in a new field
|
||||
// title: "conflict",
|
||||
text: text{title: "moby dick", words: 206052},
|
||||
isbn: "102030",
|
||||
}
|
||||
|
||||
moby.text.words = 1000
|
||||
moby.words++
|
||||
|
||||
// // #4b: print the book
|
||||
fmt.Printf("%s has %d words (isbn: %s)\n",
|
||||
moby.title, // equals to: moby.text.title
|
||||
moby.words, // equals to: moby.text.words
|
||||
moby.isbn)
|
||||
|
||||
// #3c: print the book
|
||||
// fmt.Printf("%s has %d words (isbn: %s)\n",
|
||||
// moby.text.title, moby.text.words, moby.isbn)
|
||||
|
||||
// #5b: print the conflict
|
||||
fmt.Printf("%#v\n", moby)
|
||||
|
||||
// go get -u github.com/davecgh/go-spew/spew
|
||||
// spew.Dump(moby)
|
||||
}
|
21
x-tba/2-structs/exercises/00-name/main.go
Normal file
21
x-tba/2-structs/exercises/00-name/main.go
Normal file
@ -0,0 +1,21 @@
|
||||
// For more tutorials: https://blog.learngoprogramming.com
|
||||
//
|
||||
// Copyright © 2018 Inanc Gumus
|
||||
// Learn Go Programming Course
|
||||
// License: https://creativecommons.org/licenses/by-nc-sa/4.0/
|
||||
//
|
||||
|
||||
package main
|
||||
|
||||
// ---------------------------------------------------------
|
||||
// EXERCISE: ??
|
||||
//
|
||||
//
|
||||
// EXPECTED OUTPUT
|
||||
//
|
||||
//
|
||||
// ---------------------------------------------------------
|
||||
|
||||
func main() {
|
||||
|
||||
}
|
12
x-tba/2-structs/exercises/00-name/solution/main.go
Normal file
12
x-tba/2-structs/exercises/00-name/solution/main.go
Normal file
@ -0,0 +1,12 @@
|
||||
// For more tutorials: https://blog.learngoprogramming.com
|
||||
//
|
||||
// Copyright © 2018 Inanc Gumus
|
||||
// Learn Go Programming Course
|
||||
// License: https://creativecommons.org/licenses/by-nc-sa/4.0/
|
||||
//
|
||||
|
||||
package main
|
||||
|
||||
func main() {
|
||||
|
||||
}
|
5
x-tba/2-structs/exercises/README.md
Normal file
5
x-tba/2-structs/exercises/README.md
Normal file
@ -0,0 +1,5 @@
|
||||
# Structs Exercises
|
||||
|
||||
## Warm-Up
|
||||
|
||||
1. **[?](https://github.com/inancgumus/learngo/tree/master/???)**
|
Reference in New Issue
Block a user