> I need to query a db to get its content type and then send the actually file that lives on the file system. Now the question is, should I put db.QueryRow and os.Open each in a goroutine to make them concurrent?
Why make them concurrent if you need to know to know the end result of the DB call *before* opening the file? > Should I writing things sequentially by default and only when hitting performance problems do I profile the program and wrap calls in goroutine? Personally I would say yes, only use goroutines when you know for a fact that you have an issue which needs solving via concurrency, e.g., IO-bound workloads. While it's nice to have goroutines and channels within easy reach, they do complicate program structure and can cause data races if not used properly. Unless your app is problematically slow, design everything to be as simple as possible. People tend to assume things like "DB queries are slow" or "filesystem access is slow", but that doesn't mean doing either of those things will cause issues, and even if they do, solutions such as adding indexes to problematic fields or doing caching might help A LOT more than trying to be more concurrent will. On Monday, July 24, 2017 at 8:34:30 AM UTC-7, Glen Huang wrote: > > Hi, > > I'm still pretty new to go. Hope this question isn't too stupid. > > I'm writing a restful API server, and in order to send a response, I need > to query a db to get its content type and then send the actually file that > lives on the file system. Now the question is, should I put db.QueryRow and > os.Open each in a goroutine to make them concurrent? > > And a more general question is, when using APIs from the stdlib or > 3rd-party packages, how do I determine whether to wrap them in goroutines > when more than one of them need to happen sequentially and the order > actually doesn't matter? Should I manually time the API executions to make > the call? Should I writing things sequentially by default and only when > hitting performance problems do I profile the program and wrap calls in > goroutine? > > How do you decide when to use goroutines? > -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.