CINXE.COM
Golang Weekly Issue 474: September 5, 2023
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>Golang Weekly Issue 474: September 5, 2023</title> <meta name="viewport" content="width=device-width, initial-scale=1" /> <link rel="stylesheet" href="/css/app.css"> <link rel="alternate" type="application/rss+xml" title="Golang Weekly" href="/rss/"> <link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600&display=swap" rel="stylesheet"> <link rel="shortcut icon" href="/favicon.png"> <meta name="facebook-domain-verification" content="lml32j8e8q00yrgpg4hs968ah31mxv" /> </head> <body class="go dom dom-go issues 474 issue go issue"> <header class="contained"> <nav> <div class="sitename" style="cursor: pointer" onclick="window.location.href='/'"><a href="/">Golang Weekly</a></div> <div class="items"> <a href="/issues" class="issues">Archives</a><span class="divider">|</span> <a href="/latest" class="latest">Latest</a><span class="nomobile"><span class="divider">|</span> <a href="/rss/">RSS</a></span> </div> </nav> </header> <main> <section class="contained"> <div class="nomobile"> <div class="subscribe_box" class=""> <form class="subscribe" action="/subscribe" method="POST"> <input type="email" placeholder="Want to subscribe? Enter your address here" class="email" name="yemail" id="email" /><button class="awesome" type="submit">Subscribe now »</button> <div class="smallprint">Easy to unsubscribe at any time. Your e-mail address <a href="https://cooperpress.com/spam.html">is safe</a> — here's <a href="https://cooperpress.com/legal/privacy/">our privacy policy.</a></div> <input type="hidden" name="_csrf" value="dA59zEjCpz4-XeSBcrt1fOwdI4RFSX2-HokaUcda5jU" /> </form> </div> </div> <div class="pager"> <div class="prev"> <a href="/issues/473">« Prev</a> </div> <div class="center"> <!-- Issue 474 --> </div> <div class="next"> <a href="/issues/475">Next »</a> </div> </div> <div class="issue-html"> <!--[if (gte mso 9)|(IE)]> <table cellpadding="0" cellspacing="0" align="center" bgcolor="#ffffff" width="600"><tr><td valign="top" style="width: 600px;" bgcolor="#ffffff"><![endif]--> <table align="center" border="0" cellpadding="0" cellspacing="0" id="main" width="100%" style="table-layout: fixed; font-family: -apple-system,BlinkMacSystemFont,Helvetica,sans-serif; font-size: 15px; line-height: 1.48em; border-collapse: collapse; max-width: 600px; height: 100% !important; direction: ltr; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px;"> <tr><td style="font-family: -apple-system,BlinkMacSystemFont,Helvetica,sans-serif; font-size: 15px; line-height: 1.48em; border-collapse: collapse;"> <div id="content"> <!-- left/right splitbar --> <table class="el-splitbar" width="100%" cellpadding="0" cellspacing="0" style="border-collapse: collapse;"><tr> <td width="50%" align="left" style="padding-left: 4px; font-family: -apple-system,BlinkMacSystemFont,Helvetica,sans-serif; font-size: 15px; line-height: 1.48em; border-collapse: collapse;"><p style="font-size: 12px; color: #999999; text-transform: uppercase; line-height: 1.0em; margin-top: 0.8em; margin-bottom: 0.8em;">#474 — September 5, 2023</p></td> <td width="50%" align="right" style="padding-right: 4px; font-family: -apple-system,BlinkMacSystemFont,Helvetica,sans-serif; font-size: 15px; line-height: 1.48em; border-collapse: collapse;"><p style="font-size: 12px; text-transform: uppercase; line-height: 1.0em; margin-top: 0.8em; margin-bottom: 0.8em;"><a target="_blank" href="https://golangweekly.com/leave/*%7CUID%7C*" style="text-decoration: none; color: #0099b4;">Unsub</a> | <a target="_blank" href="https://golangweekly.com/issues/474" style="text-decoration: none; color: #0099b4;">Web Version</a></p></td> </tr></table> <table class="norss" id="together" width="100%" align="center" style="text-align: center; border-collapse: collapse; margin-top: 0; margin-right: 0; margin-bottom: 0; margin-left: 0;"> <tr><td style="font-family: -apple-system,BlinkMacSystemFont,Helvetica,sans-serif; font-size: 15px; line-height: 1.48em; border-collapse: collapse; margin-top: 0; margin-right: 0; margin-bottom: 0; margin-left: 0; padding-top: 0; padding-right: 0; padding-bottom: 0; padding-left: 0;"> <table align="center" style="margin-top: 4px; margin-bottom: 4px; border-collapse: collapse;"> <tr> <td style="vertical-align: middle; text-align: right; text-transform: uppercase; letter-spacing: -0.2px; font-weight: 500; color: #222; font-size: 0.9em; font-family: -apple-system,BlinkMacSystemFont,Helvetica,sans-serif; line-height: 1.48em; border-collapse: collapse;">Together with </td> <td style="vertical-align: middle; text-align: left; font-family: -apple-system,BlinkMacSystemFont,Helvetica,sans-serif; font-size: 15px; line-height: 1.48em; border-collapse: collapse;"> <a target="_blank" href="https://goteleport.com/kubernetes-access/?utm_campaign=0905Cooperpress&utm_medium=partner&utm_source=golang" style="outline: none; text-decoration: none; color: #0099b4; border-top-width: 0; border-right-width: 0; border-bottom-width: 0; border-left-width: 0;"> <img src="https://res.cloudinary.com/cpress/image/upload/c_fill,g_auto,w_280,h_60/e_make_transparent/co_white,e_outline:5/vr8quyt0q3vtxkpueewu.png" style="max-width: 100px; outline: none; height: auto; text-decoration: none; line-height: 100%; border-top-width: 0; border-right-width: 0; border-bottom-width: 0; border-left-width: 0;" width="100" alt="Teleport logo"> </a> </td> </tr> </table> </td></tr> </table> <!-- masthead --> <table width="100%" cellpadding="0" cellspacing="0" style="background-color: #6cd7f2; text-align: center; color: #003322; border-collapse: collapse;" class="el-masthead"><tr><td style="font-family: -apple-system,BlinkMacSystemFont,Helvetica,sans-serif; font-size: 15px; line-height: 1.48em; border-collapse: collapse; padding-top: 0; padding-right: 12px; padding-bottom: 0; padding-left: 12px;"><p style="font-size: 1.8em; font-weight: 600; line-height: 1.0em; margin-top: 0.8em; margin-bottom: 0.8em;">Go Weekly</p></td></tr></table> <table width="100%" class="el-fullwidthimage " cellpadding="0" cellspacing="0" style="border-collapse: collapse;"><tr><td style="font-family: -apple-system,BlinkMacSystemFont,Helvetica,sans-serif; font-size: 15px; line-height: 1.48em; border-collapse: collapse;"> <a target="_blank" href="https://go.dev/blog/rebuild" style="text-decoration: none; color: #0099b4;"><img src="https://res.cloudinary.com/cpress/image/upload/w_1280,e_sharpen:60,q_auto/mfiqd2mgkplrs4mzsjtq.jpg" alt="" width="640" style="outline: none; height: auto; text-decoration: none; max-width: 100%; line-height: 100%; width: 100%; border-bottom-color: #6cd7e5; border-bottom-style: solid; border-top-width: 0; border-right-width: 0; border-bottom-width: 3px; border-left-width: 0;"></a> </td></tr></table> <table width="100%" cellpadding="0" cellspacing="0" class="el-item item " style="border-collapse: collapse; margin-bottom: 5px;"><tr><td style="font-family: -apple-system,BlinkMacSystemFont,Helvetica,sans-serif; font-size: 15px; line-height: 1.48em; border-collapse: collapse; padding-top: 0px; padding-right: 15px; padding-bottom: 0px; padding-left: 15px;"> <p class="desc" style="color: #222; margin-top: 0.8em; margin-bottom: 0;"><span style="font-weight: 600; font-size: 1.2em !important; color: #000;" class="mainlink"><a target="_blank" href="https://go.dev/blog/rebuild" title="go.dev" style="text-decoration: none; color: #0099b4; border-bottom-width: 1px !important; border-bottom-color: #ddd !important; border-bottom-style: solid !important; font-size: 1.1em; line-height: 1.4em;">Perfectly Reproducible, Verified Go Toolchains</a></span> — Go 1.21 contains some <a target="_blank" href="https://tip.golang.org/doc/go1.21" style="text-decoration: none; color: #0099b4; border-bottom-width: 1px !important; border-bottom-color: #ddd !important; border-bottom-style: solid !important;">significant features</a>, but truly reproducible builds is a big deal and Russ goes (deep) into how it works here, complete with a walkthrough. The Go team has also built a tool, <a target="_blank" href="https://pkg.go.dev/golang.org/x/build/cmd/gorebuild" style="text-decoration: none; color: #0099b4; border-bottom-width: 1px !important; border-bottom-color: #ddd !important; border-bottom-style: solid !important;">gorebuild</a>, to <em>prove</em> the feature works as intended.</p> <p class="name" style="color: #5a5a5a; margin-top: 4px; margin-bottom: 0.8em; text-transform: uppercase; font-size: 12px; line-height: 1.2em;">Russ Cox </p> </td></tr></table> <table width="100%" cellpadding="0" cellspacing="0" class="el-item item " style="border-collapse: collapse; margin-bottom: 5px;"><tr><td style="font-family: -apple-system,BlinkMacSystemFont,Helvetica,sans-serif; font-size: 15px; line-height: 1.48em; border-collapse: collapse; padding-top: 0px; padding-right: 15px; padding-bottom: 0px; padding-left: 15px;"> <p class="desc" style="color: #222; margin-top: 0.8em; margin-bottom: 0;"><span style="font-weight: 600; font-size: 1.2em !important; color: #000;" class="mainlink"><a target="_blank" href="https://shane.ai/posts/cgo-performance-in-go1.21/" title="shane.ai" style="text-decoration: none; color: #0099b4; border-bottom-width: 1px !important; border-bottom-color: #ddd !important; border-bottom-style: solid !important; font-size: 1.05em;">Cgo Performance in Go 1.21</a></span> — <a target="_blank" href="https://go.dev/blog/cgo" style="text-decoration: none; color: #0099b4; border-bottom-width: 1px !important; border-bottom-color: #ddd !important; border-bottom-style: solid !important;">Cgo</a> makes it possible for Go packages to call C code and is commonly used to provide Go apps with access to the larger world of C-based libraries. Shane doesn’t want to argue about Cgo's pros and cons here but <em>does</em> make the case that its performance is good and the overhead is insignificant in most cases.</p> <p class="name" style="color: #5a5a5a; margin-top: 4px; margin-bottom: 0.8em; text-transform: uppercase; font-size: 12px; line-height: 1.2em;">Shane Hansen </p> </td></tr></table> <table width="100%" cellpadding="0" cellspacing="0" class="el-item item " style="border-collapse: collapse; margin-bottom: 5px;"><tr><td style="font-family: -apple-system,BlinkMacSystemFont,Helvetica,sans-serif; font-size: 15px; line-height: 1.48em; border-collapse: collapse; padding-top: 0px; padding-right: 15px; padding-bottom: 0px; padding-left: 15px;"> <a target="_blank" target="_blank" href="https://goteleport.com/kubernetes-access/?utm_campaign=0905Cooperpress&utm_medium=partner&utm_source=golang" style="text-decoration: none; color: #0099b4; border-bottom-width: 1px !important; border-bottom-color: #ddd !important; border-bottom-style: solid !important;"><img src="https://copm.s3.amazonaws.com/b420082e.png" width="130" height="130" style="padding-top: 12px; padding-left: 12px; outline: none; height: auto; text-decoration: none; max-width: 100%; line-height: 100%; border-top-width: 0; border-right-width: 0; border-bottom-width: 0; border-left-width: 0;" align="right" alt="" class="som"></a> <p class="desc" style="color: #222; margin-top: 0.8em; margin-bottom: 0;"><span style="font-weight: 600; font-size: 1.2em !important; color: #000;" class="mainlink"><a target="_blank" href="https://goteleport.com/kubernetes-access/?utm_campaign=0905Cooperpress&utm_medium=partner&utm_source=golang" title="goteleport.com" style="text-decoration: none; color: #0099b4; border-bottom-width: 1px !important; border-bottom-color: #ddd !important; border-bottom-style: solid !important; font-size: 1.05em;">Certificate-Based MFA, RBAC, and SSO with Teleport</a></span> — Implement industry best practices for Kubernetes access with minimal configuration. Easily enforce MFA, RBAC, and SSO using identity-based short-lived X.509 certificates for engineers and service accounts by starting your trial today.</p> <p class="name" style="color: #5a5a5a; margin-top: 4px; margin-bottom: 0.8em; text-transform: uppercase; font-size: 12px; line-height: 1.2em;">Teleport | goteleport․com <span style="text-transform: uppercase; margin-left: 4px; font-size: 0.9em; border-radius: 2px; background-color: #ffc; color: #885 !important; padding-top: 1px; padding-right: 4px; padding-bottom: 1px; padding-left: 4px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-color: #dd9; border-right-color: #dd9; border-bottom-color: #dd9; border-left-color: #dd9; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid;" class="tag-sponsor">sponsor</span></p> </td></tr></table> <table width="100%" cellpadding="0" cellspacing="0" class="el-item item " style="border-collapse: collapse; margin-bottom: 5px;"><tr><td style="font-family: -apple-system,BlinkMacSystemFont,Helvetica,sans-serif; font-size: 15px; line-height: 1.48em; border-collapse: collapse; padding-top: 0px; padding-right: 15px; padding-bottom: 0px; padding-left: 15px;"> <p class="desc" style="color: #222; margin-top: 0.8em; margin-bottom: 0;"><span style="font-weight: 600; font-size: 1.2em !important; color: #000;" class="mainlink"><a target="_blank" href="https://theyahya.com/posts/go-pgo/" title="theyahya.com" style="text-decoration: none; color: #0099b4; border-bottom-width: 1px !important; border-bottom-color: #ddd !important; border-bottom-style: solid !important; font-size: 1.05em;">A Closer Look at Go's Profile-Guided Optimization (PGO)</a></span> — PGO offers compile-time optimization of binaries based on profile data of actual usage, which can genuinely change the performance characteristics. This is something you need to get into your build pipelines.</p> <p class="name" style="color: #5a5a5a; margin-top: 4px; margin-bottom: 0.8em; text-transform: uppercase; font-size: 12px; line-height: 1.2em;">Yahya SayadArbabi </p> </td></tr></table> <table width="100%" cellpadding="0" cellspacing="0" class="content el-md " style="border-collapse: collapse;"><tr><td style="font-family: -apple-system,BlinkMacSystemFont,Helvetica,sans-serif; font-size: 15px; line-height: 1.48em; border-collapse: collapse; padding-top: 0px; padding-right: 15px; padding-bottom: 0px; padding-left: 15px;"> <p style="margin-top: 0.8em; margin-bottom: 0.8em;"><em>QUICK BITS:</em></p> <ul> <li style="color: #222; line-height: 1.35em; margin-bottom: 12px; margin-left: 0px !important;"> <p style="margin-top: 0.8em; margin-bottom: 0.8em;">🎤 Carl Johnson went on the <em>Go Time</em> podcast to talk about <a target="_blank" href="https://changelog.com/gotime/289" style="text-decoration: none; color: #0099b4; font-weight: 600; border-bottom-width: 1px; border-bottom-color: #ddd; border-bottom-style: solid;">▶️ what's new in Go 1.21</a>.</p> </li> <li style="color: #222; line-height: 1.35em; margin-bottom: 12px; margin-left: 0px !important;"> <p style="margin-top: 0.8em; margin-bottom: 0.8em;">✨ The <a target="_blank" href="https://go.dev/tour/welcome/1" style="text-decoration: none; color: #0099b4; font-weight: 600; border-bottom-width: 1px; border-bottom-color: #ddd; border-bottom-style: solid;">official Go tour</a> now has <em>dark mode</em> support - though you do have to toggle it manually.</p> </li> <li style="color: #222; line-height: 1.35em; margin-bottom: 12px; margin-left: 0px !important;"> <p style="margin-top: 0.8em; margin-bottom: 0.8em;">Over on Twitter, Cloudflare's Matt Boyle explains <a target="_blank" href="https://twitter.com/MattJamesBoyle/status/1696074301256904943" style="text-decoration: none; color: #0099b4; font-weight: 600; border-bottom-width: 1px; border-bottom-color: #ddd; border-bottom-style: solid;">🐦 why <code style='font-family: menlo, monaco, "Ubuntu Mono", courier, monospace; font-weight: normal; background-color: inherit;'>errgroup</code> is his favorite Go package.</a> They make it <em>"really easy to take a bunch of tasks and run them in parallel, making your program faster."</em></p> </li> <li style="color: #222; line-height: 1.35em; margin-bottom: 12px; margin-left: 0px !important;"> <p style="margin-top: 0.8em; margin-bottom: 0.8em;">📗 In other Matt Boyle news, he's turning his useful Twitter threads about Go into <a target="_blank" href="https://leanpub.com/days-of-go" style="text-decoration: none; color: #0099b4; font-weight: 600; border-bottom-width: 1px; border-bottom-color: #ddd; border-bottom-style: solid;">an ebook called <em>x Days of Go</em></a> ('x' is yet to be decided). You can grab it for free or pay up to $20 if you like the cut of his jib.</p> </li> <li style="color: #222; line-height: 1.35em; margin-bottom: 12px; margin-left: 0px !important;"> <p style="margin-top: 0.8em; margin-bottom: 0.8em;">⚖️ The Go team has published an official set of <a target="_blank" href="https://go.dev/brand" style="text-decoration: none; color: #0099b4; font-weight: 600; border-bottom-width: 1px; border-bottom-color: #ddd; border-bottom-style: solid;">brand and trademark usage guidelines</a> for the term 'Go' and the official Go logo.</p> </li> <li style="color: #222; line-height: 1.35em; margin-bottom: 12px; margin-left: 0px !important;"> <p style="margin-top: 0.8em; margin-bottom: 0.8em;">Ever wanted to <a target="_blank" href="https://www.youtube.com/channel/UC3P6PrEBAVH1UaiPOzZ-u-w" style="text-decoration: none; color: #0099b4; font-weight: 600; border-bottom-width: 1px; border-bottom-color: #ddd; border-bottom-style: solid;">▶️ watch Russ Cox coding live?</a></p> </li> </ul> </td></tr></table> <table width="100%" cellpadding="0" cellspacing="0" class="el-item item " style="border-collapse: collapse; margin-bottom: 5px;"><tr><td style="font-family: -apple-system,BlinkMacSystemFont,Helvetica,sans-serif; font-size: 15px; line-height: 1.48em; border-collapse: collapse; padding-top: 0px; padding-right: 15px; padding-bottom: 0px; padding-left: 15px;"> <p class="desc" style="color: #222; margin-top: 0.8em; margin-bottom: 0;"><span style="font-weight: 600; font-size: 1.2em !important; color: #000;" class="mainlink"><a target="_blank" href="https://www.splitgraph.com/blog/seafowl-udf-golang" title="www.splitgraph.com" style="text-decoration: none; color: #0099b4; border-bottom-width: 1px !important; border-bottom-color: #ddd !important; border-bottom-style: solid !important; font-size: 1.05em;">Using Go to Write User Defined Functions (UDFs)</a></span> — Less a tutorial and more an interesting example of how <a target="_blank" href="https://seafowl.io/" style="text-decoration: none; color: #0099b4; border-bottom-width: 1px !important; border-bottom-color: #ddd !important; border-bottom-style: solid !important;">Seafowl</a>, a Rust-powered analytics database, supports user defined functions provided as WebAssembly and how Go can be used to create such functions. Go's ever improving WebAssembly support will open up more use cases like this over time.</p> <p class="name" style="color: #5a5a5a; margin-top: 4px; margin-bottom: 0.8em; text-transform: uppercase; font-size: 12px; line-height: 1.2em;">Patrick Skinner </p> </td></tr></table> <table width="100%" cellpadding="0" cellspacing="0" class="el-item item " style="border-collapse: collapse; margin-bottom: 5px;"><tr><td style="font-family: -apple-system,BlinkMacSystemFont,Helvetica,sans-serif; font-size: 15px; line-height: 1.48em; border-collapse: collapse; padding-top: 0px; padding-right: 15px; padding-bottom: 0px; padding-left: 15px;"> <p class="desc" style="color: #222; margin-top: 0.8em; margin-bottom: 0;"><span style="font-weight: 600; font-size: 1.2em !important; color: #000;" class="mainlink"><a target="_blank" href="https://encore.dev/docs/introduction?utm_campaign=ac&utm_medium=email&utm_source=golangweekly" title="encore.dev" style="text-decoration: none; color: #0099b4; border-bottom-width: 1px !important; border-bottom-color: #ddd !important; border-bottom-style: solid !important; font-size: 1.05em;">Automated Cloud Provisioning from Your Go Code</a></span> — Declare infrastructure in your Go program and get self-provisioning local, preview, and cloud environments (AWS/GCP).</p> <p class="name" style="color: #5a5a5a; margin-top: 4px; margin-bottom: 0.8em; text-transform: uppercase; font-size: 12px; line-height: 1.2em;">Encore <span style="text-transform: uppercase; margin-left: 4px; font-size: 0.9em; border-radius: 2px; background-color: #ffc; color: #885 !important; padding-top: 1px; padding-right: 4px; padding-bottom: 1px; padding-left: 4px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-color: #dd9; border-right-color: #dd9; border-bottom-color: #dd9; border-left-color: #dd9; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid;" class="tag-sponsor">sponsor</span></p> </td></tr></table> <table width="100%" cellpadding="0" cellspacing="0" class="el-item item " style="border-collapse: collapse; margin-bottom: 5px;"><tr><td style="font-family: -apple-system,BlinkMacSystemFont,Helvetica,sans-serif; font-size: 15px; line-height: 1.48em; border-collapse: collapse; padding-top: 0px; padding-right: 15px; padding-bottom: 0px; padding-left: 15px;"> <p class="desc" style="color: #222; margin-top: 0.8em; margin-bottom: 0;"><span style="font-weight: 600; font-size: 1.2em !important; color: #000;" class="mainlink"><a target="_blank" href="https://www.zenrows.com/blog/goquery" title="www.zenrows.com" style="text-decoration: none; color: #0099b4; border-bottom-width: 1px !important; border-bottom-color: #ddd !important; border-bottom-style: solid !important; font-size: 1.05em;">Using Goquery for Data Parsing</a></span> — If you’d like a jQuery-esque way of working with the DOM..</p> <p class="name" style="color: #5a5a5a; margin-top: 4px; margin-bottom: 0.8em; text-transform: uppercase; font-size: 12px; line-height: 1.2em;">ZenRows </p> </td></tr></table> <table width="100%" cellpadding="0" cellspacing="0" class="miniitem item " style="border-collapse: collapse;"><tr><td style="font-family: -apple-system,BlinkMacSystemFont,Helvetica,sans-serif; font-size: 15px; line-height: 1.48em; border-collapse: collapse; padding-top: 0px; padding-right: 15px; padding-bottom: 0px; padding-left: 15px;"> <p class="desc" style="color: #5a5a5a; line-height: 1.35em !important; margin-top: 8px; margin-right: 0px; margin-bottom: 6px; margin-left: 0px;"><span style="font-weight: 600; font-size: 1.0em; color: #000;"><a target="_blank" href="https://semaphoreci.com/blog/redis-message-broker" style="text-decoration: none; color: #0099b4; font-size: 1.0em !important; font-weight: 500; border-bottom-width: 1px; border-bottom-color: #ddd; border-bottom-style: solid;">Building Scalable Apps Using Redis as a Message Broker</a></span> <br><span class="name" style="color: #5a5a5a; margin-top: 4px; text-transform: uppercase; font-size: 12px; line-height: 1.3em;">Tomas Fernandez</span> </p> </td></tr></table> <table width="100%" cellpadding="0" cellspacing="0" class="el-heading" style="background-color: none !important; text-align: left; margin-top: 15px; color: #333333; border-collapse: collapse;"><tr><td style="font-family: -apple-system,BlinkMacSystemFont,Helvetica,sans-serif; font-size: 15px; line-height: 1.48em; border-collapse: collapse; padding-top: 0; padding-right: 0; padding-bottom: 0; padding-left: 0;"><p style="font-size: 1.6em !important; font-weight: 400 !important; text-transform: none !important; line-height: 1.4em; display: inline-block; border-bottom-width: 6px; border-bottom-color: #f4f4f4; border-bottom-style: solid; margin-top: 0.5em; margin-right: 0; margin-bottom: 0.5em; margin-left: 0;">🛠 Code & Tools</p></td></tr></table> <table width="100%" class="el-fullwidthimage bordered" cellpadding="0" cellspacing="0" style="border-collapse: collapse;"><tr><td style="font-family: -apple-system,BlinkMacSystemFont,Helvetica,sans-serif; font-size: 15px; line-height: 1.48em; border-collapse: collapse;"> <a target="_blank" href="https://autostrada.dev/" style="text-decoration: none; color: #0099b4;"><img src="https://res.cloudinary.com/cpress/image/upload/w_1280,e_sharpen:60,q_auto/aczug1pqgnq5blkq0kw6.jpg" alt="" width="640" style="outline: none; height: auto; text-decoration: none; max-width: 100%; line-height: 100%; width: 100%; border-top-color: #ddd; border-top-style: solid; border-bottom-color: #ddd; border-bottom-style: solid; border-top-width: 3px; border-right-width: 0; border-bottom-width: 3px; border-left-width: 0;"></a> </td></tr></table> <table width="100%" cellpadding="0" cellspacing="0" class="el-item item " style="border-collapse: collapse; margin-bottom: 5px;"><tr><td style="font-family: -apple-system,BlinkMacSystemFont,Helvetica,sans-serif; font-size: 15px; line-height: 1.48em; border-collapse: collapse; padding-top: 0px; padding-right: 15px; padding-bottom: 0px; padding-left: 15px;"> <p class="desc" style="color: #222; margin-top: 0.8em; margin-bottom: 0;"><span style="font-weight: 600; font-size: 1.2em !important; color: #000;" class="mainlink"><a target="_blank" href="https://autostrada.dev/" title="autostrada.dev" style="text-decoration: none; color: #0099b4; border-bottom-width: 1px !important; border-bottom-color: #ddd !important; border-bottom-style: solid !important; font-size: 1.05em;">Autostrada: A Codebase Generator for Go Projects</a></span> — A site that lets you pick from a variety of options (webapp vs JSON API, SQLite vs Postgres – add auth, secure cookies, sessions, etc.) and then download a custom codebase built from those options to continue building an app with.</p> <p class="name" style="color: #5a5a5a; margin-top: 4px; margin-bottom: 0.8em; text-transform: uppercase; font-size: 12px; line-height: 1.2em;">Alex Edwards </p> </td></tr></table> <table width="100%" cellpadding="0" cellspacing="0" class="el-item item " style="border-collapse: collapse; margin-bottom: 5px;"><tr><td style="font-family: -apple-system,BlinkMacSystemFont,Helvetica,sans-serif; font-size: 15px; line-height: 1.48em; border-collapse: collapse; padding-top: 0px; padding-right: 15px; padding-bottom: 0px; padding-left: 15px;"> <p class="desc" style="color: #222; margin-top: 0.8em; margin-bottom: 0;"><span style="font-weight: 600; font-size: 1.2em !important; color: #000;" class="mainlink"><a target="_blank" href="https://github.com/avamsi/climate" title="github.com" style="text-decoration: none; color: #0099b4; border-bottom-width: 1px !important; border-bottom-color: #ddd !important; border-bottom-style: solid !important; font-size: 1.05em;">CLI Mate: Auto-Generate Go CLIs</a></span> — Supports nested subcommands, global/local flags, help generation from godocs, typo suggestions, shell completion and more. Inspired by python-fire and powered by Cobra.</p> <p class="name" style="color: #5a5a5a; margin-top: 4px; margin-bottom: 0.8em; text-transform: uppercase; font-size: 12px; line-height: 1.2em;">Vamsi Avula </p> </td></tr></table> <table width="100%" cellpadding="0" cellspacing="0" class="el-item item " style="border-collapse: collapse; margin-bottom: 5px;"><tr><td style="font-family: -apple-system,BlinkMacSystemFont,Helvetica,sans-serif; font-size: 15px; line-height: 1.48em; border-collapse: collapse; padding-top: 0px; padding-right: 15px; padding-bottom: 0px; padding-left: 15px;"> <p class="desc" style="color: #222; margin-top: 0.8em; margin-bottom: 0;"><span style="font-weight: 600; font-size: 1.2em !important; color: #000;" class="mainlink"><a target="_blank" href="https://apitoolkit.io?utm_campaign=cooperpress" title="" style="text-decoration: none; color: #0099b4; border-bottom-width: 1px !important; border-bottom-color: #ddd !important; border-bottom-style: solid !important; font-size: 1.05em;">Monitor, Test and Document your APIs with APIToolkit</a></span> — A toolbox for building and maintaining APIs better than ever. Test and validate all API requests, and spot bugs faster.</p> <p class="name" style="color: #5a5a5a; margin-top: 4px; margin-bottom: 0.8em; text-transform: uppercase; font-size: 12px; line-height: 1.2em;">APIToolkit <span style="text-transform: uppercase; margin-left: 4px; font-size: 0.9em; border-radius: 2px; background-color: #ffc; color: #885 !important; padding-top: 1px; padding-right: 4px; padding-bottom: 1px; padding-left: 4px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-color: #dd9; border-right-color: #dd9; border-bottom-color: #dd9; border-left-color: #dd9; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid;" class="tag-sponsor">sponsor</span></p> </td></tr></table> <table width="100%" cellpadding="0" cellspacing="0" class="el-item item " style="border-collapse: collapse; margin-bottom: 5px;"><tr><td style="font-family: -apple-system,BlinkMacSystemFont,Helvetica,sans-serif; font-size: 15px; line-height: 1.48em; border-collapse: collapse; padding-top: 0px; padding-right: 15px; padding-bottom: 0px; padding-left: 15px;"> <p class="desc" style="color: #222; margin-top: 0.8em; margin-bottom: 0;"><span style="font-weight: 600; font-size: 1.2em !important; color: #000;" class="mainlink"><a target="_blank" href="https://betterstack.com/community/guides/logging/best-golang-logging-libraries/" title="betterstack.com" style="text-decoration: none; color: #0099b4; border-bottom-width: 1px !important; border-bottom-color: #ddd !important; border-bottom-style: solid !important; font-size: 1.05em;">Logging in Go: A Comparison of 8 Libraries</a></span> — With the introduction of a new core standard logging package (<code>log/slog</code>) in 1.21, are all open-source logging libraries obsolete? Ayooluwa looks at 7 of them (plus slog) and gives his opinion.</p> <p class="name" style="color: #5a5a5a; margin-top: 4px; margin-bottom: 0.8em; text-transform: uppercase; font-size: 12px; line-height: 1.2em;">Ayooluwa Isaiah </p> </td></tr></table> <table width="100%" cellpadding="0" cellspacing="0" class="el-item item " style="border-collapse: collapse; margin-bottom: 5px;"><tr><td style="font-family: -apple-system,BlinkMacSystemFont,Helvetica,sans-serif; font-size: 15px; line-height: 1.48em; border-collapse: collapse; padding-top: 0px; padding-right: 15px; padding-bottom: 0px; padding-left: 15px;"> <p class="desc" style="color: #222; margin-top: 0.8em; margin-bottom: 0;"><span style="font-weight: 600; font-size: 1.2em !important; color: #000;" class="mainlink"><a target="_blank" href="https://github.com/lotusdblabs/lotusdb" title="github.com" style="text-decoration: none; color: #0099b4; border-bottom-width: 1px !important; border-bottom-color: #ddd !important; border-bottom-style: solid !important; font-size: 1.05em;">LotusDB 2.0: A Key/Value Store Built in Go</a></span> — A Go-native key/value store that boasts high read and write performance and combines the advantages of LSM and B+ trees. Docs are a little thin on the ground but there’s a complete example in the README and <a target="_blank" href="https://medium.com/@roseduan520/lotusdb-a-fast-kv-database-in-go-60ea93b2387b" style="text-decoration: none; color: #0099b4; border-bottom-width: 1px !important; border-bottom-color: #ddd !important; border-bottom-style: solid !important;">an introductory post on Medium</a>.</p> <p class="name" style="color: #5a5a5a; margin-top: 4px; margin-bottom: 0.8em; text-transform: uppercase; font-size: 12px; line-height: 1.2em;">LotusDB Labs </p> </td></tr></table> <table width="100%" cellpadding="0" cellspacing="0" class="el-item item " style="border-collapse: collapse; margin-bottom: 5px;"><tr><td style="font-family: -apple-system,BlinkMacSystemFont,Helvetica,sans-serif; font-size: 15px; line-height: 1.48em; border-collapse: collapse; padding-top: 0px; padding-right: 15px; padding-bottom: 0px; padding-left: 15px;"> <p class="desc" style="color: #222; margin-top: 0.8em; margin-bottom: 0;"><span style="font-weight: 600; font-size: 1.2em !important; color: #000;" class="mainlink"><a target="_blank" href="https://github.com/antonmedv/expr/releases/tag/v1.15.0" title="github.com" style="text-decoration: none; color: #0099b4; border-bottom-width: 1px !important; border-bottom-color: #ddd !important; border-bottom-style: solid !important; font-size: 1.05em;">Expr 1.15.0: Expression Evaluation Within Go</a></span> — Got expressions? Expr is an engine for evaluating them, whether it’s for arithmetic, business rules, or data filtering. <a target="_blank" href="https://github.com/antonmedv/expr" style="text-decoration: none; color: #0099b4; border-bottom-width: 1px !important; border-bottom-color: #ddd !important; border-bottom-style: solid !important;">GitHub repo</a>.</p> <p class="name" style="color: #5a5a5a; margin-top: 4px; margin-bottom: 0.8em; text-transform: uppercase; font-size: 12px; line-height: 1.2em;">Anton Medvedev </p> </td></tr></table> <table width="100%" cellpadding="0" cellspacing="0" class="content el-md releases flat" style="border-collapse: collapse;"><tr><td style="font-family: -apple-system,BlinkMacSystemFont,Helvetica,sans-serif; font-size: 15px; line-height: 1.48em; border-collapse: collapse; padding-top: 0px; padding-right: 15px; padding-bottom: 0px; padding-left: 15px;"> <ul style="padding-left: 0; margin-left: 0px; list-style-type: none; list-style-position: inside;"> <li style="color: #222; line-height: 1.35em; margin-bottom: 12px; margin-left: 0px !important;"> <p style="margin-top: 0.8em; margin-bottom: 0.8em;"><a target="_blank" href="https://github.com/pion/turn" style="text-decoration: none; color: #0099b4; font-weight: 600; border-bottom-width: 1px; border-bottom-color: #ddd; border-bottom-style: solid;">Pion TURN 3.0</a><br> ↳ Toolkit for building TURN clients and servers in Go.</p> </li> <li style="color: #222; line-height: 1.35em; margin-bottom: 12px; margin-left: 0px !important;"> <p style="margin-top: 0.8em; margin-bottom: 0.8em;"><a target="_blank" href="https://github.com/deepmap/oapi-codegen" style="text-decoration: none; color: #0099b4; font-weight: 600; border-bottom-width: 1px; border-bottom-color: #ddd; border-bottom-style: solid;">oapi-codegen 1.14</a><br> ↳ Generate client/server boilerplate from OpenAPI specs.</p> </li> <li style="color: #222; line-height: 1.35em; margin-bottom: 12px; margin-left: 0px !important;"> <p style="margin-top: 0.8em; margin-bottom: 0.8em;"><a target="_blank" href="https://github.com/AlexxIT/go2rtc" style="text-decoration: none; color: #0099b4; font-weight: 600; border-bottom-width: 1px; border-bottom-color: #ddd; border-bottom-style: solid;">go2rtc 1.7</a><br> ↳ Camera streaming with RTSP, WebRTC, FFmpeg, RTMP, etc.</p> </li> <li style="color: #222; line-height: 1.35em; margin-bottom: 12px; margin-left: 0px !important;"> <p style="margin-top: 0.8em; margin-bottom: 0.8em;"><a target="_blank" href="https://github.com/juicedata/juicefs/releases/tag/v1.1.0" style="text-decoration: none; color: #0099b4; font-weight: 600; border-bottom-width: 1px; border-bottom-color: #ddd; border-bottom-style: solid;">JuiceFS 1.1</a><br> ↳ Distributed POSIX file system atop Redis & S3.</p> </li> <li style="color: #222; line-height: 1.35em; margin-bottom: 12px; margin-left: 0px !important;"> <p style="margin-top: 0.8em; margin-bottom: 0.8em;"><a target="_blank" href="https://github.com/johnkerl/miller" style="text-decoration: none; color: #0099b4; font-weight: 600; border-bottom-width: 1px; border-bottom-color: #ddd; border-bottom-style: solid;">Miller 6.9</a><br> ↳ Like <code>awk</code>, <code>sed</code>, <code>cut</code>, <code>join</code>, and <code>sort</code> for CSV.</p> </li> <li style="color: #222; line-height: 1.35em; margin-bottom: 12px; margin-left: 0px !important;"> <p style="margin-top: 0.8em; margin-bottom: 0.8em;"><a target="_blank" href="https://github.com/StackExchange/dnscontrol/releases/tag/v4.3.0" style="text-decoration: none; color: #0099b4; font-weight: 600; border-bottom-width: 1px; border-bottom-color: #ddd; border-bottom-style: solid;">DNSControl 4.3</a><br> ↳ Synchronize DNS to multiple providers.</p> </li> <li style="color: #222; line-height: 1.35em; margin-bottom: 12px; margin-left: 0px !important;"> <p style="margin-top: 0.8em; margin-bottom: 0.8em;"><a target="_blank" href="https://github.com/rabbitstack/fibratus" style="text-decoration: none; color: #0099b4; font-weight: 600; border-bottom-width: 1px; border-bottom-color: #ddd; border-bottom-style: solid;">Fibratus 2.0</a> – Windows kernel exploration tool.</p> </li> <li style="color: #222; line-height: 1.35em; margin-bottom: 12px; margin-left: 0px !important;"> <p style="margin-top: 0.8em; margin-bottom: 0.8em;"><a target="_blank" href="https://github.com/osrg/gobgp" style="text-decoration: none; color: #0099b4; font-weight: 600; border-bottom-width: 1px; border-bottom-color: #ddd; border-bottom-style: solid;">GoBGP 3.18</a> – BGP implementation in Go.</p> </li> </ul> </td></tr></table> <table width="100%" cellpadding="0" cellspacing="0" class="el-subtable " style="background-color: #F3F4F6; margin-top: 15px; border-collapse: collapse;"><tr><td style="font-family: -apple-system,BlinkMacSystemFont,Helvetica,sans-serif; font-size: 15px; line-height: 1.48em; border-collapse: collapse; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px;"> <!-- normal content section --> <table width="100%" cellpadding="0" cellspacing="0" class="content el-content " style="color: #222; border-collapse: collapse; margin-top: 0 !important;"><tr><td style="font-family: -apple-system,BlinkMacSystemFont,Helvetica,sans-serif; font-size: 15px; line-height: 1.48em; border-collapse: collapse; padding-top: 0px; padding-right: 15px; padding-bottom: 0px; padding-left: 15px;"><p style="text-transform: uppercase; font-weight: 600; font-size: 15px; border-bottom-width: 3px; border-bottom-color: #6cd7e5; border-bottom-style: solid; line-height: 1.4em; display: inline-block; margin-top: 0.8em; margin-bottom: 0.8em;">Jobs</p></td></tr></table> <table width="100%" cellpadding="0" cellspacing="0" class="miniitem item " style="border-collapse: collapse;"><tr><td style="font-family: -apple-system,BlinkMacSystemFont,Helvetica,sans-serif; font-size: 15px; line-height: 1.48em; border-collapse: collapse; padding-top: 0px; padding-right: 15px; padding-bottom: 0px; padding-left: 15px;"> <p class="desc" style="color: #5a5a5a; line-height: 1.35em !important; margin-top: 8px; margin-right: 0px; margin-bottom: 6px; margin-left: 0px;"><span style="font-weight: 600; font-size: 1.0em; color: #000;"><a target="_blank" href="https://hired.com/join/?utm_source=newsletter&utm_medium=sponsor&utm_campaign=(b2c)(l-all)(r-all)(cooper-golangweekly)&utm_content=find-your-next-job" style="text-decoration: none; color: #0099b4; font-size: 1.0em !important; font-weight: 500; border-bottom-width: 1px; border-bottom-color: #ddd; border-bottom-style: solid;">Find a Job Through Hired</a></span> — Hired makes job hunting easy-instead of chasing recruiters, companies approach you with salary details up front. Create a free profile now. <br><span class="name" style="color: #5a5a5a; margin-top: 4px; text-transform: uppercase; font-size: 12px; line-height: 1.3em;">Hired</span> </p> </td></tr></table> <table width="100%" cellpadding="0" cellspacing="0" style="border-collapse: collapse;"><tr><td style="height: 10px; font-family: -apple-system,BlinkMacSystemFont,Helvetica,sans-serif; font-size: 15px; line-height: 1.48em; border-collapse: collapse;"></td></tr></table> </td></tr></table> <table width="100%" cellpadding="0" cellspacing="0" style="border-collapse: collapse;"><tr><td style="height: 10px; font-family: -apple-system,BlinkMacSystemFont,Helvetica,sans-serif; font-size: 15px; line-height: 1.48em; border-collapse: collapse;"></td></tr></table> <table width="100%" cellpadding="0" cellspacing="0" class="el-item item " style="border-collapse: collapse; margin-bottom: 5px;"><tr><td style="font-family: -apple-system,BlinkMacSystemFont,Helvetica,sans-serif; font-size: 15px; line-height: 1.48em; border-collapse: collapse; padding-top: 0px; padding-right: 15px; padding-bottom: 0px; padding-left: 15px;"> <p class="desc" style="color: #222; margin-top: 0.8em; margin-bottom: 0;"><span style="font-weight: 600; font-size: 1.2em !important; color: #000;" class="mainlink"><a target="_blank" href="https://codeberg.org/gothub/gothub" title="codeberg.org" style="text-decoration: none; color: #0099b4; border-bottom-width: 1px !important; border-bottom-color: #ddd !important; border-bottom-style: solid !important; font-size: 1.05em;">GotHub: An Alternative GitHub Frontend / Proxy</a></span> — It’s not a typo, but a Go-powered alternative front-end for GitHub. It’s also <a target="_blank" href="https://codeberg.org/gothub/gothub/issues/131" style="text-decoration: none; color: #0099b4; border-bottom-width: 1px !important; border-bottom-color: #ddd !important; border-bottom-style: solid !important;">looking for new maintainers</a>.</p> <p class="name" style="color: #5a5a5a; margin-top: 4px; margin-bottom: 0.8em; text-transform: uppercase; font-size: 12px; line-height: 1.2em;">Arya K </p> </td></tr></table> <table width="100%" cellpadding="0" cellspacing="0" style="border-collapse: collapse;"><tr><td style="height: 16px; font-family: -apple-system,BlinkMacSystemFont,Helvetica,sans-serif; font-size: 15px; line-height: 1.48em; border-collapse: collapse;"></td></tr></table> </div> </td></tr> </table> <!--[if (gte mso 9)|(IE)]></td></tr></table><![endif]--> </div> <div class="pager"> <div class="prev"> <a href="/issues/473">« Prev</a> </div> <div class="center"> <!-- Issue 474 --> </div> <div class="next"> <a href="/issues/475">Next »</a> </div> </div> <div class="subscribe_box" class=""> <form class="subscribe" action="/subscribe" method="POST"> <input type="email" placeholder="Want to subscribe? Enter your address here" class="email" name="yemail" id="email" /><button class="awesome" type="submit">Subscribe now »</button> <div class="smallprint">Easy to unsubscribe at any time. Your e-mail address <a href="https://cooperpress.com/spam.html">is safe</a> — here's <a href="https://cooperpress.com/legal/privacy/">our privacy policy.</a></div> <input type="hidden" name="_csrf" value="dA59zEjCpz4-XeSBcrt1fOwdI4RFSX2-HokaUcda5jU" /> </form> </div> </section> <img src="/open/474/web" /> </main> <script src="/js/app.js"></script> <script>(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)})(window,document,'script','//www.google-analytics.com/analytics.js','ga');ga('create','UA-32535004-16','golangweekly.com');ga('send', 'pageview'); </script> </body> </html>