[{"data":1,"prerenderedAt":367},["ShallowReactive",2],{"project-12232293":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":35,"aspects":36,"strip":42,"post_text":44,"what":45,"said":73,"maker_in_thread":178,"shape":189,"grid":193,"attempts":325,"same_week":330,"maker_shows":31,"maker_hidden":359,"reader_version":360,"card":361},"12232293","Web Dev with Golang Anti-Textbook","Book about writing web apps in Go without a framework","title","Show HN: Book about writing web apps in Go without a framework","https:\u002F\u002Fgithub.com\u002Fthewhitetulip\u002Fweb-dev-golang-anti-textbook\u002F","github.com","thewhitetulip",1470405066,2016,158,57,204,2264,10,"notable","learning_science","programming book","other",[24,25,26,27],"golang","web development","go web apps","no framework","curious",0.009,{"positive":31,"neutral":32,"mixed":33,"critical":34},3,12,1,4,20,{"docs":37,"performance":39,"idea":41},{"positive":38,"critical":38},2,{"positive":40,"critical":33},0,{"positive":33,"critical":40},[31,40,31,33,40,40,40,33,40,40,40,40,40,31,31,40,40,40,31,31,40,31,43,40,40,31,33,40,40,31,43,31,40,40,43,40,31,33,40,40],5,null,{"problem":46,"audience":55,"pricing":44,"motivation":44,"time_to_build":44,"stack":59,"openness":70,"stage":71,"team_size":72},{"value":47,"source":48,"evidence":49},"Teaches building web apps in Go using only the standard library","maker",[50,52],{"id":51},"post",{"id":53,"by":11,"text":54},"12232431","I am the author of this book, I'd love to get feedback on the book. I haven't updated much in the last few months. But I am always looking to improve the book for newcomers.",{"value":56,"source":48,"evidence":57},"Newcomers to Go web development",[58],{"id":53,"by":11,"text":54},[60,64],{"value":61,"source":48,"evidence":62},"Go",[63],{"id":51},{"value":65,"source":48,"evidence":66},"SQLite",[67],{"id":68,"by":11,"text":69},"12234160","Well, as others have pointed out, sqlite is simple and easy to use, that way we can work on the core functions of the app rather than having to worry about the database. Also, as…","open_source","launched","solo",{"praise":74,"objections":87,"requests":117,"questions":141,"alternatives":150},[75],{"value":76,"source":77,"evidence":78},"Useful, approachable introduction to Go web basics","commenter",[79,83],{"id":80,"by":81,"text":82},"12233450","edoceo","I've been using this, found it through Google awhile back. I didn't want a framework and this helps. I had to search more for Redis and PG and Solr but the front-end stuff here…",{"id":84,"by":85,"text":86},"12234787","emehrkay","Side comment, and I'm sure it has been said before, but GitBook is beautiful. It could replace textbooks, cheap $40 tablets can render HTML just fine. I'm going to read this…",[88,95,106],{"value":89,"source":77,"evidence":90},"Some statements about Go methods and functions are incorrect",[91],{"id":92,"by":93,"text":94},"12234916","chrisbroadfoot","I applaud the approach and the effort, but there are some basic things in this book that are just not correct, or are difficult to read. One random page that I jumped to:…",{"value":96,"source":77,"evidence":97},"Uses text\u002Ftemplate instead of html\u002Ftemplate, risking escaping issues",[98,102],{"id":99,"by":100,"text":101},"12232828","buro9","Just looking at the template bit... why do you use text\u002Ftemplate and not html\u002Ftemplate? I get that you wrote the templates, you trust them, you don't want the HTML escaping,…",{"id":103,"by":104,"text":105},"12232926","astockwell","Usually that's a goimports gotcha. Definitely want to be using html\u002Ftemplate though.",{"value":107,"source":77,"evidence":108},"Missing deployment, static file, and reverse proxy coverage",[109,113],{"id":110,"by":111,"text":112},"12233613","eljimmy","I much prefer to serve Go applications through an NGINX reverse proxy. It deals with a lot of stuff for you (static assets, SSL, logging, etc.) and lets you focus on developing…",{"id":114,"by":115,"text":116},"12234970","enahs-sf","It would be great to see anything on deployment added to this.",[118,122,129,133],{"value":119,"source":77,"evidence":120},"Add a chapter on reverse proxy setup such as nginx",[121],{"id":110,"by":111,"text":112},{"value":123,"source":77,"evidence":124},"Cover PostgreSQL or MySQL instead of SQLite",[125],{"id":126,"by":127,"text":128},"12233263","bezzi","Don't you think that teaching how to use it with mysql or postegres would be more useful than sqlite?",{"value":130,"source":77,"evidence":131},"Add deployment content",[132],{"id":114,"by":115,"text":116},{"value":134,"source":77,"evidence":135},"Add graceful restarts and internationalisation",[136,140],{"id":137,"by":138,"text":139},"12234384","caleblloyd","You may want to mention something about Graceful restarts to avoid downtime when upgrading. A great library to achieve this is: https:\u002F\u002Fgithub.com\u002Ffacebookgo\u002Fgrace",{"id":99,"by":100,"text":101},[142,146],{"value":143,"source":77,"evidence":144},"Why use text\u002Ftemplate rather than html\u002Ftemplate",[145],{"id":99,"by":100,"text":101},{"value":147,"source":77,"evidence":148},"Why SQLite rather than a server database",[149],{"id":126,"by":127,"text":128},[151,158,165,172],{"value":152,"source":77,"evidence":153},"Caddy web server",[154],{"id":155,"by":156,"text":157},"12234806","wanda","With Caddy[0] around, the only thing that keeps me tied to nginx is its performance and tried-and-tested-ness. Waiting to see someone do some detailed benchmarks on Caddy before…",{"value":159,"source":77,"evidence":160},"GORM ORM",[161],{"id":162,"by":163,"text":164},"12234586","jlubawy","Like you describe in the book, I had written a web-app in Go in which I was doing all the SQL handling manually, I found that it became very difficult to maintain this over time…",{"value":166,"source":77,"evidence":167},"Manning's Go book",[168],{"id":169,"by":170,"text":171},"12234965","kevindeasis","The manning book uses vanilla Go too, but it's not free. However, it's a pretty good book.",{"value":173,"source":48,"evidence":174},"Astaxie's Go web book",[175],{"id":176,"by":11,"text":177},"12237196","Well mine isn't the first book created with git, my book is actually inspired from astaxie's book on Go, that too is on github",{"comments":35,"answered":34,"key":179},[180,183,186],{"id":181,"text":182},"12234141","I am sorry for sounding naive, but I have never used a reverse proxy before, I'll work on it though and add a chapter as soon as possible. It'd be great if you can provide me…",{"id":184,"text":185},"12237645","You are right, the writing is wrong. I was trying to imply in the C++ class sense where we write functions directly inside a class, in Go, we have to define a function over a…",{"id":187,"text":188},"12238288","can we call the method without doing t.F()? like just F()? I accept I have to modify the statement I made.",{"commenters":190,"max_depth":191,"maker_replies":35,"first_comment_mins":35,"lifespan_hours":192},32,6,65,[194,196,198,201,204,207,209,212,216,220,223,225,226,229,231,233,235,236,239,242,244,247,249,252,254,257,258,261,264,265,267,269,272,275,277,278,279,281,284,286,287,289,294,296,301,303,305,308,309,311,313,315,319,321,323],[110,40,31,195,111,40],"project\u002Fneutral\u002Fdocs",[181,40,40,197,11,33],"maker\u002Fneutral\u002Fdocs",[199,40,31,197,200,40],"12234512","nkozyra",[202,40,31,197,203,40],"12234554","brightball",[205,40,33,206,138,40],"12234370","project\u002Fcritical\u002Fperformance",[155,40,40,208,156,40],"other\u002Fneutral\u002Fnone",[210,40,40,208,211,40],"12235544","ckluis",[213,40,40,214,215,40],"12236538","commenter\u002Fneutral\u002Fnone","colemickens",[217,40,40,218,219,40],"12245916","other\u002Fneutral\u002Fperformance","vbtechguy",[221,40,40,208,222,40],"12236279","waits",[92,33,33,224,93,40],"project\u002Fcritical\u002Fdocs",[184,33,40,197,11,33],[227,33,40,214,228,40],"12238166","jamra",[187,33,40,230,11,33],"maker\u002Fneutral\u002Fnone",[232,33,40,214,93,40],"12239024",[234,33,40,214,11,33],"12241242",[53,38,40,230,11,33],[237,38,31,195,238,40],"12232979","herge",[240,38,31,195,241,40],"12233270","ffggvv",[126,38,31,243,127,40],"project\u002Fneutral\u002Fidea",[245,38,40,214,246,40],"12233382","ianleeclark",[248,38,40,214,11,33],"12234244",[250,38,40,208,251,40],"12233445","IndianAstronaut",[253,38,40,214,104,40],"12233497",[255,38,31,195,256,40],"12233822","joncalhoun",[68,38,40,243,11,33],[259,38,31,243,260,40],"12236702","Bromlife",[262,38,40,214,263,40],"12236959","lcarlson",[162,31,31,243,163,40],[266,31,40,243,11,33],"12237180",[84,34,43,268,85,40],"project\u002Fpositive\u002Fdocs",[270,34,40,271,11,33],"12237184","other\u002Fpositive\u002Fnone",[273,34,40,208,274,40],"12237608","unsignedqword",[276,34,40,208,11,33],"12241248",[99,43,31,195,100,40],[103,43,33,224,104,40],[280,43,40,195,11,33],"12234193",[282,43,40,214,283,40],"12236239","zenlikethat",[285,43,40,214,11,33],"12237647",[137,191,31,195,138,40],[288,191,40,195,11,33],"12237197",[290,291,43,292,293,40],"12234851",7,"project\u002Fpositive\u002Fidea","swalsh",[176,291,40,295,11,33],"project\u002Fneutral\u002Fnone",[297,298,31,299,300,40],"12239788",8,"project\u002Fmixed\u002Fdocs","weitzj",[302,298,40,197,11,33],"12241247",[169,304,40,208,170,40],9,[306,304,40,307,11,33],"12237192","maker\u002Fpositive\u002Fnone",[80,18,43,268,81,40],[310,18,40,195,11,33],"12234187",[114,312,31,195,115,40],11,[314,312,40,230,11,33],"12237188",[316,32,33,317,318,40],"12233485","project\u002Fcritical\u002Fnone","0xdeadbeefbabe",[320,32,40,214,11,33],"12234182",[322,32,40,214,318,40],"12235678",[324,32,40,214,11,33],"12237186",[326,329],{"id":327,"t":328,"points":43,"comments":38},"11001467",1454152189,{"id":4,"t":12,"points":14,"comments":15},[331,336,341,345,350,354],{"id":332,"name":333,"points":334,"category":335},"12260794","Generating fantasy maps",1004,"creative",{"id":337,"name":338,"points":339,"category":340},"12260958","Xaddress",415,"languages",{"id":342,"name":343,"points":344,"category":340},"12227507","asyncpg",296,{"id":346,"name":347,"points":348,"category":349},"12240542","Gping.io",184,"hardware",{"id":351,"name":352,"points":353,"category":340},"12241332","cfilter",181,{"id":355,"name":356,"points":357,"category":358},"12239096","deep learning models",127,"ai",false,"v2",{"id":362,"name":5,"line":6,"ai":359,"cat":20,"year":13,"points":14,"comments":15,"rec":28,"s":363,"top":18,"kw":364,"maker":11,"domain":10,"tier":19,"attempts":38,"strip":365,"url":9,"mix":366,"praise":76,"objection":89,"sub":21},12232293,0.01,[24,25,26,27],"3031000100000330003303500310035300503100",[31,32,33,34],1794036546511]