[{"data":1,"prerenderedAt":247},["ShallowReactive",2],{"project-9890566":3},{"id":4,"name":5,"line":6,"line_source":7,"title":8,"url":9,"domain":10,"maker":11,"posted_at":12,"year":13,"points":14,"comments":15,"rank_in_year":16,"shown_in_year":17,"top":18,"tier":19,"category":20,"subcategory":21,"format":22,"keywords":23,"reception":28,"sentiment":29,"stance_mix":30,"scored_comments":34,"aspects":35,"strip":41,"post_text":44,"what":45,"said":59,"maker_in_thread":140,"shape":151,"grid":155,"attempts":208,"same_week":209,"maker_shows":39,"maker_hidden":240,"reader_version":241,"card":242},"9890566","GoWork","A Go Distributed Work Library","title","Show HN: GoWork – A Go Distributed Work Library","https:\u002F\u002Fgithub.com\u002Fryanskidmore\u002FGoWork","github.com","ryanskidmore",1436955817,2015,68,25,406,2565,16,"notable","languages","distributed work library","library",[24,25,26,27],"go","distributed work","worker pool","golang library","curious",0.15,{"positive":31,"neutral":32,"mixed":33,"critical":33},2,6,0,8,{"execution":36,"performance":37,"design":38,"idea":40},{"positive":33,"critical":33},{"positive":33,"critical":33},{"positive":39,"critical":33},1,{"positive":33,"critical":33},[42,33,33,33,33,42,33,42,33,33,33,33,42,33,33,43,42,33,33,33,33,33,43,33,42],3,5,null,{"problem":44,"audience":44,"pricing":44,"motivation":44,"time_to_build":44,"stack":46,"openness":58,"stage":58,"team_size":58},[47],{"value":48,"source":49,"evidence":50},"Go","commenter",[51,55],{"id":52,"by":53,"text":54},"9891090","codo2","To make the code simpler to read, I would suggest removing a bunch of \"else {\", like the ones on lines 84, 112 and 119 of main.go. When you have something like: if err != nil {…",{"id":56,"by":53,"text":57},"9891310","It's not a critique but a suggestion. Like you are saying, it is not an error, my suggestion is simply to follow the standard library. From golang.org Effective Go: \"In the Go…","unknown",{"praise":60,"objections":72,"requests":99,"questions":116,"alternatives":121},[61],{"value":62,"source":49,"evidence":63},"Useful API design ideas such as Must-prefixed constructors",[64,68],{"id":65,"by":66,"text":67},"9890857","bcgraham","An idea is to include a function in the library called MustNewServer() that panics instead of returning an error. A usability perk of having single return is that the function…",{"id":69,"by":70,"text":71},"9891468","jalfresi","As much as I hate chaining functions, I do like the idiom of declaring that a function may panic with the 'Must' prefix. As long as there is an alternative function which returns…",[73,87,92],{"value":74,"source":49,"evidence":75},"Ignoring returned error from NewServer is risky; suggested panic instead",[76,80,83],{"id":77,"by":78,"text":79},"9890700","nothrabannosir","> Error is only returned by this function when the secret isn't 32 characters so as long as your secret is definitely 32 characters you can safely ignore the err returned by this…",{"id":81,"by":78,"text":82},"9890760","> The package author means the error will be nil when the secret is 32 characters long; he doesn't mean you can completely ignore checking it. But that's exactly what will…",{"id":84,"by":85,"text":86},"9890800","nicksardo","If a developer is frequently ignoring returned errors, then they have larger problems and it's their fault. Panic was not added to assist lazy programmers. Even though some API…",{"value":88,"source":49,"evidence":89},"Code style does not follow Go idiom for else after return",[90,91],{"id":52,"by":53,"text":54},{"id":56,"by":53,"text":57},{"value":93,"source":49,"evidence":94},"Interface casting may be inefficient in performance-critical code",[95],{"id":96,"by":97,"text":98},"9891321","StabbyCutyou","I notice you're using interfaces to do your handlers, and (forgive me if i'm reading this wrong) casting those interfaces to a specific \"type\" of function before invoking them.…",[100,104,108],{"value":101,"source":49,"evidence":102},"Use channels for collecting worker results",[103],{"id":77,"by":78,"text":79},{"value":105,"source":49,"evidence":106},"Add a MustNewServer constructor that panics",[107],{"id":65,"by":66,"text":67},{"value":109,"source":49,"evidence":110},"Rename or split main.go",[111,115],{"id":112,"by":113,"text":114},"9891153","alediaferia","As a little side node I'd personally rename main.go to core.go. Plus, I think there's room for splitting main.go into more little pieces to ease maintainability.",{"id":52,"by":53,"text":54},[117],{"value":118,"source":49,"evidence":119},"Does master fetch results from workers or do workers push them",[120],{"id":77,"by":78,"text":79},[122,133],{"value":123,"source":49,"evidence":124},"Erlang\u002FOTP",[125,129],{"id":126,"by":127,"text":128},"9891418","proveanegative","This looks nice enough as it is but what I think Go needs now is a more direct OTP clone suitable for new projects. If GoWork grew into that it could very well eat into Erlang's…",{"id":130,"by":131,"text":132},"9891478","aleksi","Erlang\u002FOTP: http:\u002F\u002Fwww.erlang.org\u002Ffaq\u002Fintroduction.html",{"value":134,"source":49,"evidence":135},"reign (Go distributed system project)",[136],{"id":137,"by":138,"text":139},"9892023","jerf","While it may appear that https:\u002F\u002Fgithub.com\u002Fthejerf\u002Freign is asleep, development is actually proceding apace; we're just not committing anything publicly because I'm of the…",{"comments":42,"answered":39,"key":141},[142,145,148],{"id":143,"text":144},"9893132","I've resolved this now, thanks :)",{"id":146,"text":147},"9890856","Thanks for the feedback (both of you!) - when writing this, I envisioned a use case where the secret was static within the application, so it is easy enough for the developer to…",{"id":149,"text":150},"9890891","Thanks for the suggestion, i'll add something similar to this when i've got a bit of time. Cheers!",{"commenters":152,"max_depth":43,"maker_replies":42,"first_comment_mins":153,"lifespan_hours":154},17,48,14,[156,158,162,163,166,168,170,172,173,175,176,177,178,180,182,184,186,188,191,192,194,197,199,204,207],[52,33,42,157,53,33],"project\u002Fneutral\u002Fexecution",[159,33,33,160,161,33],"9891264","commenter\u002Fneutral\u002Fnone","stickydink",[56,33,33,160,53,33],[164,33,33,160,165,33],"9892894","tptacek",[167,33,33,160,161,33],"9894946",[96,39,42,169,97,33],"project\u002Fneutral\u002Fperformance",[143,39,33,171,11,39],"maker\u002Fneutral\u002Fnone",[77,31,42,157,78,33],[174,31,33,160,85,33],"9890727",[81,31,33,160,78,33],[84,31,33,160,85,33],[146,31,33,171,11,39],[65,31,42,179,66,33],"project\u002Fneutral\u002Fdesign",[181,31,33,160,78,33],"9890889",[149,31,33,183,11,39],"maker\u002Fpositive\u002Fdesign",[69,31,43,185,70,33],"project\u002Fpositive\u002Fdesign",[126,42,42,187,127,33],"project\u002Fneutral\u002Fidea",[189,42,33,160,190,33],"9891465","ihuman",[130,42,33,160,131,33],[193,42,33,160,127,33],"9891484",[195,42,33,160,196,33],"9891491","chenzhekl",[137,42,33,198,138,33],"other\u002Fneutral\u002Fnone",[200,201,43,202,203,33],"9891567",4,"project\u002Fpositive\u002Fnone","concernedctzn",[205,201,33,198,206,33],"9891751","0xdeadbeefbabe",[112,43,42,157,113,33],[],[210,215,220,225,230,235],{"id":211,"name":212,"points":213,"category":214},"9878597","Density",258,"data",{"id":216,"name":217,"points":218,"category":219},"9892049","Democracy.io by EFF",144,"web_saas",{"id":221,"name":222,"points":223,"category":224},"9876868","Durat.io",119,"dev_tools",{"id":226,"name":227,"points":228,"category":229},"9889057","Actor",110,"infrastructure",{"id":231,"name":232,"points":233,"category":234},"9892515","Nestor",87,"productivity",{"id":236,"name":237,"points":238,"category":239},"9859389","Captain401",83,"finance_crypto",false,"v2",{"id":243,"name":5,"line":6,"ai":240,"cat":20,"year":13,"points":14,"comments":15,"rec":28,"s":29,"top":18,"kw":244,"maker":11,"domain":10,"tier":19,"attempts":33,"strip":245,"url":9,"mix":246,"praise":62,"objection":74,"sub":21},9890566,[24,25,26,27],"3000030300003005300000503",[31,32,33,33],1793990927699]