MainframeMaster

COBOL Tutorial

COBOL GOBACK Statement

The GOBACK statement represents a modern and versatile program control return mechanism within COBOL programming environments, serving as the primary specification for returning control from subprograms to calling programs or terminating main program execution with clean resource management. This statement embodies the principles of structured program termination by providing consistent return behavior across different program contexts, enabling reliable inter-program communication patterns, and supporting efficient program lifecycle management while maintaining compatibility with modern COBOL standards and ensuring predictable program flow control in enterprise applications that require robust modular programming architectures and reliable program termination sequences with proper resource cleanup and state management.

Syntax and Usage

GOBACK Statement Syntax
cobol
1
2
3
4
5
6
7
8
9
10
GOBACK *> In main program - terminates program *> In subprogram - returns to calling program *> Examples: GOBACK IF ERROR-CONDITION GOBACK END-IF
Program Control
Return Mechanism
Modern Practice

Basic GOBACK Examples

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
IDENTIFICATION DIVISION. PROGRAM-ID. MAIN-PROGRAM. DATA DIVISION. WORKING-STORAGE SECTION. 01 CALCULATION-RESULT PIC 9(7)V99. 01 ERROR-CODE PIC 9(3). 01 VALIDATION-STATUS PIC X. PROCEDURE DIVISION. MAIN-PROCESSING. DISPLAY 'Starting main program...' *> Call subprogram for validation CALL 'VALIDATE-INPUT' USING VALIDATION-STATUS IF VALIDATION-STATUS = 'N' DISPLAY 'Validation failed - terminating' GOBACK END-IF *> Call subprogram for calculation CALL 'CALCULATE-VALUES' USING CALCULATION-RESULT ERROR-CODE IF ERROR-CODE NOT = 0 DISPLAY 'Calculation error: ' ERROR-CODE GOBACK END-IF DISPLAY 'Main program completed successfully' DISPLAY 'Result: ' CALCULATION-RESULT GOBACK. *> Subprogram demonstrating GOBACK usage IDENTIFICATION DIVISION. PROGRAM-ID. VALIDATE-INPUT. DATA DIVISION. LINKAGE SECTION. 01 VALIDATION-RESULT PIC X. PROCEDURE DIVISION USING VALIDATION-RESULT. VALIDATION-LOGIC. DISPLAY 'Performing input validation...' *> Simulate validation process MOVE 'Y' TO VALIDATION-RESULT *> Simulate validation failure condition IF FUNCTION RANDOM < 0.2 MOVE 'N' TO VALIDATION-RESULT DISPLAY 'Validation failed - invalid input detected' GOBACK END-IF DISPLAY 'Validation successful' GOBACK. END PROGRAM VALIDATE-INPUT. *> Another subprogram with error handling IDENTIFICATION DIVISION. PROGRAM-ID. CALCULATE-VALUES. DATA DIVISION. WORKING-STORAGE SECTION. 01 TEMP-RESULT PIC 9(9)V99. 01 DIVISOR PIC 9(3) VALUE 100. LINKAGE SECTION. 01 RESULT-VALUE PIC 9(7)V99. 01 ERROR-STATUS PIC 9(3). PROCEDURE DIVISION USING RESULT-VALUE ERROR-STATUS. CALCULATION-LOGIC. MOVE 0 TO ERROR-STATUS *> Simulate complex calculation COMPUTE TEMP-RESULT = FUNCTION RANDOM * 1000000 *> Check for overflow IF TEMP-RESULT > 99999.99 MOVE 101 TO ERROR-STATUS DISPLAY 'Error: Calculation overflow' GOBACK END-IF *> Check for division by zero (simulated) IF DIVISOR = 0 MOVE 102 TO ERROR-STATUS DISPLAY 'Error: Division by zero' GOBACK END-IF DIVIDE TEMP-RESULT BY DIVISOR GIVING RESULT-VALUE DISPLAY 'Calculation completed: ' RESULT-VALUE GOBACK. END PROGRAM CALCULATE-VALUES. END PROGRAM MAIN-PROGRAM.

Key Features and Benefits

Universal Return
  • • Works in main and subprograms
  • • Consistent behavior across contexts
  • • Modern COBOL standard compliance
  • • Clean program termination
Simplified Control Flow
  • • Single statement for returns
  • • Automatic resource cleanup
  • • Error handling integration
  • • Structured program design

Interactive Tutorial

Hands-On Exercise: Modular Program Design
Practice using GOBACK for effective program control and error handling

Exercise 1: Error Handling with GOBACK

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
IDENTIFICATION DIVISION. PROGRAM-ID. FILE-PROCESSOR. DATA DIVISION. LINKAGE SECTION. 01 FILE-NAME PIC X(20). 01 PROCESS-STATUS PIC 9(3). PROCEDURE DIVISION USING FILE-NAME PROCESS-STATUS. MOVE 0 TO PROCESS-STATUS *> Validate file name IF FILE-NAME = SPACES MOVE 001 TO PROCESS-STATUS DISPLAY 'Error: File name is empty' GOBACK END-IF *> Simulate file processing DISPLAY 'Processing file: ' FILE-NAME *> Simulate file not found IF FILE-NAME(1:4) = 'TEMP' MOVE 002 TO PROCESS-STATUS DISPLAY 'Error: Temporary files not allowed' GOBACK END-IF DISPLAY 'File processed successfully' GOBACK.

Exercise 2: Multi-level Program Structure

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
IDENTIFICATION DIVISION. PROGRAM-ID. BUSINESS-LOGIC. PROCEDURE DIVISION. MAIN-LOGIC. CALL 'INITIALIZE-SYSTEM' CALL 'PROCESS-TRANSACTIONS' CALL 'GENERATE-REPORTS' GOBACK. IDENTIFICATION DIVISION. PROGRAM-ID. INITIALIZE-SYSTEM. PROCEDURE DIVISION. DISPLAY 'System initialization...' *> Check system prerequisites PERFORM CHECK-ENVIRONMENT PERFORM LOAD-CONFIGURATION DISPLAY 'System ready' GOBACK. CHECK-ENVIRONMENT. *> Environment validation CONTINUE. LOAD-CONFIGURATION. *> Configuration loading CONTINUE. END PROGRAM INITIALIZE-SYSTEM.

Advanced GOBACK Patterns

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
IDENTIFICATION DIVISION. PROGRAM-ID. ADVANCED-GOBACK-DEMO. DATA DIVISION. WORKING-STORAGE SECTION. 01 SYSTEM-STATE. 05 INITIALIZATION-COMPLETE PIC X VALUE 'N'. 05 PROCESSING-ACTIVE PIC X VALUE 'N'. 05 ERROR-RECOVERY-MODE PIC X VALUE 'N'. 01 OPERATION-COUNTERS. 05 SUCCESSFUL-OPERATIONS PIC 9(5) VALUE 0. 05 FAILED-OPERATIONS PIC 9(5) VALUE 0. 05 TOTAL-OPERATIONS PIC 9(5) VALUE 0. 01 WS-COUNTER PIC 9(3). 01 WS-RESULT-CODE PIC 9(2). PROCEDURE DIVISION. MAIN-CONTROLLER. PERFORM SYSTEM-STARTUP IF INITIALIZATION-COMPLETE = 'Y' PERFORM BUSINESS-PROCESSING ELSE DISPLAY 'System startup failed' GOBACK END-IF PERFORM SYSTEM-SHUTDOWN DISPLAY 'Operations Summary:' DISPLAY 'Total: ' TOTAL-OPERATIONS DISPLAY 'Successful: ' SUCCESSFUL-OPERATIONS DISPLAY 'Failed: ' FAILED-OPERATIONS GOBACK. SYSTEM-STARTUP. CALL 'DATABASE-CONNECT' USING INITIALIZATION-COMPLETE IF INITIALIZATION-COMPLETE = 'N' DISPLAY 'Database connection failed' GOBACK END-IF CALL 'LOAD-BUSINESS-RULES' USING INITIALIZATION-COMPLETE IF INITIALIZATION-COMPLETE = 'N' DISPLAY 'Business rules loading failed' GOBACK END-IF. BUSINESS-PROCESSING. MOVE 'Y' TO PROCESSING-ACTIVE PERFORM VARYING WS-COUNTER FROM 1 BY 1 UNTIL WS-COUNTER > 100 ADD 1 TO TOTAL-OPERATIONS CALL 'PROCESS-TRANSACTION' USING WS-COUNTER WS-RESULT-CODE IF WS-RESULT-CODE = 0 ADD 1 TO SUCCESSFUL-OPERATIONS ELSE ADD 1 TO FAILED-OPERATIONS *> Emergency stop if too many failures IF FAILED-OPERATIONS > 10 DISPLAY 'Too many failures - stopping processing' MOVE 'N' TO PROCESSING-ACTIVE EXIT PERFORM END-IF END-IF END-PERFORM. SYSTEM-SHUTDOWN. MOVE 'N' TO PROCESSING-ACTIVE CALL 'DATABASE-DISCONNECT' CALL 'CLEANUP-RESOURCES'. *> Database connection subprogram IDENTIFICATION DIVISION. PROGRAM-ID. DATABASE-CONNECT. DATA DIVISION. WORKING-STORAGE SECTION. 01 CONNECTION-ATTEMPTS PIC 9(2) VALUE 0. 01 MAX-ATTEMPTS PIC 9(2) VALUE 3. LINKAGE SECTION. 01 CONNECTION-STATUS PIC X. PROCEDURE DIVISION USING CONNECTION-STATUS. CONNECTION-LOGIC. MOVE 'N' TO CONNECTION-STATUS PERFORM VARYING CONNECTION-ATTEMPTS FROM 1 BY 1 UNTIL CONNECTION-ATTEMPTS > MAX-ATTEMPTS OR CONNECTION-STATUS = 'Y' DISPLAY 'Connection attempt ' CONNECTION-ATTEMPTS *> Simulate connection logic IF FUNCTION RANDOM > 0.3 MOVE 'Y' TO CONNECTION-STATUS DISPLAY 'Database connected successfully' GOBACK ELSE DISPLAY 'Connection failed, retrying...' END-IF END-PERFORM IF CONNECTION-STATUS = 'N' DISPLAY 'All connection attempts failed' END-IF GOBACK. END PROGRAM DATABASE-CONNECT. *> Transaction processing subprogram IDENTIFICATION DIVISION. PROGRAM-ID. PROCESS-TRANSACTION. DATA DIVISION. LINKAGE SECTION. 01 TRANSACTION-ID PIC 9(5). 01 RESULT-CODE PIC 9(3). PROCEDURE DIVISION USING TRANSACTION-ID RESULT-CODE. TRANSACTION-LOGIC. MOVE 0 TO RESULT-CODE *> Validate transaction ID IF TRANSACTION-ID = 0 MOVE 001 TO RESULT-CODE DISPLAY 'Invalid transaction ID' GOBACK END-IF *> Simulate processing IF FUNCTION MOD(TRANSACTION-ID, 10) = 0 MOVE 002 TO RESULT-CODE DISPLAY 'Transaction ' TRANSACTION-ID ' failed validation' GOBACK END-IF *> Successful processing DISPLAY 'Transaction ' TRANSACTION-ID ' processed successfully' GOBACK. END PROGRAM PROCESS-TRANSACTION. *> Resource cleanup subprogram IDENTIFICATION DIVISION. PROGRAM-ID. CLEANUP-RESOURCES. PROCEDURE DIVISION. CLEANUP-LOGIC. DISPLAY 'Cleaning up temporary files...' DISPLAY 'Releasing memory resources...' DISPLAY 'Closing log files...' DISPLAY 'Cleanup completed' GOBACK. END PROGRAM CLEANUP-RESOURCES. END PROGRAM ADVANCED-GOBACK-DEMO.

Best Practices

Knowledge Check

Test Your Understanding

Question 1: Basic Usage

What does GOBACK do in a subprogram?

Answer: GOBACK returns control from the subprogram to the calling program, terminating the current subprogram's execution.

Question 2: Main Program Usage

What happens when GOBACK is used in a main program?

Answer: In a main program, GOBACK terminates the entire program execution, similar to STOP RUN but with more modern semantics.

Question 3: Advantages

Why is GOBACK preferred over EXIT PROGRAM?

Answer: GOBACK is more versatile (works in both main and subprograms), follows modern COBOL standards, and provides more consistent behavior across different program contexts.

Common Patterns

Error Handling Pattern
cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
PROCEDURE DIVISION USING INPUT-DATA RESULT-CODE. MOVE 0 TO RESULT-CODE *> Validation IF INPUT-DATA = SPACES MOVE 001 TO RESULT-CODE GOBACK END-IF *> Processing PERFORM BUSINESS-LOGIC *> Success GOBACK.
Resource Management
cobol
1
2
3
4
5
6
7
8
9
10
11
PROCEDURE DIVISION. PERFORM INITIALIZE-RESOURCES IF INITIALIZATION-FAILED PERFORM CLEANUP-RESOURCES GOBACK END-IF PERFORM MAIN-PROCESSING PERFORM CLEANUP-RESOURCES GOBACK.

Frequently Asked Questions