<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Victor Avelar</title>
    <description>The latest articles on Forem by Victor Avelar (@victoravelar).</description>
    <link>https://forem.com/victoravelar</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F31936%2Fc638217c-c977-472e-a549-ea58f5bc5238.jpg</url>
      <title>Forem: Victor Avelar</title>
      <link>https://forem.com/victoravelar</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/victoravelar"/>
    <language>en</language>
    <item>
      <title>Navigating the current tech landscape.</title>
      <dc:creator>Victor Avelar</dc:creator>
      <pubDate>Sat, 14 Feb 2026 13:23:43 +0000</pubDate>
      <link>https://forem.com/victoravelar/navigating-the-current-tech-landscape-9ca</link>
      <guid>https://forem.com/victoravelar/navigating-the-current-tech-landscape-9ca</guid>
      <description>&lt;p&gt;I wrote a thing 😅&lt;/p&gt;

&lt;p&gt;If you are feeling stuck in a stable role but are hesitant to jump into a tougher market, it is time to look at career growth through a different lens. I have put together some thoughts on why industry salaries are recalibrating, the two distinct paths for growth in the current landscape, and why understanding your core motivators is the only way to avoid the trap of a role you do not actually enjoy.&lt;/p&gt;

&lt;p&gt;Read the full article: &lt;a href="https://victoravelar.dev/articles/2026/navigating-the-current-landscape-growth-beyond-the-ladder/" rel="noopener noreferrer"&gt;https://victoravelar.dev/articles/2026/navigating-the-current-landscape-growth-beyond-the-ladder/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>careerdevelopment</category>
      <category>leadership</category>
      <category>career</category>
    </item>
    <item>
      <title>Hacktoberfest 2023, a recap</title>
      <dc:creator>Victor Avelar</dc:creator>
      <pubDate>Fri, 01 Dec 2023 11:10:33 +0000</pubDate>
      <link>https://forem.com/victoravelar/placeholder-contributor-4nbj</link>
      <guid>https://forem.com/victoravelar/placeholder-contributor-4nbj</guid>
      <description>&lt;h3&gt;
  
  
  Intro
&lt;/h3&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/VictorAvelar" rel="noopener noreferrer"&gt;
        VictorAvelar
      &lt;/a&gt; / &lt;a href="https://github.com/VictorAvelar/VictorAvelar" rel="noopener noreferrer"&gt;
        VictorAvelar
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      My personal README.md
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;👋&lt;/h3&gt;

&lt;/div&gt;
&lt;p&gt;I'm a Mexican engineer who enjoys coding.&lt;/p&gt;
&lt;p&gt;I mostly write code in Go and PHP.&lt;/p&gt;
&lt;p&gt;📫 You can reach me on twitter: &lt;a href="https://twitter.com/VictorAvelar" rel="nofollow noopener noreferrer"&gt;@VictorAvelar&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;🔭 I’m currently working as Engineering Manager at @commercetools&lt;/p&gt;

&lt;/div&gt;



&lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/VictorAvelar/VictorAvelar" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;
&lt;br&gt;&lt;br&gt;
I've been taking part in Hacktoberfest for five years now. It initially began as a fantastic opportunity to enhance my coding skills, and over time, it has evolved into an event that I cherish and eagerly anticipate each year.

&lt;p&gt;I mainly focus on Go projects because it's a language that I find thrilling to work with. Contributing to other repositories helps me learn and understand how various teams and companies address issues used by hundreds, if not thousands, of developers daily. Open source, for me, is an excellent learning experience.&lt;/p&gt;

&lt;h3&gt;
  
  
  Growth
&lt;/h3&gt;

&lt;p&gt;During Hacktoberfest, I've found that I've been continuously developing skills, and surprisingly, they lean more towards the soft skills side. Interacting with maintainers and PR reviewers has helped me improve my communication, develop a direct yet friendly tone, and has proven to be an excellent source of feedback.&lt;/p&gt;

&lt;h3&gt;
  
  
  Final thoughts
&lt;/h3&gt;

&lt;p&gt;I'm a bit sad that the t-shirts won't be given out this year, but I completely understand the logistical and environmental reasons behind this decision. Although it wasn't the main reason for me to join this amazing event, I must admit that I'll miss the t-shirts and the wonderful sticker bundles a lot.&lt;/p&gt;

</description>
      <category>hack23contributor</category>
    </item>
    <item>
      <title>Hiring!</title>
      <dc:creator>Victor Avelar</dc:creator>
      <pubDate>Mon, 07 Sep 2020 12:01:44 +0000</pubDate>
      <link>https://forem.com/victoravelar/hiring-2h4g</link>
      <guid>https://forem.com/victoravelar/hiring-2h4g</guid>
      <description>&lt;p&gt;Hey guys! hope you are all doing fine.&lt;/p&gt;

&lt;p&gt;We have a couple of open positions at the team I am in charge of, I thought about dropping them here, probably someone it's looking for a new challenge.&lt;/p&gt;

&lt;p&gt;Backend engineer: &lt;a href="https://company.trivago.com/jobs/r4575346002/"&gt;https://company.trivago.com/jobs/r4575346002/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Fullstack engineer:&lt;a href="https://company.trivago.com/jobs/r4805198002/"&gt;https://company.trivago.com/jobs/r4805198002/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;GCP Engineer: &lt;a href="https://company.trivago.com/jobs/r4470015002/"&gt;https://company.trivago.com/jobs/r4470015002/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you wanna discuss feel free to reach me on &lt;a href="https://twitter.com/VictorAvelar"&gt;twitter&lt;/a&gt; or &lt;a href="https://linkedin.com/in/victoravelar"&gt;linkedin&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>hiring</category>
    </item>
    <item>
      <title>Software engineering interviews AMA</title>
      <dc:creator>Victor Avelar</dc:creator>
      <pubDate>Mon, 04 Nov 2019 13:42:39 +0000</pubDate>
      <link>https://forem.com/victoravelar/software-engineering-interviews-ama-4dep</link>
      <guid>https://forem.com/victoravelar/software-engineering-interviews-ama-4dep</guid>
      <description>&lt;p&gt;I've been conducting coding interviews for some time and I will like to help you answer questions you might have about it.&lt;/p&gt;

&lt;p&gt;I am not a recruiter, I do the so-called "technical interview" so lets share and hopefully help someone to hit a home run on their next interview.&lt;/p&gt;

&lt;p&gt;Some topics I think you might be curious are:&lt;br&gt;
preparation, approach, tools, common pitfalls, etc...&lt;/p&gt;

&lt;p&gt;So go on and shoot 😄&lt;/p&gt;




&lt;h2&gt;
  
  
  Side note
&lt;/h2&gt;

&lt;p&gt;I am thinking about sparing some time to do mock interviews with some newcomers to the software industry, so if you are interested please let me know and we can check a way to sort it out.&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>career</category>
      <category>beginners</category>
      <category>ama</category>
    </item>
    <item>
      <title>ANNOUNCEMENT - DEV from your WTF terminal</title>
      <dc:creator>Victor Avelar</dc:creator>
      <pubDate>Mon, 23 Sep 2019 07:51:13 +0000</pubDate>
      <link>https://forem.com/victoravelar/announcement-dev-from-your-wtf-terminal-1n7k</link>
      <guid>https://forem.com/victoravelar/announcement-dev-from-your-wtf-terminal-1n7k</guid>
      <description>&lt;p&gt;The module has been released, and I just want to share the docs with you, so that you can take a look.&lt;/p&gt;

&lt;p&gt;If you haven't try WTFutil, you should.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://wtfutil.com/modules/devto/"&gt;DEV on WTF&lt;/a&gt;&lt;/p&gt;

</description>
      <category>go</category>
      <category>showdev</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>The devto module</title>
      <dc:creator>Victor Avelar</dc:creator>
      <pubDate>Fri, 20 Sep 2019 17:53:43 +0000</pubDate>
      <link>https://forem.com/victoravelar/the-devto-module-k91</link>
      <guid>https://forem.com/victoravelar/the-devto-module-k91</guid>
      <description>&lt;p&gt;⚠️ The module is up and awaiting for review ⚠️&lt;/p&gt;

&lt;p&gt;Here is the source code&lt;/p&gt;


&lt;div class="ltag_github-liquid-tag"&gt;
  &lt;h1&gt;
    &lt;a href="https://github.com/wtfutil/wtf/pull/644" rel="noopener noreferrer"&gt;
      &lt;img class="github-logo" alt="GitHub logo" src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg"&gt;
      &lt;span class="issue-title"&gt;
        Implementation of WTF devto module
      &lt;/span&gt;
      &lt;span class="issue-number"&gt;#644&lt;/span&gt;
    &lt;/a&gt;
  &lt;/h1&gt;
  &lt;div class="github-thread"&gt;
    &lt;div class="timeline-comment-header"&gt;
      &lt;a href="https://github.com/VictorAvelar" rel="noopener noreferrer"&gt;
        &lt;img class="github-liquid-tag-img" src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Favatars3.githubusercontent.com%2Fu%2F7926849%3Fv%3D4" alt="VictorAvelar avatar"&gt;
      &lt;/a&gt;
      &lt;div class="timeline-comment-header-text"&gt;
        &lt;strong&gt;
          &lt;a href="https://github.com/VictorAvelar" rel="noopener noreferrer"&gt;VictorAvelar&lt;/a&gt;
        &lt;/strong&gt; posted on &lt;a href="https://github.com/wtfutil/wtf/pull/644" rel="noopener noreferrer"&gt;&lt;time&gt;Sep 20, 2019&lt;/time&gt;&lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag-github-body"&gt;
      
    &lt;/div&gt;
    &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/wtfutil/wtf/pull/644" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  Thoughts on the process
&lt;/h2&gt;

&lt;p&gt;There is a lack of explicit information on how to create modules, so if you are eager to create a module you will need to read tons and tons of code.&lt;/p&gt;

&lt;p&gt;Another thing that I found tricky was properly configuring the keyboard integration, but there are amazing modules with this feature that you can copy and modify.&lt;/p&gt;

&lt;p&gt;Make sure to read the &lt;code&gt;CONTRIBUTING.md&lt;/code&gt; file before starting, it will allow you to plan the development with all the requirements.&lt;/p&gt;

&lt;p&gt;Finally, please update the docs, if you take a look at the source code, you will find a lot of good modules that have poor or no documentation at all.&lt;/p&gt;

&lt;h2&gt;
  
  
  The process
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Get familiar with Go Modules as it is the dependency management system used by &lt;code&gt;wtfutil/wtf&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Check the existing modules so that you can get ideas and also so that you understand how everything works.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;If you're going to install some modules this is the time, for the current module, I just used the API client we built along this series.&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/VictorAvelar" rel="noopener noreferrer"&gt;
        VictorAvelar
      &lt;/a&gt; / &lt;a href="https://github.com/VictorAvelar/devto-api-go" rel="noopener noreferrer"&gt;
        devto-api-go
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      A go client for the dev.to API
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;devto-api-go&lt;/h1&gt;

&lt;/div&gt;
&lt;p&gt;A go client for the dev.to API&lt;/p&gt;
&lt;p&gt;&lt;a href="https://opensource.org/licenses/MIT" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/28f4d479bf0a9b033b3a3b95ab2adc343da448a025b01aefdc0fbc7f0e169eb8/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d4d49542d677265656e2e737667" alt="License: MIT"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h4 class="heading-element"&gt;Travis CI&lt;/h4&gt;

&lt;/div&gt;
&lt;p&gt;&lt;a href="https://travis-ci.org/VictorAvelar/devto-api-go" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/b2e2d0c257c3c44cde54b7fa19ca7cd717b090877432d55e2474d2cbff943cf0/68747470733a2f2f7472617669732d63692e6f72672f566963746f724176656c61722f646576746f2d6170692d676f2e7376673f6272616e63683d6d6173746572" alt="Build Status"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h4 class="heading-element"&gt;Scrutinizer&lt;/h4&gt;

&lt;/div&gt;
&lt;p&gt;&lt;a href="https://scrutinizer-ci.com/g/VictorAvelar/devto-api-go/build-status/master" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/7be6f4957a98840d97d32a607248b02d7bfeeffaa2157f78f9233dc835f6e997/68747470733a2f2f7363727574696e697a65722d63692e636f6d2f672f566963746f724176656c61722f646576746f2d6170692d676f2f6261646765732f6275696c642e706e673f623d6d6173746572" alt="Scrutinizer Build Status"&gt;&lt;/a&gt;
&lt;a href="https://scrutinizer-ci.com/g/VictorAvelar/devto-api-go/?branch=master" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/45e8ba275cab39b7bf353ddd2f0c53871d9e5273b8c57b0f7680233599eab7cf/68747470733a2f2f7363727574696e697a65722d63692e636f6d2f672f566963746f724176656c61722f646576746f2d6170692d676f2f6261646765732f7175616c6974792d73636f72652e706e673f623d6d6173746572" alt="Scrutinizer Code Quality"&gt;&lt;/a&gt;
&lt;a href="https://scrutinizer-ci.com/g/VictorAvelar/devto-api-go/?branch=master" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/406f73dbe548a989ac924243902ae0dd2fd481410b16ac50c1eb70b902cd8727/68747470733a2f2f7363727574696e697a65722d63692e636f6d2f672f566963746f724176656c61722f646576746f2d6170692d676f2f6261646765732f636f7665726167652e706e673f623d6d6173746572" alt="Code Coverage"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h4 class="heading-element"&gt;Go ecosystem&lt;/h4&gt;

&lt;/div&gt;
&lt;p&gt;&lt;a href="https://goreportcard.com/report/github.com/VictorAvelar/devto-api-go" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/0095e4ed08985cb3d5fb8b70b48d77fc981ac74c85c9971f2f26b752f330e99b/68747470733a2f2f676f7265706f7274636172642e636f6d2f62616467652f6769746875622e636f6d2f566963746f724176656c61722f646576746f2d6170692d676f" alt="Go Report Card"&gt;&lt;/a&gt;
&lt;a href="https://godoc.org/github.com/VictorAvelar/devto-api-go" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/2bd82213c0572c72f4d974b28930752d2233fff8145ad2a2a0bef63e23a5c16f/68747470733a2f2f676f646f632e6f72672f6769746875622e636f6d2f566963746f724176656c61722f646576746f2d6170692d676f3f7374617475732e737667" alt="GoDoc"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Roadmap&lt;/h2&gt;

&lt;/div&gt;
&lt;ul class="contains-task-list"&gt;
&lt;li class="task-list-item"&gt;
 Base client and configuration&lt;/li&gt;
&lt;li class="task-list-item"&gt;
 Articles resource&lt;/li&gt;
&lt;li class="task-list-item"&gt;
 CLI utility&lt;/li&gt;
&lt;li class="task-list-item"&gt;
 Authentication resource&lt;/li&gt;
&lt;li class="task-list-item"&gt;
 Extend the tests suite&lt;/li&gt;
&lt;li class="task-list-item"&gt;
 Provide code examples&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Disclaimer&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;This library is not an official dev.to API library, but a friendly contribution to the dev.to community&lt;/p&gt;
&lt;/div&gt;

  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/VictorAvelar/devto-api-go" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Go to the modules directory and create a sub directory to start coding, for this module it is &lt;code&gt;modules/devto&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The files
&lt;/h2&gt;

&lt;p&gt;It will be possible to have everything in one file, but I like to split the code so that the filename refers to the content.&lt;/p&gt;

&lt;p&gt;After checking how the &lt;code&gt;hackernews&lt;/code&gt; module works (which heavily inspired this whole series) I have a good idea of what I need.&lt;/p&gt;

&lt;p&gt;In &lt;code&gt;keyboard.go&lt;/code&gt; we are going to place all the keyboard bindings for our module, we need to be able to navigate from one history to another, and also we need to be able to open the content in our default browser.&lt;/p&gt;

&lt;p&gt;So to make things easier, I will put here a screenshot from the module documentation:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fsmmryolxwlvpljkexlwx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fsmmryolxwlvpljkexlwx.png" alt="Keyboard bindings"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Code wise it is not that amazing, here you have the fragment that accomplishes this functionality&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;widget&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;Widget&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;initializeKeyboardControls&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;widget&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;InitializeCommonControls&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;widget&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Refresh&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;widget&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;SetKeyboardKey&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tcell&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;KeyDown&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;widget&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Next&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Select next item"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;widget&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;SetKeyboardKey&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tcell&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;KeyUp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;widget&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Prev&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Select previous item"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;widget&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;SetKeyboardKey&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tcell&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;KeyEnter&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;widget&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;openStory&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Open story in browser"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;widget&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;SetKeyboardKey&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tcell&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;KeyEsc&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;widget&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Unselect&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Clear selection"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In &lt;code&gt;settings.go&lt;/code&gt; you grab the values from the user's &lt;code&gt;config.yaml&lt;/code&gt; file and put it into your Widget.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F48mkcifly63jo5teqiv2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F48mkcifly63jo5teqiv2.png" alt="Settings"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And here is the yaml to use this module:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;devto&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;enabled&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
  &lt;span class="na"&gt;numberOfArticles&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;10&lt;/span&gt;
  &lt;span class="na"&gt;position&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;top&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;
    &lt;span class="na"&gt;left&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;
    &lt;span class="na"&gt;height&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;
    &lt;span class="na"&gt;width&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;2&lt;/span&gt;
  &lt;span class="na"&gt;contentTag&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;showdev"&lt;/span&gt; 
  &lt;span class="na"&gt;contentUsername&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;victoravelar"&lt;/span&gt;
  &lt;span class="na"&gt;contentState&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;rising"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And finally the &lt;code&gt;widget.go&lt;/code&gt;, TBH this is just the hackernews widget file with some customization to make it work with the dev.to API.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusions
&lt;/h2&gt;

&lt;p&gt;It was not as hard as expected, and I hope a lot of people is able to get the articles from this community straight to their terminal.&lt;/p&gt;

&lt;p&gt;Do your own and please let the world know.&lt;/p&gt;

</description>
      <category>go</category>
      <category>showdev</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>My solution to Code challenge #77</title>
      <dc:creator>Victor Avelar</dc:creator>
      <pubDate>Thu, 19 Sep 2019 08:27:20 +0000</pubDate>
      <link>https://forem.com/victoravelar/my-solution-to-code-challenge-77-2f5n</link>
      <guid>https://forem.com/victoravelar/my-solution-to-code-challenge-77-2f5n</guid>
      <description>&lt;p&gt;Implemented in golang, quite easy to be fair 😄&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="n"&gt;GetNthFib&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="m"&gt;2&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Explanation
&lt;/h2&gt;

&lt;p&gt;So we check for the first two value as this two are required to be able to build the rest of the sequence.&lt;/p&gt;

&lt;p&gt;Once we know it is not 0 (x) or 1 (y), we know that the correct result comes from adding the x+y and moving the values 1 place forward.&lt;/p&gt;

&lt;p&gt;The loop starts at 2 because otherwise the results will be offset by 2 iterations (we already check the first two statically).&lt;/p&gt;

&lt;p&gt;For example, if the loop starts at 0 and they ask for nth 3, then our result will be 3 which is incorrect as the third position on Fibonacci's sequence is 1.&lt;/p&gt;

&lt;p&gt;You can play around with it by using this &lt;a href="https://play.golang.org/p/yNUdwd07SvF"&gt;Golang Playground link&lt;/a&gt;&lt;/p&gt;

</description>
      <category>go</category>
      <category>showdev</category>
      <category>challenge</category>
    </item>
    <item>
      <title>Episode 5 - Adding resources to your Client</title>
      <dc:creator>Victor Avelar</dc:creator>
      <pubDate>Wed, 18 Sep 2019 12:34:06 +0000</pubDate>
      <link>https://forem.com/victoravelar/episode-5-adding-resources-to-your-client-3jff</link>
      <guid>https://forem.com/victoravelar/episode-5-adding-resources-to-your-client-3jff</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;So after being at the Alps for some days, here we go again.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  What is a resource?
&lt;/h2&gt;

&lt;p&gt;According to &lt;a href="https://restful-api-design"&gt;https://restful-api-design.readthedocs.io&lt;/a&gt; a resource is described as follows:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The fundamental concept in any RESTful API is the resource. A resource is an object with a type, associated data, relationships to other resources, and a set of methods that operate on it. It is similar to an object instance in an object-oriented programming language, with the important difference that only a few standard methods are defined for the resource (corresponding to the standard HTTP GET, POST, PUT and DELETE methods), while an object instance typically has many methods.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This means that when adding a resource this will allow us to perform operations with our client on specific and well defined types.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to add a resource to a client?
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;We create a resource type to hold the methods to interact with articles, this will contain a pointer to our &lt;code&gt;devto.Client&lt;/code&gt; implementation,
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="c"&gt;// articles.go&lt;/span&gt;

&lt;span class="k"&gt;type&lt;/span&gt; &lt;span class="n"&gt;ArticleResource&lt;/span&gt; &lt;span class="k"&gt;struct&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;API&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;Client&lt;/span&gt; &lt;span class="c"&gt;// this will receive a pointer to your client instance&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;And then we attach this using the client constructor&lt;/p&gt;

&lt;p&gt;you can see a working example in the repository&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--A9-wwsHG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/VictorAvelar"&gt;
        VictorAvelar
      &lt;/a&gt; / &lt;a href="https://github.com/VictorAvelar/devto-api-go"&gt;
        devto-api-go
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      A go client for the dev.to API
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;h1 id="user-content-devto-api-go"&gt;&lt;a class="heading-link" href="https://github.com/VictorAvelar/devto-api-go#devto-api-go"&gt;devto-api-go&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;A go client for the dev.to API&lt;/p&gt;
&lt;p&gt;&lt;a href="https://opensource.org/licenses/MIT" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/fd551ba4b042d89480347a0e74e31af63b356b2cac1116c7b80038f41b04a581/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d4d49542d677265656e2e737667" alt="License: MIT"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4 id="user-content-travis-ci"&gt;&lt;a class="heading-link" href="https://github.com/VictorAvelar/devto-api-go#travis-ci"&gt;Travis CI&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;&lt;a href="https://travis-ci.org/VictorAvelar/devto-api-go" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/572cf1b9c6da49cf8ed8a9e66888988f490c8d6dc9e7f677803a8d5fd92c4e58/68747470733a2f2f7472617669732d63692e6f72672f566963746f724176656c61722f646576746f2d6170692d676f2e7376673f6272616e63683d6d6173746572" alt="Build Status"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4 id="user-content-scrutinizer"&gt;&lt;a class="heading-link" href="https://github.com/VictorAvelar/devto-api-go#scrutinizer"&gt;Scrutinizer&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;&lt;a href="https://scrutinizer-ci.com/g/VictorAvelar/devto-api-go/build-status/master" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/b37b8138d1f787ae4fe02d7ad445b365ab6d120911604cd044264d104a05a1fa/68747470733a2f2f7363727574696e697a65722d63692e636f6d2f672f566963746f724176656c61722f646576746f2d6170692d676f2f6261646765732f6275696c642e706e673f623d6d6173746572" alt="Scrutinizer Build Status"&gt;&lt;/a&gt;
&lt;a href="https://scrutinizer-ci.com/g/VictorAvelar/devto-api-go/?branch=master" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/58dfc453d62b808239a61e0180f2332a7d17485110d82f53bdbac88a2d744859/68747470733a2f2f7363727574696e697a65722d63692e636f6d2f672f566963746f724176656c61722f646576746f2d6170692d676f2f6261646765732f7175616c6974792d73636f72652e706e673f623d6d6173746572" alt="Scrutinizer Code Quality"&gt;&lt;/a&gt;
&lt;a href="https://scrutinizer-ci.com/g/VictorAvelar/devto-api-go/?branch=master" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/efac6064096481c1440c49225b7fc00850810c30101ce14defe391e6f2db56e9/68747470733a2f2f7363727574696e697a65722d63692e636f6d2f672f566963746f724176656c61722f646576746f2d6170692d676f2f6261646765732f636f7665726167652e706e673f623d6d6173746572" alt="Code Coverage"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4 id="user-content-go-ecosystem"&gt;&lt;a class="heading-link" href="https://github.com/VictorAvelar/devto-api-go#go-ecosystem"&gt;Go ecosystem&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;&lt;a href="https://goreportcard.com/report/github.com/VictorAvelar/devto-api-go" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/7335fbe5b41670b1ec3cbbfbc639752556b7734ab3244b0a94b9c9a0566ef270/68747470733a2f2f676f7265706f7274636172642e636f6d2f62616467652f6769746875622e636f6d2f566963746f724176656c61722f646576746f2d6170692d676f" alt="Go Report Card"&gt;&lt;/a&gt;
&lt;a href="https://godoc.org/github.com/VictorAvelar/devto-api-go" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/744965f2837e867fa711c19b04e7c39db3844dfec1dde529f7d6f4f5af44d302/68747470733a2f2f676f646f632e6f72672f6769746875622e636f6d2f566963746f724176656c61722f646576746f2d6170692d676f3f7374617475732e737667" alt="GoDoc"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="user-content-roadmap"&gt;&lt;a class="heading-link" href="https://github.com/VictorAvelar/devto-api-go#roadmap"&gt;Roadmap&lt;/a&gt;&lt;/h2&gt;
&lt;ul class="contains-task-list"&gt;
&lt;li class="task-list-item"&gt;
 Base client and configuration&lt;/li&gt;
&lt;li class="task-list-item"&gt;
 Articles resource&lt;/li&gt;
&lt;li class="task-list-item"&gt;
 CLI utility&lt;/li&gt;
&lt;li class="task-list-item"&gt;
 Authentication resource&lt;/li&gt;
&lt;li class="task-list-item"&gt;
 Extend the tests suite&lt;/li&gt;
&lt;li class="task-list-item"&gt;
 Provide code examples&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="user-content-disclaimer"&gt;&lt;a class="heading-link" href="https://github.com/VictorAvelar/devto-api-go#disclaimer"&gt;Disclaimer&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;This library is not an official dev.to API library, but a friendly contribution to the dev.to community&lt;/p&gt;
&lt;/div&gt;

  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/VictorAvelar/devto-api-go"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;



&lt;p&gt;From now on, we are up for the wtfutil part.&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>tutorial</category>
      <category>go</category>
    </item>
    <item>
      <title>Episode 4 - Types</title>
      <dc:creator>Victor Avelar</dc:creator>
      <pubDate>Wed, 11 Sep 2019 08:05:17 +0000</pubDate>
      <link>https://forem.com/victoravelar/episode-4-types-2l9i</link>
      <guid>https://forem.com/victoravelar/episode-4-types-2l9i</guid>
      <description>&lt;p&gt;📷 Photo by &lt;a href="https://unsplash.com/photos/BVyNlchWqzs"&gt;Amador Loureiro&lt;/a&gt; on Unsplash&lt;/p&gt;

&lt;p&gt;Hey we are getting closer to being able to use dev.to API.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is a type
&lt;/h3&gt;

&lt;p&gt;According to &lt;a href="https://thenewstack.io/understanding-golang-type-system/"&gt;this article&lt;/a&gt; that is the definition I find easier to understand&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The type system is the most important feature of a programming language, letting you organize your application data. Go follows a minimalist approach for its type system. It provides several built-in types such as string, bool, int and float64.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;You can think of a type like described there with primitives, this describes the space in memory needed and the type of data that is going to be allocated there.&lt;/p&gt;

&lt;p&gt;For example for a type user:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="c"&gt;// User contains information about a devto account&lt;/span&gt;
&lt;span class="k"&gt;type&lt;/span&gt; &lt;span class="n"&gt;User&lt;/span&gt; &lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;Name&lt;/span&gt;            &lt;span class="kt"&gt;string&lt;/span&gt;  &lt;span class="s"&gt;`json:"name,omitempty"`&lt;/span&gt;
    &lt;span class="n"&gt;Username&lt;/span&gt;        &lt;span class="kt"&gt;string&lt;/span&gt;  &lt;span class="s"&gt;`json:"username,omitempty"`&lt;/span&gt;
    &lt;span class="n"&gt;TwitterUsername&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt;  &lt;span class="s"&gt;`json:"twitter_username,omitempty"`&lt;/span&gt;
    &lt;span class="n"&gt;GithubUsername&lt;/span&gt;  &lt;span class="kt"&gt;string&lt;/span&gt;  &lt;span class="s"&gt;`json:"github_username,omitempty"`&lt;/span&gt;
    &lt;span class="n"&gt;WebsiteURL&lt;/span&gt;      &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;WebURL&lt;/span&gt; &lt;span class="s"&gt;`json:"website_url,omitempty"`&lt;/span&gt;
    &lt;span class="n"&gt;ProfileImage&lt;/span&gt;    &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;WebURL&lt;/span&gt; &lt;span class="s"&gt;`json:"profile_image,omitempty"`&lt;/span&gt;
    &lt;span class="n"&gt;ProfileImage90&lt;/span&gt;  &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;WebURL&lt;/span&gt; &lt;span class="s"&gt;`json:"profile_image_90,omitempty"`&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;We are telling the go compiler that every time something has the &lt;code&gt;devto.User&lt;/code&gt; type assigned it should allocate enough space in memory to place an object with this structure.&lt;/p&gt;

&lt;p&gt;Here you have an amazing repository with a lot of &lt;a href="https://github.com/golang/example/tree/master/gotypes#types"&gt;go examples&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  WTF are those things after the type?
&lt;/h3&gt;

&lt;p&gt;Those are called tags, and for me it's kinda the go way of doing annotations, coming from PHP at least this is how it looks like.&lt;/p&gt;

&lt;p&gt;The Go spec in the Struct types definition defines tags as:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A field declaration may be followed by an optional string literal tag, which becomes an attribute for all the fields in the corresponding field declaration. An empty tag string is equivalent to an absent tag. The tags are made visible through a reflection interface and take part in type identity for structs but are otherwise ignored.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This will helps us to do something called JSON unmarshalling, but hold your horses, we are not there yet!&lt;/p&gt;
&lt;h3&gt;
  
  
  The practical dev types
&lt;/h3&gt;

&lt;p&gt;For getting the types you need to analyze the example responses from the API documentation, we will use the &lt;a href="https://docs.dev.to/api/#tag/articles/paths/~1articles~1{id}/get"&gt;Get article spec&lt;/a&gt; because for the create request we have only the parameters we are supposed to submit, in the get article endpoint you get the article information plus all the metadata devto is adding in the background.&lt;/p&gt;

&lt;p&gt;Now nesting structs when creating types is not a road I will recommend you to take, because it gets messy quite fast, instead try to start breaking every nested object to its own type.&lt;/p&gt;

&lt;p&gt;So you can check the types I've come up with in the project repository, I also added some custom unmarshalling for the URLs.&lt;/p&gt;

&lt;p&gt;Here I will just leave the &lt;code&gt;devto.Article&lt;/code&gt; type, which is the main dev.to type.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="c"&gt;// Article contains all the information related to a single&lt;/span&gt;
&lt;span class="c"&gt;// information resource from devto.&lt;/span&gt;
&lt;span class="k"&gt;type&lt;/span&gt; &lt;span class="n"&gt;Article&lt;/span&gt; &lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;TypeOf&lt;/span&gt;                 &lt;span class="kt"&gt;string&lt;/span&gt;       &lt;span class="s"&gt;`json:"type_of,omitempty"`&lt;/span&gt;
    &lt;span class="n"&gt;ID&lt;/span&gt;                     &lt;span class="kt"&gt;uint32&lt;/span&gt;       &lt;span class="s"&gt;`json:"id,omitempty"`&lt;/span&gt;
    &lt;span class="n"&gt;Title&lt;/span&gt;                  &lt;span class="kt"&gt;string&lt;/span&gt;       &lt;span class="s"&gt;`json:"title,omitempty"`&lt;/span&gt;
    &lt;span class="n"&gt;Description&lt;/span&gt;            &lt;span class="kt"&gt;string&lt;/span&gt;       &lt;span class="s"&gt;`json:"description,omitempty"`&lt;/span&gt;
    &lt;span class="n"&gt;CoverImage&lt;/span&gt;             &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;WebURL&lt;/span&gt;      &lt;span class="s"&gt;`json:"cover_image,omitempty"`&lt;/span&gt;
    &lt;span class="n"&gt;SocialImage&lt;/span&gt;            &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;WebURL&lt;/span&gt;      &lt;span class="s"&gt;`json:"social_image,omitempty"`&lt;/span&gt;
    &lt;span class="n"&gt;PublishedAt&lt;/span&gt;            &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Time&lt;/span&gt;   &lt;span class="s"&gt;`json:"published_at,omitempty"`&lt;/span&gt;
    &lt;span class="n"&gt;EditedAt&lt;/span&gt;               &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Time&lt;/span&gt;   &lt;span class="s"&gt;`json:"edited_at,omitempty"`&lt;/span&gt;
    &lt;span class="n"&gt;CrossPostedAt&lt;/span&gt;          &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Time&lt;/span&gt;   &lt;span class="s"&gt;`json:"crossposted_at,omitempty"`&lt;/span&gt;
    &lt;span class="n"&gt;LastCommentAt&lt;/span&gt;          &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Time&lt;/span&gt;   &lt;span class="s"&gt;`json:"last_comment_at,omitempty"`&lt;/span&gt;
    &lt;span class="n"&gt;TagList&lt;/span&gt;                &lt;span class="n"&gt;Tags&lt;/span&gt;         &lt;span class="s"&gt;`json:"tag_list,omitempty"`&lt;/span&gt;
    &lt;span class="n"&gt;Tags&lt;/span&gt;                   &lt;span class="kt"&gt;string&lt;/span&gt;       &lt;span class="s"&gt;`json:"tags,omitempty"`&lt;/span&gt;
    &lt;span class="n"&gt;Slug&lt;/span&gt;                   &lt;span class="kt"&gt;string&lt;/span&gt;       &lt;span class="s"&gt;`json:"slug,omitempty"`&lt;/span&gt;
    &lt;span class="n"&gt;Path&lt;/span&gt;                   &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;WebURL&lt;/span&gt;      &lt;span class="s"&gt;`json:"path,omitempty"`&lt;/span&gt;
    &lt;span class="n"&gt;URL&lt;/span&gt;                    &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;WebURL&lt;/span&gt;      &lt;span class="s"&gt;`json:"url,omitempty"`&lt;/span&gt;
    &lt;span class="n"&gt;CanonicalURL&lt;/span&gt;           &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;WebURL&lt;/span&gt;      &lt;span class="s"&gt;`json:"canonical_url,omitempty"`&lt;/span&gt;
    &lt;span class="n"&gt;CommentsCount&lt;/span&gt;          &lt;span class="kt"&gt;uint&lt;/span&gt;         &lt;span class="s"&gt;`json:"comments_count,omitempty"`&lt;/span&gt;
    &lt;span class="n"&gt;PositiveReactionsCount&lt;/span&gt; &lt;span class="kt"&gt;uint&lt;/span&gt;         &lt;span class="s"&gt;`json:"positive_reactions_count,omitempty"`&lt;/span&gt;
    &lt;span class="n"&gt;PublishedTimestamp&lt;/span&gt;     &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Time&lt;/span&gt;   &lt;span class="s"&gt;`json:"published_timestamp,omitempty"`&lt;/span&gt;
    &lt;span class="n"&gt;User&lt;/span&gt;                   &lt;span class="n"&gt;User&lt;/span&gt;         &lt;span class="s"&gt;`json:"user,omitempty"`&lt;/span&gt;
    &lt;span class="n"&gt;Organization&lt;/span&gt;           &lt;span class="n"&gt;Organization&lt;/span&gt; &lt;span class="s"&gt;`json:"organization,omitempty"`&lt;/span&gt;
    &lt;span class="n"&gt;BodyHTML&lt;/span&gt;               &lt;span class="kt"&gt;string&lt;/span&gt;       &lt;span class="s"&gt;`json:"body_html,omitempty"`&lt;/span&gt;
    &lt;span class="n"&gt;BodyMarkdown&lt;/span&gt;           &lt;span class="kt"&gt;string&lt;/span&gt;       &lt;span class="s"&gt;`json:"body_markdown,omitempty"`&lt;/span&gt;
    &lt;span class="n"&gt;Published&lt;/span&gt;              &lt;span class="kt"&gt;bool&lt;/span&gt;         &lt;span class="s"&gt;`json:"published,omitempty"`&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Take a look raise your questions and contribute if you feel like something is not right.&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--A9-wwsHG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/VictorAvelar"&gt;
        VictorAvelar
      &lt;/a&gt; / &lt;a href="https://github.com/VictorAvelar/devto-api-go"&gt;
        devto-api-go
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      A go client for the dev.to API
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;h1 id="user-content-devto-api-go"&gt;&lt;a class="heading-link" href="https://github.com/VictorAvelar/devto-api-go#devto-api-go"&gt;devto-api-go&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;A go client for the dev.to API&lt;/p&gt;
&lt;p&gt;&lt;a href="https://opensource.org/licenses/MIT" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/fd551ba4b042d89480347a0e74e31af63b356b2cac1116c7b80038f41b04a581/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d4d49542d677265656e2e737667" alt="License: MIT"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4 id="user-content-travis-ci"&gt;&lt;a class="heading-link" href="https://github.com/VictorAvelar/devto-api-go#travis-ci"&gt;Travis CI&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;&lt;a href="https://travis-ci.org/VictorAvelar/devto-api-go" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/572cf1b9c6da49cf8ed8a9e66888988f490c8d6dc9e7f677803a8d5fd92c4e58/68747470733a2f2f7472617669732d63692e6f72672f566963746f724176656c61722f646576746f2d6170692d676f2e7376673f6272616e63683d6d6173746572" alt="Build Status"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4 id="user-content-scrutinizer"&gt;&lt;a class="heading-link" href="https://github.com/VictorAvelar/devto-api-go#scrutinizer"&gt;Scrutinizer&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;&lt;a href="https://scrutinizer-ci.com/g/VictorAvelar/devto-api-go/build-status/master" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/b37b8138d1f787ae4fe02d7ad445b365ab6d120911604cd044264d104a05a1fa/68747470733a2f2f7363727574696e697a65722d63692e636f6d2f672f566963746f724176656c61722f646576746f2d6170692d676f2f6261646765732f6275696c642e706e673f623d6d6173746572" alt="Scrutinizer Build Status"&gt;&lt;/a&gt;
&lt;a href="https://scrutinizer-ci.com/g/VictorAvelar/devto-api-go/?branch=master" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/58dfc453d62b808239a61e0180f2332a7d17485110d82f53bdbac88a2d744859/68747470733a2f2f7363727574696e697a65722d63692e636f6d2f672f566963746f724176656c61722f646576746f2d6170692d676f2f6261646765732f7175616c6974792d73636f72652e706e673f623d6d6173746572" alt="Scrutinizer Code Quality"&gt;&lt;/a&gt;
&lt;a href="https://scrutinizer-ci.com/g/VictorAvelar/devto-api-go/?branch=master" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/efac6064096481c1440c49225b7fc00850810c30101ce14defe391e6f2db56e9/68747470733a2f2f7363727574696e697a65722d63692e636f6d2f672f566963746f724176656c61722f646576746f2d6170692d676f2f6261646765732f636f7665726167652e706e673f623d6d6173746572" alt="Code Coverage"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4 id="user-content-go-ecosystem"&gt;&lt;a class="heading-link" href="https://github.com/VictorAvelar/devto-api-go#go-ecosystem"&gt;Go ecosystem&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;&lt;a href="https://goreportcard.com/report/github.com/VictorAvelar/devto-api-go" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/7335fbe5b41670b1ec3cbbfbc639752556b7734ab3244b0a94b9c9a0566ef270/68747470733a2f2f676f7265706f7274636172642e636f6d2f62616467652f6769746875622e636f6d2f566963746f724176656c61722f646576746f2d6170692d676f" alt="Go Report Card"&gt;&lt;/a&gt;
&lt;a href="https://godoc.org/github.com/VictorAvelar/devto-api-go" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/744965f2837e867fa711c19b04e7c39db3844dfec1dde529f7d6f4f5af44d302/68747470733a2f2f676f646f632e6f72672f6769746875622e636f6d2f566963746f724176656c61722f646576746f2d6170692d676f3f7374617475732e737667" alt="GoDoc"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="user-content-roadmap"&gt;&lt;a class="heading-link" href="https://github.com/VictorAvelar/devto-api-go#roadmap"&gt;Roadmap&lt;/a&gt;&lt;/h2&gt;
&lt;ul class="contains-task-list"&gt;
&lt;li class="task-list-item"&gt;
 Base client and configuration&lt;/li&gt;
&lt;li class="task-list-item"&gt;
 Articles resource&lt;/li&gt;
&lt;li class="task-list-item"&gt;
 CLI utility&lt;/li&gt;
&lt;li class="task-list-item"&gt;
 Authentication resource&lt;/li&gt;
&lt;li class="task-list-item"&gt;
 Extend the tests suite&lt;/li&gt;
&lt;li class="task-list-item"&gt;
 Provide code examples&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="user-content-disclaimer"&gt;&lt;a class="heading-link" href="https://github.com/VictorAvelar/devto-api-go#disclaimer"&gt;Disclaimer&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;This library is not an official dev.to API library, but a friendly contribution to the dev.to community&lt;/p&gt;
&lt;/div&gt;

  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/VictorAvelar/devto-api-go"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;



</description>
      <category>go</category>
      <category>showdev</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Episode 3 - The configuration struct</title>
      <dc:creator>Victor Avelar</dc:creator>
      <pubDate>Fri, 06 Sep 2019 11:48:53 +0000</pubDate>
      <link>https://forem.com/victoravelar/episode-3-the-configuration-struct-5001</link>
      <guid>https://forem.com/victoravelar/episode-3-the-configuration-struct-5001</guid>
      <description>&lt;h3&gt;
  
  
  Before you read
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;Thanks for spending some minutes reading this, I just want to let you know that from time to time, my ideas are like spaghetti, so if something is not 100% clear, please ask and I will be super happy to answer, probably we will both end with something new to spread around.&lt;br&gt;
😄&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Whenever you create a library in any programming language planning how your configuration objects is going to be implemented is super important, as in my opinion it heavily influences the way the code will look and behave.&lt;/p&gt;

&lt;p&gt;So for our lovely API client, we are going to have a Config struct, in which we are going to pass the values that are:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Filled from environment variables or secrets.&lt;/li&gt;
&lt;li&gt;Variables that affect overall the code behaviour&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The first one is pretty much self-explanatory, you don't want to fetch your secrets from &lt;a href="https://www.hashicorp.com/products/vault"&gt;Vault&lt;/a&gt; (and not this is not sponsored, it just happens to be the one I am familiar with), or require the &lt;code&gt;os&lt;/code&gt; package everywhere just to be able to call &lt;code&gt;Getenv&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;For our use case we have then the following configuration struct&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="k"&gt;type&lt;/span&gt; &lt;span class="n"&gt;Config&lt;/span&gt; &lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;APIKey&lt;/span&gt;       &lt;span class="kt"&gt;string&lt;/span&gt;
    &lt;span class="n"&gt;InsecureOnly&lt;/span&gt; &lt;span class="kt"&gt;bool&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;As you can see it is convenient that we have one property for each of the scenarios described before, &lt;code&gt;APIKey&lt;/code&gt; will be probably filled from a "secure" source that is not visible from your version control system for example, unless you want everyone being able to play around with your dev.to articles.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;InsecureOnly&lt;/code&gt; is something that will affect how the API client will behave when performing requests to the API.&lt;/p&gt;

&lt;h2&gt;
  
  
  The constructor
&lt;/h2&gt;

&lt;p&gt;Constructors in go as we are about to see, allows you to control how your client will be build, it is possible that the user will instantiate the struct directly, but as we want to be helpful as possible, we will also provide a friendly way to build a &lt;code&gt;usable&lt;/code&gt; Config object.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="n"&gt;NewConfig&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt; &lt;span class="kt"&gt;bool&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;k&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;Config&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="kt"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="no"&gt;true&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;k&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s"&gt;""&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="no"&gt;nil&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ErrMissingRequiredParameter&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;Config&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;InsecureOnly&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;APIKey&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;       &lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="no"&gt;nil&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Our Config constructor takes a boolean (p) and a string (k), where p represents whether we will use protected endpoints or not, and k is our API key, now once we provide this values the constructor will check and react according to our input.&lt;/p&gt;

&lt;p&gt;This check will save us some time, and also will save the dev.to API some unnecessary requests, if we say we want to access protected endpoints but we provide no key, then is obvious that when we perform the request the API is going to give us a lovely &lt;code&gt;http.StatusUnauthorized&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Now if p is false we don't care about the key as for public endpoints a key is not required.&lt;/p&gt;

&lt;p&gt;Now, be careful as p is something I like to call a user-friendly variable, this means you are asking the user for something that they can understand: Are you going to access protected endpoints?, easily than: Do you need the client to be insecure only?.&lt;/p&gt;

&lt;p&gt;The second one may lead some people to crazy security assumptions, I will probably bet someone could even make a relation with HTTP/HTTPS, so in order to be as clear as possible, we will ask the user-friendly question and then take the opposite value that satisfies our configuration requirements.&lt;/p&gt;

&lt;p&gt;And here is an example of how we will use it&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="k"&gt;package&lt;/span&gt; &lt;span class="n"&gt;main&lt;/span&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="s"&gt;"fmt"&lt;/span&gt;
    &lt;span class="s"&gt;"log"&lt;/span&gt;
    &lt;span class="s"&gt;"os"&lt;/span&gt;

    &lt;span class="s"&gt;"github.com/VictorAvelar/devto-api-go/devto"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;k&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt;
    &lt;span class="n"&gt;p&lt;/span&gt; &lt;span class="kt"&gt;bool&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;k&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Getenv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"DEVTO_API_KEY"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c"&gt;// if not set you will get an empty string&lt;/span&gt;
    &lt;span class="n"&gt;p&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;true&lt;/span&gt;
    &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;devto&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;NewConfig&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="no"&gt;nil&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;log&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Fatal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="n"&gt;fmt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"%+v"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;See it in action at the &lt;a href="https://play.golang.org/p/eF2zb0rxS1V"&gt;Go playground&lt;/a&gt;&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>go</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>A DEV.to API client is born</title>
      <dc:creator>Victor Avelar</dc:creator>
      <pubDate>Tue, 03 Sep 2019 11:07:53 +0000</pubDate>
      <link>https://forem.com/victoravelar/a-dev-to-api-client-is-born-29pj</link>
      <guid>https://forem.com/victoravelar/a-dev-to-api-client-is-born-29pj</guid>
      <description>&lt;h1&gt;
  
  
  Episode 2 - Project foundation
&lt;/h1&gt;

&lt;p&gt;So let's get going, be sure to have golang installed in your computer, if like me you're using macOS and Homebrew then you just need to execute the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;brew &lt;span class="nb"&gt;install &lt;/span&gt;go
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  The API client
&lt;/h2&gt;

&lt;p&gt;The module we are going to create will showcase the top 10 links to avoid a huge display block.&lt;/p&gt;

&lt;p&gt;For this, we will need to access the information from &lt;a href="https://docs.dev.to/api"&gt;devto API&lt;/a&gt; and for this, we need code to programmatically access this information and be able to use it.&lt;/p&gt;

&lt;p&gt;So let's start&lt;/p&gt;

&lt;h2&gt;
  
  
  The project directory
&lt;/h2&gt;

&lt;p&gt;Open a terminal window and navigate to the place where you store your go code, thanks to the implementation of go modules it doesn't need to be the &lt;code&gt;src&lt;/code&gt; folder inside the $GOPATH so I will navigate to &lt;code&gt;~/Code&lt;/code&gt; on my terminal.&lt;/p&gt;

&lt;p&gt;We are going to create the directory in which our module is going to live and then we will go inside the recently created folder, you can accomplish this by executing the following&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;mkdir &lt;/span&gt;devto-api-go &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;cd &lt;/span&gt;devto-api-go
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Initializing Go modules support
&lt;/h2&gt;

&lt;p&gt;To initialize a Go module you need to execute the &lt;code&gt;init&lt;/code&gt; command of the go mod tool, so let's do it, first I will put the "template" and then the actual execution, I like to do this because that is how my brain stores information, so sorry if it's confusing.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;⚠️ This is important ⚠️ as you learn go you will &lt;br&gt;
understand that some of the go tooling for using third party code &lt;br&gt;
relies on git features.&lt;/p&gt;

&lt;p&gt;So when initializing a module you should use the path to your &lt;br&gt;
repository in the form of &lt;code&gt;{provider}/{username}/{repository}&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I like to think of it as a mock for the folder structure I would have created if using the $GOPATH.&lt;/p&gt;

&lt;p&gt;So from now on, I will use &lt;code&gt;path-to-your-repo&lt;/code&gt; to alias the composition described in my previous quote.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Template for initializing a new go module once you're inside the &lt;/span&gt;
&lt;span class="c"&gt;# project directory&lt;/span&gt;
go mod init &lt;span class="o"&gt;{&lt;/span&gt;path-to-your-repo&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Which for our project will be&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Template for initializing a new go module once you're inside the &lt;/span&gt;
&lt;span class="c"&gt;# project directory&lt;/span&gt;
go mod init github.com/VictorAvelar/devto-api-go
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Please don't be surprised if nothing comes back, you will also get used to the fact that in go, no news are amazing news 😂&lt;/p&gt;

&lt;h2&gt;
  
  
  The final touch
&lt;/h2&gt;

&lt;p&gt;Once our module is ready, you can create a folder called &lt;code&gt;devto&lt;/code&gt;, there is no reason for this, it is a thing I picked, but I cannot remember how 🤔, but it will be useful in the future, I can promise that.&lt;/p&gt;

&lt;p&gt;Finally this is how your &lt;code&gt;go.mod&lt;/code&gt; file should look like&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="n"&gt;module&lt;/span&gt; &lt;span class="n"&gt;github&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;com&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;VictorAvelar&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;devto&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;api&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="k"&gt;go&lt;/span&gt;

&lt;span class="k"&gt;go&lt;/span&gt; &lt;span class="m"&gt;1.12&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>go</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Building a WTF util from 0 to hero</title>
      <dc:creator>Victor Avelar</dc:creator>
      <pubDate>Sat, 31 Aug 2019 10:34:49 +0000</pubDate>
      <link>https://forem.com/victoravelar/building-a-wtf-util-from-0-to-hero-4fda</link>
      <guid>https://forem.com/victoravelar/building-a-wtf-util-from-0-to-hero-4fda</guid>
      <description>&lt;p&gt;Photo by Caspar Camille Rubin on &lt;a href="https://unsplash.com/photos/fPkvU7RDmCo"&gt;Unsplash&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Episode 1 - Why the fuck (INTRO)
&lt;/h1&gt;

&lt;p&gt;Not so long ago I discovered &lt;a href="http://wtfutil.com"&gt;wtfutil&lt;/a&gt; an amazing developer oriented tool to monitor, check and browse a lot of stuff, it operates with modules and there is a module that I always find very useful called news.&lt;/p&gt;

&lt;p&gt;This modules allows you to see a list of the latest &lt;a href="https://news.ycombinator.com/"&gt;HackerNews&lt;/a&gt; articles and if you decide it is interesting enough, you can click on it and it will open the related article on your default browser, which for me is amazing because anyway I'm checking the website every day.&lt;/p&gt;

&lt;p&gt;It is basically this daily routine what got me thinking, which other websites I'm checking often to be up to date with news around the tech world, here is where I had an Eureka moment and though &lt;strong&gt;well if this thing is not out yet, lets create it.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The approach
&lt;/h2&gt;

&lt;p&gt;First of all I love to share the few things I know, even if its not the best way of doing it I'll share it, and then when someone says hey this can be also done this way, I learn something new, and this is a golden cycle you should try, so for me this will be like a tutorial series on how to approach this from the initial project directory, till having the tool ready to be used by the wtfutil users.&lt;/p&gt;

&lt;p&gt;So stay tuned.&lt;/p&gt;

&lt;p&gt;Cheers 🍺&lt;/p&gt;

&lt;h3&gt;
  
  
  Resources
&lt;/h3&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--A9-wwsHG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/wtfutil"&gt;
        wtfutil
      &lt;/a&gt; / &lt;a href="https://github.com/wtfutil/wtf"&gt;
        wtf
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      The personal information dashboard for your terminal
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;p&gt;
    &lt;a rel="noopener noreferrer" href="https://github.com/wtfutil/wtf./images/logo_transparent.png?raw=true"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--NKk54Mz0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/wtfutil/wtf./images/logo_transparent.png%3Fraw%3Dtrue" title="WTF" alt="WTF" width="560" height="560"&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
    &lt;a href="https://goreportcard.com/report/github.com/wtfutil/wtf" rel="nofollow"&gt;&lt;img alt="Go Report Card" src="https://camo.githubusercontent.com/4dc454c78c743eb256787d4aed71b3352a4cfab3cdfacebf69f4abff0b78c6c6/68747470733a2f2f676f7265706f7274636172642e636f6d2f62616467652f6769746875622e636f6d2f7774667574696c2f777466"&gt;&lt;/a&gt;
    &lt;a href="https://twitter.com/wtfutil" rel="nofollow"&gt;&lt;img alt="Twitter" src="https://camo.githubusercontent.com/4a8bf7b05deeb762e6b516076d689bb5e75487261e5b17edfe9bc8028ac7d5bf/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f666f6c6c6f772d6f6e253230747769747465722d626c75652e737667"&gt;&lt;/a&gt;
    &lt;a href="https://deepsource.io/gh/wtfutil/wtf/?ref=repository-badge}" rel="nofollow"&gt;&lt;img alt="DeepSource" title="DeepSource" src="https://camo.githubusercontent.com/e4086385a198f8f4058c49f9587e41bf736216799814d8681566664f8d972cda/68747470733a2f2f64656570736f757263652e696f2f67682f7774667574696c2f7774662e7376672f3f6c6162656c3d6163746976652b6973737565732673686f775f7472656e643d7472756526746f6b656e3d6b534a4162454c46325441377245486a4b36525055726a35"&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;WTF (aka 'wtfutil') is the personal information dashboard for your terminal, providing at-a-glance access to your very important but infrequently-needed stats and data.&lt;/p&gt;

&lt;p&gt;Used by thousands of developers and tech people around the world, WTF is free and open-source. To support the continued use and development of WTF, please consider sponsoring WTF via &lt;a href="https://github.com/sponsors/senorprogrammer"&gt;GitHub Sponsors&lt;/a&gt;.&lt;/p&gt;

&lt;h3 id="user-content-are-you-a-contributor-or-sponsor"&gt;&lt;a class="heading-link" href="https://github.com/wtfutil/wtf#are-you-a-contributor-or-sponsor"&gt;Are you a contributor or sponsor?&lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;Awesome! &lt;a href="https://wtfutil.com/sponsors/exit_message/" rel="nofollow"&gt;See here&lt;/a&gt; for how you can change the exit message, the message WTF shows when quitting, to something special just for you.&lt;/p&gt;

&lt;h2 id="user-content-sponsored-by"&gt;&lt;a class="heading-link" href="https://github.com/wtfutil/wtf#sponsored-by"&gt;Sponsored by&lt;/a&gt;&lt;/h2&gt;


&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
    &lt;tbody&gt;
&lt;tr&gt;
      &lt;td&gt;
        &lt;strong&gt;Robusta.dev&lt;/strong&gt;
        &lt;br&gt;
        &lt;a href="https://home.robusta.dev/?utm_source=wtfutil&amp;amp;utm_medium=oss-sponsorship&amp;amp;utm_id=wtfutil-sponsorship" rel="nofollow"&gt;
              &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--LgBcX5uD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/wtfutil/wtf./images/sponsors/robusta.png%3Fraw%3Dtrue" height="60" title="Robusta.dev" alt="Robusta.dev"&gt;
          &lt;/a&gt;
      &lt;/td&gt;
      &lt;td&gt;
        &lt;strong&gt;Airbrake&lt;/strong&gt;
        &lt;br&gt;
          &lt;a href="https://airbrake.io/?utm_medium=sponsor&amp;amp;utm_source=WTFutill&amp;amp;utm_content=airbrake-home-page&amp;amp;utm_campaign=2021-sponsorships" rel="nofollow"&gt;
              &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--8OziuYTu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/wtfutil/wtf./images/sponsors/airbrake.png%3Fraw%3Dtrue" height="60" title="Airbrake" alt="Airbrake"&gt;
          &lt;/a&gt;
      &lt;/td&gt;
      &lt;td&gt;
        &lt;strong&gt;Warp.dev&lt;/strong&gt;
        &lt;br&gt;
        &lt;a href="https://www.warp.dev/?utm_source=github&amp;amp;utm_medium=referral&amp;amp;utm_campaign=wtf_20230929%20" rel="nofollow"&gt;
          &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--3zr5OsGW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/wtfutil/wtf./images/sponsors/warp.png%3Fraw%3Dtrue" height="60" width="176" title="Warp" alt="Warp"&gt;
        &lt;/a&gt;
      &lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/wtfutil/wtf#installation"&gt;Installation&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/wtfutil/wtf#installing-via-homebrew"&gt;Installing via Homebrew&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/wtfutil/wtf#installing-via-macports"&gt;Installing via MacPorts&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/wtfutil/wtf#installing-a-binary"&gt;Installing a Binary&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/wtfutil/wtf#installing-from-source"&gt;Installing from Source&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/wtfutil/wtf#running-via-docker"&gt;Running via Docker&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/wtfutil/wtf#communication"&gt;Communication&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/wtfutil/wtf#github-discussions"&gt;GitHub Discussions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/wtfutil/wtf#twitter"&gt;Twitter&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/wtfutil/wtf#documentation"&gt;Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/wtfutil/wtf#modules"&gt;Modules&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/wtfutil/wtf#getting-bugs-fixed-or-features-added"&gt;Getting Bugs Fixed or Features Added&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/wtfutil/wtf#contributing-to-the-source-code"&gt;Contributing to the Source Code&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/wtfutil/wtf#adding-dependencies"&gt;Adding Dependencies&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/wtfutil/wtf#contributing-to-the-documentation"&gt;Contributing to the Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/wtfutil/wtf#contributors"&gt;Contributors&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/wtfutil/wtf#acknowledgments"&gt;Acknowledgements&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;a rel="noopener noreferrer" href="https://github.com/wtfutil/wtf./images/screenshot.jpg"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--sB75wH-T--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/wtfutil/wtf./images/screenshot.jpg" title="screenshot" width="720" height="420"&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;h2 id="user-content-installation"&gt;&lt;a class="heading-link" href="https://github.com/wtfutil/wtf#installation"&gt;Installation&lt;/a&gt;&lt;/h2&gt;

&lt;h3 id="user-content-installing-via-homebrew"&gt;&lt;a class="heading-link" href="https://github.com/wtfutil/wtf#installing-via-homebrew"&gt;Installing via Homebrew&lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;The simplest way from Homebrew:&lt;/p&gt;

&lt;div class="highlight highlight-text-shell-session notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;&lt;span class="pl-c1"&gt;brew install wtfutil&lt;/span&gt;

&lt;span class="pl-c1"&gt;wtfutil&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;That version can sometimes lag a…&lt;/p&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/wtfutil/wtf"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;




&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--A9-wwsHG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/VictorAvelar"&gt;
        VictorAvelar
      &lt;/a&gt; / &lt;a href="https://github.com/VictorAvelar/devto-api-go"&gt;
        devto-api-go
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      A go client for the dev.to API
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;h1 id="user-content-devto-api-go"&gt;&lt;a class="heading-link" href="https://github.com/VictorAvelar/devto-api-go#devto-api-go"&gt;devto-api-go&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;A go client for the dev.to API&lt;/p&gt;
&lt;p&gt;&lt;a href="https://opensource.org/licenses/MIT" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/fd551ba4b042d89480347a0e74e31af63b356b2cac1116c7b80038f41b04a581/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d4d49542d677265656e2e737667" alt="License: MIT"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4 id="user-content-travis-ci"&gt;&lt;a class="heading-link" href="https://github.com/VictorAvelar/devto-api-go#travis-ci"&gt;Travis CI&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;&lt;a href="https://travis-ci.org/VictorAvelar/devto-api-go" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/572cf1b9c6da49cf8ed8a9e66888988f490c8d6dc9e7f677803a8d5fd92c4e58/68747470733a2f2f7472617669732d63692e6f72672f566963746f724176656c61722f646576746f2d6170692d676f2e7376673f6272616e63683d6d6173746572" alt="Build Status"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4 id="user-content-scrutinizer"&gt;&lt;a class="heading-link" href="https://github.com/VictorAvelar/devto-api-go#scrutinizer"&gt;Scrutinizer&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;&lt;a href="https://scrutinizer-ci.com/g/VictorAvelar/devto-api-go/build-status/master" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/b37b8138d1f787ae4fe02d7ad445b365ab6d120911604cd044264d104a05a1fa/68747470733a2f2f7363727574696e697a65722d63692e636f6d2f672f566963746f724176656c61722f646576746f2d6170692d676f2f6261646765732f6275696c642e706e673f623d6d6173746572" alt="Scrutinizer Build Status"&gt;&lt;/a&gt;
&lt;a href="https://scrutinizer-ci.com/g/VictorAvelar/devto-api-go/?branch=master" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/58dfc453d62b808239a61e0180f2332a7d17485110d82f53bdbac88a2d744859/68747470733a2f2f7363727574696e697a65722d63692e636f6d2f672f566963746f724176656c61722f646576746f2d6170692d676f2f6261646765732f7175616c6974792d73636f72652e706e673f623d6d6173746572" alt="Scrutinizer Code Quality"&gt;&lt;/a&gt;
&lt;a href="https://scrutinizer-ci.com/g/VictorAvelar/devto-api-go/?branch=master" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/efac6064096481c1440c49225b7fc00850810c30101ce14defe391e6f2db56e9/68747470733a2f2f7363727574696e697a65722d63692e636f6d2f672f566963746f724176656c61722f646576746f2d6170692d676f2f6261646765732f636f7665726167652e706e673f623d6d6173746572" alt="Code Coverage"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4 id="user-content-go-ecosystem"&gt;&lt;a class="heading-link" href="https://github.com/VictorAvelar/devto-api-go#go-ecosystem"&gt;Go ecosystem&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;&lt;a href="https://goreportcard.com/report/github.com/VictorAvelar/devto-api-go" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/7335fbe5b41670b1ec3cbbfbc639752556b7734ab3244b0a94b9c9a0566ef270/68747470733a2f2f676f7265706f7274636172642e636f6d2f62616467652f6769746875622e636f6d2f566963746f724176656c61722f646576746f2d6170692d676f" alt="Go Report Card"&gt;&lt;/a&gt;
&lt;a href="https://godoc.org/github.com/VictorAvelar/devto-api-go" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/744965f2837e867fa711c19b04e7c39db3844dfec1dde529f7d6f4f5af44d302/68747470733a2f2f676f646f632e6f72672f6769746875622e636f6d2f566963746f724176656c61722f646576746f2d6170692d676f3f7374617475732e737667" alt="GoDoc"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="user-content-roadmap"&gt;&lt;a class="heading-link" href="https://github.com/VictorAvelar/devto-api-go#roadmap"&gt;Roadmap&lt;/a&gt;&lt;/h2&gt;
&lt;ul class="contains-task-list"&gt;
&lt;li class="task-list-item"&gt;
 Base client and configuration&lt;/li&gt;
&lt;li class="task-list-item"&gt;
 Articles resource&lt;/li&gt;
&lt;li class="task-list-item"&gt;
 CLI utility&lt;/li&gt;
&lt;li class="task-list-item"&gt;
 Authentication resource&lt;/li&gt;
&lt;li class="task-list-item"&gt;
 Extend the tests suite&lt;/li&gt;
&lt;li class="task-list-item"&gt;
 Provide code examples&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="user-content-disclaimer"&gt;&lt;a class="heading-link" href="https://github.com/VictorAvelar/devto-api-go#disclaimer"&gt;Disclaimer&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;This library is not an official dev.to API library, but a friendly contribution to the dev.to community&lt;/p&gt;
&lt;/div&gt;



&lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/VictorAvelar/devto-api-go"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


</description>
      <category>go</category>
      <category>tutorial</category>
      <category>showdev</category>
    </item>
  </channel>
</rss>
