Skip to content

Latest commit

 

History

History
49 lines (35 loc) · 1.43 KB

Type Switch Internals.md

File metadata and controls

49 lines (35 loc) · 1.43 KB

###Type Switch

A golang Type Switch has a lot of magic in it. By using the create and assing syntax (:=) inside a Type Switch you're defining and assigning the same var with different types on each case.

Example from go-wiki

func do(v interface{}) string {
        switch u := v.(type) {
        case int:
                return strconv.Itoa(u*2) // u has type int
        
        case string:
                mid := len(u) / 2 // split - u has type string
                return u[mid:] + u[:mid] // join
        
        case Stringer: //*another (non-empty) interface*
                return u.String() //call via method dispatch
        }
        return "unknown"
}

=>
do(21) == "42"
do("bitrab") == "rabbit"
do(3.142) == "unknown"

Pseudo-code

func do(v interface{}) string 

    switch type-in.(v)
        
        case int:
                var u int = value-in.(v)
                return strconv.Itoa(u*2) 
        
        case string:
                var u string = value-in.(v)
                let mid = len(u) / 2
                return u[mid:] + u[:mid] 

        case Stringer-interface: 
                var u Stringer-interface = value-in.(v)
                return u.String() //call via method dispatch
        
   return "unknown"