Is the main function a goroutine?
Is the main()
function a goroutine? For example, I've seen a crash stack trace like the below, which makes me ask:
goroutine 1 [running]: main.binarySearch(0x0, 0x61, 0x43,
0xc420043e70, 0x19, 0x19, 0x10)
/home/---/go/src/github.com/----/sumnum.go:22 +0x80 main.main()
/home/---/go/src/github.com/---/sumnum.go:13 +0xc1 exit status 2
go
add a comment |
Is the main()
function a goroutine? For example, I've seen a crash stack trace like the below, which makes me ask:
goroutine 1 [running]: main.binarySearch(0x0, 0x61, 0x43,
0xc420043e70, 0x19, 0x19, 0x10)
/home/---/go/src/github.com/----/sumnum.go:22 +0x80 main.main()
/home/---/go/src/github.com/---/sumnum.go:13 +0xc1 exit status 2
go
@Volker Well I'm trying to learn a golang and by mistake this error is generated and I see in the errorpanic: runtime error: index out of range
so then this question comes in my mind
– Manjeet Thakur
Nov 20 '18 at 8:46
add a comment |
Is the main()
function a goroutine? For example, I've seen a crash stack trace like the below, which makes me ask:
goroutine 1 [running]: main.binarySearch(0x0, 0x61, 0x43,
0xc420043e70, 0x19, 0x19, 0x10)
/home/---/go/src/github.com/----/sumnum.go:22 +0x80 main.main()
/home/---/go/src/github.com/---/sumnum.go:13 +0xc1 exit status 2
go
Is the main()
function a goroutine? For example, I've seen a crash stack trace like the below, which makes me ask:
goroutine 1 [running]: main.binarySearch(0x0, 0x61, 0x43,
0xc420043e70, 0x19, 0x19, 0x10)
/home/---/go/src/github.com/----/sumnum.go:22 +0x80 main.main()
/home/---/go/src/github.com/---/sumnum.go:13 +0xc1 exit status 2
go
go
edited Nov 20 '18 at 9:23
Volker
20.1k24758
20.1k24758
asked Nov 20 '18 at 7:28
Manjeet ThakurManjeet Thakur
947824
947824
@Volker Well I'm trying to learn a golang and by mistake this error is generated and I see in the errorpanic: runtime error: index out of range
so then this question comes in my mind
– Manjeet Thakur
Nov 20 '18 at 8:46
add a comment |
@Volker Well I'm trying to learn a golang and by mistake this error is generated and I see in the errorpanic: runtime error: index out of range
so then this question comes in my mind
– Manjeet Thakur
Nov 20 '18 at 8:46
@Volker Well I'm trying to learn a golang and by mistake this error is generated and I see in the error
panic: runtime error: index out of range
so then this question comes in my mind– Manjeet Thakur
Nov 20 '18 at 8:46
@Volker Well I'm trying to learn a golang and by mistake this error is generated and I see in the error
panic: runtime error: index out of range
so then this question comes in my mind– Manjeet Thakur
Nov 20 '18 at 8:46
add a comment |
2 Answers
2
active
oldest
votes
Yes, the main function runs in a goroutine (the main one).
According to https://tour.golang.org/concurrency/1
A goroutine is a lightweight thread managed by the Go runtime.
go f(x, y, z)
starts a new goroutine runningf(x, y, z)
The evaluation of f, x, y, and z happens in the current goroutine and the execution off
happens in the new goroutine.
Goroutines run in the same address space, so access to shared memory must be synchronized. The sync package provides useful primitives, although you won't need them much in Go as there are other primitives.
So according to this official document the main
runs in the current goroutine.
Now let's have some fun with main
and run this (So here the current goroutine runs the new goroutine) so here we have more than one goroutine which execute main()
again! (Note: Access to shared memory must be synchronized):
package main
import (
"fmt"
"time"
)
var i = 3
func main() {
if i <= 0 {
return
}
i--
fmt.Println("Hi")
go main()
time.Sleep(100 * time.Millisecond)
}
output:
Hi
Hi
Hi
Let's calculate factorial using main()
(one goroutine - no synchronization needed):
package main
import "fmt"
func main() {
if f <= 0 {
fmt.Println(acc)
return
}
acc *= f
f--
main()
}
var f = 5
var acc = 1
output:
120
Note: The codes above are just for clearly showing my viewpoints and is not good for production use (Using global variables should not be the first choice).
Thanks for updating your answer to no longer conflate functions and goroutines. I have removed my downvote and replaced it with an upvote.
– Flimzy
Nov 27 '18 at 15:15
@Flimzy: Hi, Thanks again for all your comments and support.+1
– aramazani
Nov 27 '18 at 18:29
add a comment |
Is the main function a goroutine?
No.
The main function is a function.
In contrast,
A goroutine is a lightweight thread of execution. (source).
So goroutines execute functions, but goroutines are not functions, and there is not a 1-to-1 relationship between goroutines and functions.
However...
The main()
function is executed in the first (and at startup, only) goroutine, goroutine #1
.
But as soon as that function calls another function, then the main goroutine is no longer executing the main function, and is instead executing some other function.
So it's clear that a goroutine and a function are entirely different entities.
Do not conflate goroutines with functions!!
Functions and goroutines are entirely different concepts. And thinking of them as the same thing will lead to countless of confusion and problems.
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53388154%2fis-the-main-function-a-goroutine%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
Yes, the main function runs in a goroutine (the main one).
According to https://tour.golang.org/concurrency/1
A goroutine is a lightweight thread managed by the Go runtime.
go f(x, y, z)
starts a new goroutine runningf(x, y, z)
The evaluation of f, x, y, and z happens in the current goroutine and the execution off
happens in the new goroutine.
Goroutines run in the same address space, so access to shared memory must be synchronized. The sync package provides useful primitives, although you won't need them much in Go as there are other primitives.
So according to this official document the main
runs in the current goroutine.
Now let's have some fun with main
and run this (So here the current goroutine runs the new goroutine) so here we have more than one goroutine which execute main()
again! (Note: Access to shared memory must be synchronized):
package main
import (
"fmt"
"time"
)
var i = 3
func main() {
if i <= 0 {
return
}
i--
fmt.Println("Hi")
go main()
time.Sleep(100 * time.Millisecond)
}
output:
Hi
Hi
Hi
Let's calculate factorial using main()
(one goroutine - no synchronization needed):
package main
import "fmt"
func main() {
if f <= 0 {
fmt.Println(acc)
return
}
acc *= f
f--
main()
}
var f = 5
var acc = 1
output:
120
Note: The codes above are just for clearly showing my viewpoints and is not good for production use (Using global variables should not be the first choice).
Thanks for updating your answer to no longer conflate functions and goroutines. I have removed my downvote and replaced it with an upvote.
– Flimzy
Nov 27 '18 at 15:15
@Flimzy: Hi, Thanks again for all your comments and support.+1
– aramazani
Nov 27 '18 at 18:29
add a comment |
Yes, the main function runs in a goroutine (the main one).
According to https://tour.golang.org/concurrency/1
A goroutine is a lightweight thread managed by the Go runtime.
go f(x, y, z)
starts a new goroutine runningf(x, y, z)
The evaluation of f, x, y, and z happens in the current goroutine and the execution off
happens in the new goroutine.
Goroutines run in the same address space, so access to shared memory must be synchronized. The sync package provides useful primitives, although you won't need them much in Go as there are other primitives.
So according to this official document the main
runs in the current goroutine.
Now let's have some fun with main
and run this (So here the current goroutine runs the new goroutine) so here we have more than one goroutine which execute main()
again! (Note: Access to shared memory must be synchronized):
package main
import (
"fmt"
"time"
)
var i = 3
func main() {
if i <= 0 {
return
}
i--
fmt.Println("Hi")
go main()
time.Sleep(100 * time.Millisecond)
}
output:
Hi
Hi
Hi
Let's calculate factorial using main()
(one goroutine - no synchronization needed):
package main
import "fmt"
func main() {
if f <= 0 {
fmt.Println(acc)
return
}
acc *= f
f--
main()
}
var f = 5
var acc = 1
output:
120
Note: The codes above are just for clearly showing my viewpoints and is not good for production use (Using global variables should not be the first choice).
Thanks for updating your answer to no longer conflate functions and goroutines. I have removed my downvote and replaced it with an upvote.
– Flimzy
Nov 27 '18 at 15:15
@Flimzy: Hi, Thanks again for all your comments and support.+1
– aramazani
Nov 27 '18 at 18:29
add a comment |
Yes, the main function runs in a goroutine (the main one).
According to https://tour.golang.org/concurrency/1
A goroutine is a lightweight thread managed by the Go runtime.
go f(x, y, z)
starts a new goroutine runningf(x, y, z)
The evaluation of f, x, y, and z happens in the current goroutine and the execution off
happens in the new goroutine.
Goroutines run in the same address space, so access to shared memory must be synchronized. The sync package provides useful primitives, although you won't need them much in Go as there are other primitives.
So according to this official document the main
runs in the current goroutine.
Now let's have some fun with main
and run this (So here the current goroutine runs the new goroutine) so here we have more than one goroutine which execute main()
again! (Note: Access to shared memory must be synchronized):
package main
import (
"fmt"
"time"
)
var i = 3
func main() {
if i <= 0 {
return
}
i--
fmt.Println("Hi")
go main()
time.Sleep(100 * time.Millisecond)
}
output:
Hi
Hi
Hi
Let's calculate factorial using main()
(one goroutine - no synchronization needed):
package main
import "fmt"
func main() {
if f <= 0 {
fmt.Println(acc)
return
}
acc *= f
f--
main()
}
var f = 5
var acc = 1
output:
120
Note: The codes above are just for clearly showing my viewpoints and is not good for production use (Using global variables should not be the first choice).
Yes, the main function runs in a goroutine (the main one).
According to https://tour.golang.org/concurrency/1
A goroutine is a lightweight thread managed by the Go runtime.
go f(x, y, z)
starts a new goroutine runningf(x, y, z)
The evaluation of f, x, y, and z happens in the current goroutine and the execution off
happens in the new goroutine.
Goroutines run in the same address space, so access to shared memory must be synchronized. The sync package provides useful primitives, although you won't need them much in Go as there are other primitives.
So according to this official document the main
runs in the current goroutine.
Now let's have some fun with main
and run this (So here the current goroutine runs the new goroutine) so here we have more than one goroutine which execute main()
again! (Note: Access to shared memory must be synchronized):
package main
import (
"fmt"
"time"
)
var i = 3
func main() {
if i <= 0 {
return
}
i--
fmt.Println("Hi")
go main()
time.Sleep(100 * time.Millisecond)
}
output:
Hi
Hi
Hi
Let's calculate factorial using main()
(one goroutine - no synchronization needed):
package main
import "fmt"
func main() {
if f <= 0 {
fmt.Println(acc)
return
}
acc *= f
f--
main()
}
var f = 5
var acc = 1
output:
120
Note: The codes above are just for clearly showing my viewpoints and is not good for production use (Using global variables should not be the first choice).
edited Nov 20 '18 at 15:37
answered Nov 20 '18 at 7:41
aramazaniaramazani
2,0802920
2,0802920
Thanks for updating your answer to no longer conflate functions and goroutines. I have removed my downvote and replaced it with an upvote.
– Flimzy
Nov 27 '18 at 15:15
@Flimzy: Hi, Thanks again for all your comments and support.+1
– aramazani
Nov 27 '18 at 18:29
add a comment |
Thanks for updating your answer to no longer conflate functions and goroutines. I have removed my downvote and replaced it with an upvote.
– Flimzy
Nov 27 '18 at 15:15
@Flimzy: Hi, Thanks again for all your comments and support.+1
– aramazani
Nov 27 '18 at 18:29
Thanks for updating your answer to no longer conflate functions and goroutines. I have removed my downvote and replaced it with an upvote.
– Flimzy
Nov 27 '18 at 15:15
Thanks for updating your answer to no longer conflate functions and goroutines. I have removed my downvote and replaced it with an upvote.
– Flimzy
Nov 27 '18 at 15:15
@Flimzy: Hi, Thanks again for all your comments and support.+1
– aramazani
Nov 27 '18 at 18:29
@Flimzy: Hi, Thanks again for all your comments and support.+1
– aramazani
Nov 27 '18 at 18:29
add a comment |
Is the main function a goroutine?
No.
The main function is a function.
In contrast,
A goroutine is a lightweight thread of execution. (source).
So goroutines execute functions, but goroutines are not functions, and there is not a 1-to-1 relationship between goroutines and functions.
However...
The main()
function is executed in the first (and at startup, only) goroutine, goroutine #1
.
But as soon as that function calls another function, then the main goroutine is no longer executing the main function, and is instead executing some other function.
So it's clear that a goroutine and a function are entirely different entities.
Do not conflate goroutines with functions!!
Functions and goroutines are entirely different concepts. And thinking of them as the same thing will lead to countless of confusion and problems.
add a comment |
Is the main function a goroutine?
No.
The main function is a function.
In contrast,
A goroutine is a lightweight thread of execution. (source).
So goroutines execute functions, but goroutines are not functions, and there is not a 1-to-1 relationship between goroutines and functions.
However...
The main()
function is executed in the first (and at startup, only) goroutine, goroutine #1
.
But as soon as that function calls another function, then the main goroutine is no longer executing the main function, and is instead executing some other function.
So it's clear that a goroutine and a function are entirely different entities.
Do not conflate goroutines with functions!!
Functions and goroutines are entirely different concepts. And thinking of them as the same thing will lead to countless of confusion and problems.
add a comment |
Is the main function a goroutine?
No.
The main function is a function.
In contrast,
A goroutine is a lightweight thread of execution. (source).
So goroutines execute functions, but goroutines are not functions, and there is not a 1-to-1 relationship between goroutines and functions.
However...
The main()
function is executed in the first (and at startup, only) goroutine, goroutine #1
.
But as soon as that function calls another function, then the main goroutine is no longer executing the main function, and is instead executing some other function.
So it's clear that a goroutine and a function are entirely different entities.
Do not conflate goroutines with functions!!
Functions and goroutines are entirely different concepts. And thinking of them as the same thing will lead to countless of confusion and problems.
Is the main function a goroutine?
No.
The main function is a function.
In contrast,
A goroutine is a lightweight thread of execution. (source).
So goroutines execute functions, but goroutines are not functions, and there is not a 1-to-1 relationship between goroutines and functions.
However...
The main()
function is executed in the first (and at startup, only) goroutine, goroutine #1
.
But as soon as that function calls another function, then the main goroutine is no longer executing the main function, and is instead executing some other function.
So it's clear that a goroutine and a function are entirely different entities.
Do not conflate goroutines with functions!!
Functions and goroutines are entirely different concepts. And thinking of them as the same thing will lead to countless of confusion and problems.
edited Nov 20 '18 at 9:03
answered Nov 20 '18 at 8:46
FlimzyFlimzy
37.9k96497
37.9k96497
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53388154%2fis-the-main-function-a-goroutine%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
@Volker Well I'm trying to learn a golang and by mistake this error is generated and I see in the error
panic: runtime error: index out of range
so then this question comes in my mind– Manjeet Thakur
Nov 20 '18 at 8:46