Control Flow
Switch Statements
Go switch statements choose a branch by matching a value.
switch
A `switch` compares one expression against several `case` values.
Switch Statements
switch_intro.go
Replay: real traced execution (multi-file project)
package main
import "fmt"
func main() {
var role = "editor"
message := ""
switch role {
case "admin":
message = "full access"
case "editor":
message = "can update"
default:
message = "read only"
}
fmt.Println("role=", role)
fmt.Println("message=", message)
}
package main
import "fmt"
func main() {
var role = "admin"
message := ""
switch role {
case "admin":
message = "full access"
case "editor":
message = "can update"
default:
message = "read only"
}
fmt.Println("role=", role)
fmt.Println("message=", message)
}
package main
import "fmt"
func main() {
var role = "guest"
message := ""
switch role {
case "admin":
message = "full access"
case "editor":
message = "can update"
default:
message = "read only"
}
fmt.Println("role=", role)
fmt.Println("message=", message)
}
role ← "editor", message ← ""
5func main() {6 var role→ "editor" = "editor" //@role="admin", "guest"7 message→ "" := ""89 switch role {10 case "admin":11 message = "full access"12 case "editor":13 message→ "can update" = "can update"14 default:15 message = "read only"16 }1718 fmt.Println("role=", role"editor")19 fmt.Println("message=", message"can update")20}outputrole= editor message= can update
role ← "admin", message ← ""
5func main() {6 var role→ "admin" = "admin"7 message→ "" := ""89 switch role {10 case "admin":11 message→ "full access" = "full access"12 case "editor":13 message = "can update"14 default:15 message = "read only"16 }1718 fmt.Println("role=", role"admin")19 fmt.Println("message=", message"full access")20}outputrole= admin message= full access
role ← "guest", message ← ""
5func main() {6 var role→ "guest" = "guest"7 message→ "" := ""89 switch role {10 case "admin":11 message = "full access"12 case "editor":13 message = "can update"14 default:15 message→ "read only" = "read only"16 }1718 fmt.Println("role=", role"guest")19 fmt.Println("message=", message"read only")20}outputrole= guest message= read only
Follow the Switch
rolestarts aseditor.- The
admincase does not match. - The
editorcase matches. messagebecomescan update, so the program printsrole= editorandmessage= can update. | role | matching path | message | | --- | --- | --- | | editor |case "editor"| can update | | admin |case "admin"| full access | | guest |default| read only |
Exercise: switch_intro.go
Reproduce can update for editor, then use the pinned role variants to predict full access and read only.