SWITCH 1g 2023-09-12 laplante@plcb.ca GOWEB/LANGUAGE

title: “GoWeb SWITCH Expression” author: “Pierre Laplante” date: 2025-08-30 version: “1.0.0” section: “1g”

module: “Goweb/language”

SWITCH Expression

This document explains how the switch expression works in GoWeb.
A switch expression allows execution to branch into different cases depending on the value of an expression.
It also supports the fallthrough keyword, which continues execution into the next case instead of breaking.

Description

The general syntax of a switch expression is:

switch expression {
    case expression[, expression]*:
        ...
    case expression[, expression]*:
        ...
    fallthrough;
    default:
        ...
}

Examples

Basic switch on numeric values

res={ 
    func f(x) {
        switch x {
            case x < 0:
                "Case x<0";
            case x > 7:
                "Case x>7";
            case 5:
                "Case is 5";
            default:
                "Default";
        }
    }
    f(6);
    f(5);
    f(8);
    f(-10);
    f(0);

    func f2(x) {
        switch {
            case x < 0:
                "Case x<0";
            case x > 0:
                "Case x>0";
            default:
                "Default";
        }
    }
    f2(5);
    f2(-10);
    f2(0);
}

Result:

res=DefaultCase is 5Case x>7Case x<0DefaultCase x>0Case x<0Default.

Nested switch expressions

res={ 
    func f(x, y) {
        switch x {
            case x < 0:
                "Case x<0";
            case x > 7:
                "Case x>7";
            case 5:
                "Case is 5";
                switch y {
                    case y < 0:
                        "y<0";
                    case y > 5:
                        "y>5";
                    case 4:
                        "y==4";
                    default:
                        "default y";
                }
            default:
                "Default x";
        }
    }
    f(-1, 0);
    f(8, 0);
    f(5, -1);
    f(5, 6);
    f(5, 4);
    f(5, 2);
}

Result:

res=Case x<0Case x>7Case is 5y<0Case is 5y>5Case is 5y==4Case is 5default y.

Using fallthrough

res={ 
    func f(x) {
        switch x {
            case x < 0:
                "Case x<0";
                fallthrough;
            case x < -2:
                "Case x<-2";
            case x > 7:
                "Case x>7";
                x:=7;
            case 5:
                "Case is 5";
                fallthrough;
            default:
                "Default";
        }
    }
    f(-5);
    f(8);
    f(5);
}

Result:

res=Case x<0Case x<-2Case x>7Case is 5Default.

Multiple matching cases

res={ 
    func f(x) {
        switch x {
            case x < 0:
                "Case x<0";
                fallthrough;
            case x < -2:
                "Case x<-2";
            case x > 7:
                "Case x>7";
                x:=7;
            case 2,3,4,5:
                "Case is 5";
            default:
                "Default";
        }
    }
    f(-5);
    f(8);
    f(5);
    f(4);
    f(3);
    f(2);
    f(1);
}

Result:

res=Case x<0Case x<-2Case x>7Case is 5Case is 5Case is 5Case is 5Default.

Switch with strings and regex

res={ 
    func f(x) {
        switch x {
            case "ab":
                "Case ab";
                fallthrough;
            case "bc":
                "Case bc";
            case re/a.*/, 'de', re/f.*/:
                "Case re";
            default:
                "Default";
        }
    }
    f("allo");
    f("de");
    f("fine");
    f("good");
}

Result:

res=Case reCase reCase reDefault.

Author

Pierre Laplante laplante@plcb.ca

See Also

Version