Is the main function a goroutine?
up vote
0
down vote
favorite
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 |
up vote
0
down vote
favorite
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 at 8:46
add a comment |
up vote
0
down vote
favorite
up vote
0
down vote
favorite
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 at 9:23
Volker
19.7k24757
19.7k24757
asked Nov 20 at 7:28
Manjeet Thakur
744523
744523
@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 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 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 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 at 8:46
add a comment |
2 Answers
2
active
oldest
votes
up vote
3
down vote
accepted
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 at 15:15
@Flimzy: Hi, Thanks again for all your comments and support.+1
– A.R
Nov 27 at 18:29
add a comment |
up vote
5
down vote
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 |
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
3
down vote
accepted
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 at 15:15
@Flimzy: Hi, Thanks again for all your comments and support.+1
– A.R
Nov 27 at 18:29
add a comment |
up vote
3
down vote
accepted
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 at 15:15
@Flimzy: Hi, Thanks again for all your comments and support.+1
– A.R
Nov 27 at 18:29
add a comment |
up vote
3
down vote
accepted
up vote
3
down vote
accepted
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 at 15:37
answered Nov 20 at 7:41
A.R
1,9032919
1,9032919
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 at 15:15
@Flimzy: Hi, Thanks again for all your comments and support.+1
– A.R
Nov 27 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 at 15:15
@Flimzy: Hi, Thanks again for all your comments and support.+1
– A.R
Nov 27 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 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 at 15:15
@Flimzy: Hi, Thanks again for all your comments and support.+1
– A.R
Nov 27 at 18:29
@Flimzy: Hi, Thanks again for all your comments and support.+1
– A.R
Nov 27 at 18:29
add a comment |
up vote
5
down vote
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 |
up vote
5
down vote
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 |
up vote
5
down vote
up vote
5
down vote
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 at 9:03
answered Nov 20 at 8:46
Flimzy
36.8k96496
36.8k96496
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.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- 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 at 8:46