64 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
		
		
			
		
	
	
			64 lines
		
	
	
		
			1.5 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"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// STORY:
							 | 
						||
| 
								 | 
							
								// You want to compare two bookcases,
							 | 
						||
| 
								 | 
							
								// whether they're equal or not.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								func main() {
							 | 
						||
| 
								 | 
							
									type (
							 | 
						||
| 
								 | 
							
										// integer int
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										bookcase [5]int
							 | 
						||
| 
								 | 
							
										cabinet  [5]int
							 | 
						||
| 
								 | 
							
										//          ^- try changing this to: integer
							 | 
						||
| 
								 | 
							
										//             but first: uncomment the integer type above
							 | 
						||
| 
								 | 
							
									)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									blue := bookcase{6, 9, 3, 2, 1}
							 | 
						||
| 
								 | 
							
									red := cabinet{6, 9, 3, 2, 1}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									fmt.Print("Are they equal? ")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									if cabinet(blue) == red {
							 | 
						||
| 
								 | 
							
										fmt.Println("✅")
							 | 
						||
| 
								 | 
							
									} else {
							 | 
						||
| 
								 | 
							
										fmt.Println("❌")
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									fmt.Printf("blue: %#v\n", blue)
							 | 
						||
| 
								 | 
							
									fmt.Printf("red : %#v\n", bookcase(red))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									// ------------------------------------------------
							 | 
						||
| 
								 | 
							
									// The underlying type of an unnamed type is itself.
							 | 
						||
| 
								 | 
							
									//
							 | 
						||
| 
								 | 
							
									//   [5]integer's underlying type: [5]integer
							 | 
						||
| 
								 | 
							
									//   [5]int's underlying type    : [5]int
							 | 
						||
| 
								 | 
							
									//
							 | 
						||
| 
								 | 
							
									//   > [5]integer and [5]int are different types.
							 | 
						||
| 
								 | 
							
									//   > Their memory layout is not important.
							 | 
						||
| 
								 | 
							
									//   > Their types are not the same.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									// _ = [5]integer{} == [5]int{}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									// ------------------------------------------------
							 | 
						||
| 
								 | 
							
									// An unnamed and a named type can be compared,
							 | 
						||
| 
								 | 
							
									// if they've identical underlying types.
							 | 
						||
| 
								 | 
							
									//
							 | 
						||
| 
								 | 
							
									//   [5]integer's underlying type: [5]integer
							 | 
						||
| 
								 | 
							
									//   cabinet's underlying type   : [5]integer
							 | 
						||
| 
								 | 
							
									//
							 | 
						||
| 
								 | 
							
									// Note: Assuming the cabinet's type definition is like so:
							 | 
						||
| 
								 | 
							
									//       type cabinet [5]integer
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									// _ = [5]integer{} == cabinet{}
							 | 
						||
| 
								 | 
							
								}
							 |