67 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
		
		
			
		
	
	
			67 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| 
								 | 
							
								// 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)
							 | 
						||
| 
								 | 
							
								}
							 |