46 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			46 lines
		
	
	
		
			1.2 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/
 | 
						|
//
 | 
						|
 | 
						|
// In the depths of the Go standard library's fmt package...
 | 
						|
// Printing functions use the handleMethods method.
 | 
						|
 | 
						|
// Example:
 | 
						|
// var pocket money = 10
 | 
						|
// fmt.Println(pocket)
 | 
						|
 | 
						|
//            the argument can be any type of value
 | 
						|
//      stores the pocket variable in the argument variable
 | 
						|
//                            ^
 | 
						|
//                            |
 | 
						|
func (p *pp) handleMethods(argument interface{}) (handled bool) {
 | 
						|
	// ...
 | 
						|
 | 
						|
	// Checks whether a given argument is an error or an fmt.Stringer
 | 
						|
	switch v := argument.(type) {
 | 
						|
	// ...
 | 
						|
	// If the argument is a Stringer, calls its String() method
 | 
						|
	case Stringer:
 | 
						|
		// ...
 | 
						|
		//        pocket.String()
 | 
						|
		//              ^
 | 
						|
		//              |
 | 
						|
		p.fmtString(v.String(), verb)
 | 
						|
		return
 | 
						|
	}
 | 
						|
 | 
						|
	// ...
 | 
						|
}
 | 
						|
 | 
						|
/*
 | 
						|
The original `handleMethods` code is more involved:
 | 
						|
 | 
						|
https://github.com/golang/go/blob/6f51082da77a1d4cafd5b7af0db69293943f4066/src/fmt/print.go#L574
 | 
						|
 | 
						|
	-> 574#handleMethods(..)
 | 
						|
	-> 627#Stringer type check: If `v` is a Stringer, run:
 | 
						|
	-> 630#v.String()
 | 
						|
*/ |