<?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>DEV Community: Keepchen</title>
    <description>The latest articles on DEV Community by Keepchen (@keepchen).</description>
    <link>https://dev.to/keepchen</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%2F3246858%2F1ea92ef1-19e4-41f5-8b9e-5ea7478b2a30.png</url>
      <title>DEV Community: Keepchen</title>
      <link>https://dev.to/keepchen</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/keepchen"/>
    <language>en</language>
    <item>
      <title>Go-Sail has released version v3.0.6</title>
      <dc:creator>Keepchen</dc:creator>
      <pubDate>Fri, 05 Sep 2025 07:59:17 +0000</pubDate>
      <link>https://dev.to/keepchen/go-sail-has-released-version-v306-3dk1</link>
      <guid>https://dev.to/keepchen/go-sail-has-released-version-v306-3dk1</guid>
      <description>&lt;p&gt;I've been working on a series of optimizations for go-sail lately. Today, we've officially released version 3.0.6. Everyone is welcome to try it out.  &lt;/p&gt;

&lt;h2&gt;
  
  
  The changes in this version are as follows:
&lt;/h2&gt;

&lt;h4&gt;
  
  
  🚀 Features
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;utils: Simplified and optimized redis lock code, support custom redis client   (&lt;a href="https://github.com/keepchen/go-sail/commit/0166990" rel="noopener noreferrer"&gt;&lt;code&gt;0166990&lt;/code&gt;&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;schedule: Support custom redis client   (&lt;a href="https://github.com/keepchen/go-sail/commit/0166990" rel="noopener noreferrer"&gt;&lt;code&gt;0166990&lt;/code&gt;&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;http: Adjusted timestamp field, fixed paginator JSON tag   (&lt;a href="https://github.com/keepchen/go-sail/commit/0166990" rel="noopener noreferrer"&gt;&lt;code&gt;0166990&lt;/code&gt;&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;other: Updated README (&lt;a href="https://github.com/keepchen/go-sail/commit/0166990" rel="noopener noreferrer"&gt;&lt;code&gt;0166990&lt;/code&gt;&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;schedule: Added crontab expression; utils: HTTP requests no longer check status code (&lt;a href="https://github.com/keepchen/go-sail/commit/9be8d24" rel="noopener noreferrer"&gt;&lt;code&gt;9be8d24&lt;/code&gt;&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;lib: Added &lt;code&gt;NowFunc&lt;/code&gt; in db component (&lt;a href="https://github.com/keepchen/go-sail/commit/d7b1f79" rel="noopener noreferrer"&gt;&lt;code&gt;d7b1f79&lt;/code&gt;&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;middleware: Added real client IP method (&lt;a href="https://github.com/keepchen/go-sail/commit/edb4b3a" rel="noopener noreferrer"&gt;&lt;code&gt;edb4b3a&lt;/code&gt;&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;lib: Added valkey component (&lt;a href="https://github.com/keepchen/go-sail/commit/c9a53b7" rel="noopener noreferrer"&gt;&lt;code&gt;c9a53b7&lt;/code&gt;&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;lib: nacos: Added service subscription, replaced old utils calls (&lt;a href="https://github.com/keepchen/go-sail/commit/8f8e793" rel="noopener noreferrer"&gt;&lt;code&gt;8f8e793&lt;/code&gt;&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;lib: nacos: Added &lt;code&gt;NewConfigClient&lt;/code&gt; and &lt;code&gt;NewNamingClient&lt;/code&gt; methods (&lt;a href="https://github.com/keepchen/go-sail/commit/30b6307b" rel="noopener noreferrer"&gt;&lt;code&gt;30b6307b&lt;/code&gt;&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;sail: Added &lt;code&gt;Config&lt;/code&gt; to read configuration (&lt;a href="https://github.com/keepchen/go-sail/commit/c70b1c7e" rel="noopener noreferrer"&gt;&lt;code&gt;c70b1c7e&lt;/code&gt;&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;sail: jwt: Added &lt;code&gt;Encrypt&lt;/code&gt; and &lt;code&gt;Decrypt&lt;/code&gt; methods (&lt;a href="https://github.com/keepchen/go-sail/commit/737b694c" rel="noopener noreferrer"&gt;&lt;code&gt;737b694c&lt;/code&gt;&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;sail: Added &lt;code&gt;RedisLocker&lt;/code&gt; method (&lt;a href="https://github.com/keepchen/go-sail/commit/31c55834" rel="noopener noreferrer"&gt;&lt;code&gt;31c55834&lt;/code&gt;&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;sail: Added &lt;code&gt;setter&lt;/code&gt; to manage redis client for redis locker and schedule (&lt;a href="https://github.com/keepchen/go-sail/commit/b20009a1" rel="noopener noreferrer"&gt;&lt;code&gt;b20009a1&lt;/code&gt;&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  🐛 Fixes
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;schedule: Fixed &lt;code&gt;Call&lt;/code&gt; and &lt;code&gt;MustCall&lt;/code&gt; nil pointer issue (&lt;a href="https://github.com/keepchen/go-sail/commit/ebd4ea9" rel="noopener noreferrer"&gt;&lt;code&gt;ebd4ea9&lt;/code&gt;&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;api: Fixed &lt;code&gt;mergeBody&lt;/code&gt; handling for &lt;code&gt;(*T)(nil)&lt;/code&gt; (&lt;a href="https://github.com/keepchen/go-sail/commit/817b93f" rel="noopener noreferrer"&gt;&lt;code&gt;817b93f&lt;/code&gt;&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;api: Fixed &lt;code&gt;SendWithCode&lt;/code&gt; nil pointer when calling &lt;code&gt;funcBeforeWrite&lt;/code&gt; (&lt;a href="https://github.com/keepchen/go-sail/commit/f41fa8f" rel="noopener noreferrer"&gt;&lt;code&gt;f41fa8f&lt;/code&gt;&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  🔧 Changes / Improvements
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;middleware: Upgraded gopsutil to v4 (&lt;a href="https://github.com/keepchen/go-sail/commit/6584811" rel="noopener noreferrer"&gt;&lt;code&gt;6584811&lt;/code&gt;&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;lib: Modified jwt error messages (&lt;a href="https://github.com/keepchen/go-sail/commit/3b396e4" rel="noopener noreferrer"&gt;&lt;code&gt;3b396e4&lt;/code&gt;&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;sail: Adjusted jwt &lt;code&gt;ValidToken&lt;/code&gt; return parameters (&lt;a href="https://github.com/keepchen/go-sail/commit/2ab099e" rel="noopener noreferrer"&gt;&lt;code&gt;2ab099e&lt;/code&gt;&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;lib: Upgraded jwt to v5 (&lt;a href="https://github.com/keepchen/go-sail/commit/5a94765" rel="noopener noreferrer"&gt;&lt;code&gt;5a94765&lt;/code&gt;&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;utils: Redis lock adjusted &lt;code&gt;TryLockWithContext&lt;/code&gt; (&lt;a href="https://github.com/keepchen/go-sail/commit/c578ab4" rel="noopener noreferrer"&gt;&lt;code&gt;c578ab4&lt;/code&gt;&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;other: change Framework version to &lt;code&gt;3.0.6&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;http: Api performance optimize (&lt;a href="https://github.com/keepchen/go-sail/commit/23934799" rel="noopener noreferrer"&gt;&lt;code&gt;23934799&lt;/code&gt;&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;other: Add benchmark (&lt;a href="https://github.com/keepchen/go-sail/commit/23934799" rel="noopener noreferrer"&gt;&lt;code&gt;23934799&lt;/code&gt;&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  📦 Dependencies
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;github.com/golang-jwt/jwt/v5 → 5.2.2 → 5.3.0&lt;/li&gt;
&lt;li&gt;github.com/shirou/gopsutil/v4 → 4.25.3 → 4.25.7&lt;/li&gt;
&lt;li&gt;Other deps: swag, etcd, gorm, mysql, sqlite, postgres, nats, gin, nacos, valkey, kafka, x/net&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  📖 Docs &amp;amp; 🧪 Tests
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Updated README / README_EN.md / examples&lt;/li&gt;
&lt;li&gt;Added test cases &amp;amp; codecov config&lt;/li&gt;
&lt;li&gt;Continuous test improvements &amp;amp; CI/CD workflow adjustments
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Benchmark
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;goos: darwin
goarch: amd64
pkg: github.com/keepchen/go-sail/v3
cpu: Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz
BenchmarkGoSailParallel-12    88252    12898 ns/op    8860 B/op    92 allocs/op
BenchmarkGinParallel-12       96548    11722 ns/op    7187 B/op    82 allocs/op
PASS
ok    github.com/keepchen/go-sail/v3  3.663s
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F64au4l5gw86mj164youh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F64au4l5gw86mj164youh.png" alt="go-sail benchmark" width="800" height="398"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;h2&gt;
  
  
  Repository
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/keepchen/go-sail" rel="noopener noreferrer"&gt;https://github.com/keepchen/go-sail&lt;/a&gt;  &lt;/p&gt;

&lt;h2&gt;
  
  
  Documentation
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://go-sail.dev" rel="noopener noreferrer"&gt;https://go-sail.dev&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;Everyone is welcome to use it and experience it. If you like it, please like and collect it.&lt;/p&gt;

</description>
      <category>gosail</category>
      <category>go</category>
      <category>programming</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Contribute to open source projects</title>
      <dc:creator>Keepchen</dc:creator>
      <pubDate>Fri, 11 Jul 2025 02:34:46 +0000</pubDate>
      <link>https://dev.to/keepchen/contribute-to-open-source-projects-5dl0</link>
      <guid>https://dev.to/keepchen/contribute-to-open-source-projects-5dl0</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2y2vmbv67kpttr0cle41.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2y2vmbv67kpttr0cle41.jpeg" alt="Photo by NASA / Unsplash" width="800" height="532"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Who we support
&lt;/h2&gt;

&lt;p&gt;Get paid subscription plans for free, providing image hosting services including but not limited to documentation resources, sample images, and demo sites for open source projects to help them grow.&lt;/p&gt;

&lt;h2&gt;
  
  
  How it works
&lt;/h2&gt;

&lt;p&gt;Get your open source project image/picture/photos assets hosted for free with StarDots in a few simple steps.&lt;/p&gt;

&lt;p&gt;Eligible projects have a public GitHub/GitLab repo &lt;strong&gt;with 1,000+ stars&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Register a StarDots account
&lt;/h3&gt;

&lt;p&gt;Portal: &lt;a href="https://stardots.io/en/account/signup" rel="noopener noreferrer"&gt;https://stardots.io/en/account/signup&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Copy any badge on the referral page.
&lt;/h3&gt;

&lt;p&gt;Portal: &lt;a href="https://dashboard.stardots.io/others/referrals" rel="noopener noreferrer"&gt;https://dashboard.stardots.io/others/referrals&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Add the StarDots logo to your project's main &lt;code&gt;README.md&lt;/code&gt; file. Use the content copied above.&lt;/p&gt;

&lt;h3&gt;
  
  
  Link to us
&lt;/h3&gt;

&lt;p&gt;Ensure the logo in your README links back to &lt;a href="https://stardots.io" rel="noopener noreferrer"&gt;stardots.io&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Apply
&lt;/h3&gt;

&lt;p&gt;Send apply email to &lt;a href="mailto:support@stardots.io"&gt;support@stardots.io&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Get your paid plan for Free
&lt;/h3&gt;

&lt;p&gt;We'll review your application. If approved, your Paid Plan is active and stays active as long as our logo is featured!&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Claim your subscription plan for free!</title>
      <dc:creator>Keepchen</dc:creator>
      <pubDate>Mon, 07 Jul 2025 10:37:19 +0000</pubDate>
      <link>https://dev.to/keepchen/claim-your-subscription-plan-for-free-32fo</link>
      <guid>https://dev.to/keepchen/claim-your-subscription-plan-for-free-32fo</guid>
      <description>&lt;p&gt;StarDots officially launched a promotion activity to give away subscription plans. The purpose of this activity is to help excellent sites provide high-quality image hosting services.&lt;/p&gt;

&lt;h2&gt;
  
  
  Participation process:
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1.Register a StarDots account.
&lt;/h3&gt;

&lt;p&gt;Portal: &lt;a href="https://stardots.io/en/account/signup" rel="noopener noreferrer"&gt;https://stardots.io/en/account/signup&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2.Copy any badge on the referral page.
&lt;/h3&gt;

&lt;p&gt;Portal: &lt;a href="https://dashboard.stardots.io/others/referrals" rel="noopener noreferrer"&gt;https://dashboard.stardots.io/others/referrals&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  3.Display the badge on your website.
&lt;/h3&gt;

&lt;p&gt;Paste the badge code into your homepage site code and publish it online.&lt;/p&gt;

&lt;h3&gt;
  
  
  4.Contact customer service to receive a subscription plan.
&lt;/h3&gt;

&lt;p&gt;You can contact the customer service email and apply to the official customer service: &lt;a href="mailto:support@stardots.io"&gt;support@stardots.io&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Template for claim email content:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Site name: example
Site address: https://example.com
DR score: 99  
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Activity rules:
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Site type requirements
&lt;/h3&gt;

&lt;p&gt;Your site cannot be (including but not limited to) gambling, pornography, political and military, and NSFW content.&lt;/p&gt;

&lt;p&gt;A site can only be claimed once, and different multi-level domain names will be regarded as a unified site.&lt;/p&gt;

&lt;h3&gt;
  
  
  Site quality requirements
&lt;/h3&gt;

&lt;p&gt;Your site should exist for &lt;strong&gt;at least one year&lt;/strong&gt;. And the &lt;strong&gt;DR score cannot be less than 15&lt;/strong&gt;. The higher the score, the higher the plan level we give you, as follows:&lt;br&gt;
&lt;strong&gt;DR=[15～40] Give away Pro plan&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;DR&amp;gt;40 Give away Premium plan&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
You can check your site DR score here: &lt;a href="https://ahrefs.com/backlink-checker" rel="noopener noreferrer"&gt;https://ahrefs.com/backlink-checker&lt;/a&gt;  &lt;/p&gt;

&lt;h2&gt;
  
  
  Validity period of the gift plan
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;💡 The subscription plan we give you is valid for 1 year. 
During this period, your site needs to keep our badge link. 
If we find that the badge has been removed, we will cancel your 
subscription plan. We will conduct manual reviews from time to time.  
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Usage Guidelines:
&lt;/h3&gt;

&lt;p&gt;You must abide by our terms of service during use. If you violate them, we will cancel your subscription plan.&lt;br&gt;
Special statement:&lt;br&gt;
StarDots reserves the final right of interpretation and discretion for this event.&lt;/p&gt;

&lt;p&gt;Finally, everyone is welcome to feedback to StarDots any problems you encounter during use, as well as your positive suggestions. We wish you a happy use!&lt;/p&gt;

</description>
    </item>
    <item>
      <title>StarDots Assistant is online!</title>
      <dc:creator>Keepchen</dc:creator>
      <pubDate>Mon, 30 Jun 2025 01:28:24 +0000</pubDate>
      <link>https://dev.to/keepchen/stardots-assistant-is-online-kb8</link>
      <guid>https://dev.to/keepchen/stardots-assistant-is-online-kb8</guid>
      <description>&lt;p&gt;Last week, I finished developing the StarDots Assistant extension and submitted it to the browser plugin store for publication.&lt;/p&gt;

&lt;p&gt;I didn't expect the review of my application to be completed so quickly. I just received a confirmation email that my application was approved.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fszomlv3j82e2w9j7jngl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fszomlv3j82e2w9j7jngl.png" alt="Image description" width="800" height="371"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;So what is StarDots Assistant? What does it do? Let me introduce it to you.&lt;/p&gt;

&lt;p&gt;StarDots Assistant is a browser extension software officially provided by StarDots, which helps users manage image assets conveniently. It is available on any web page tab.&lt;/p&gt;

&lt;p&gt;StarDots has the following features:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Quick Upload&lt;br&gt;
The quick upload feature allows writers to seamlessly upload resources to their own storage bucket and quickly embed references. This feature allows writers to have a more immersive writing experience.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Image Preview&lt;br&gt;
When the image asset drawer is opened, users can quickly check image resources and easily manage graphic resources, such as previewing, referencing, and deleting. This feature is very useful for managing existing assets.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Save Page Image&lt;br&gt;
You can right-click an image on a web page and save the image to your own storage bucket. This feature is especially useful in scenarios such as collecting image resources.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frt28nd15vdbb0iefpayc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frt28nd15vdbb0iefpayc.png" alt="Image description" width="800" height="500"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1fx6q34jbznw3jgohw2b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1fx6q34jbznw3jgohw2b.png" alt="Image description" width="800" height="500"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;Store address is:&lt;br&gt;
Chrome: &lt;a href="https://chrome.google.com/webstore/detail/mijgneckdpnoajhclejhaoobnomknnco" rel="noopener noreferrer"&gt;https://chrome.google.com/webstore/detail/mijgneckdpnoajhclejhaoobnomknnco&lt;/a&gt;&lt;br&gt;
Firefox: &lt;a href="https://addons.mozilla.org/addon/stardots-assistant/" rel="noopener noreferrer"&gt;https://addons.mozilla.org/addon/stardots-assistant/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Please give it a try!&lt;/p&gt;

</description>
      <category>extensions</category>
      <category>imagehosting</category>
    </item>
    <item>
      <title>Introduce my works - Go-Sail</title>
      <dc:creator>Keepchen</dc:creator>
      <pubDate>Fri, 06 Jun 2025 01:36:59 +0000</pubDate>
      <link>https://dev.to/keepchen/introduce-my-works-go-sail-189h</link>
      <guid>https://dev.to/keepchen/introduce-my-works-go-sail-189h</guid>
      <description>&lt;h2&gt;
  
  
  Whats the go-sail？
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Go-Sail&lt;/strong&gt; is a lightweight progressive web framework implemented using Go language. &lt;strong&gt;It is not the product of reinventing the wheel&lt;/strong&gt;, but stands on the shoulders of giants and integrates existing excellent components to help users build stable and reliable services in the simplest way.&lt;br&gt;
As its name suggests, you can regard it as the beginning of your own journey in the golang ecosystem. Go-Sail will help you start lightly and set sail.  &lt;/p&gt;
&lt;h2&gt;
  
  
  How to use
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;go version &amp;gt;= 1.20  &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Install  &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;go get -u github.com/keepchen/go-sail/v3&lt;br&gt;
&lt;/p&gt;


&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="s"&gt;"net/http"&lt;/span&gt;
    &lt;span class="s"&gt;"github.com/gin-gonic/gin"&lt;/span&gt;
    &lt;span class="s"&gt;"github.com/keepchen/go-sail/v3/sail"&lt;/span&gt;
    &lt;span class="s"&gt;"github.com/keepchen/go-sail/v3/sail/config"&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;conf&lt;/span&gt; &lt;span class="o"&gt;=&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="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;registerRoutes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;func&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ginEngine&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;gin&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Engine&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;ginEngine&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;GET&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"/hello"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;func&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;gin&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Context&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;String&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;StatusOK&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"%s"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"hello, world!"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;})&lt;/span&gt;
    &lt;span class="p"&gt;}&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;sail&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;WakeupHttp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"go-sail"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;conf&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Hook&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;registerRoutes&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;span class="no"&gt;nil&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Launch&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;Console screenshot after launched like this:  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz0qctoq5zxi92yl4gedd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz0qctoq5zxi92yl4gedd.png" alt="Go-Sail launch screenshot" width="800" height="356"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;h2&gt;
  
  
  Documentation
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://go-sail.dev" rel="noopener noreferrer"&gt;https://go-sail.dev&lt;/a&gt;  &lt;/p&gt;

&lt;h2&gt;
  
  
  Features
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;[x] HTTP Responder

&lt;ul&gt;
&lt;li&gt;Uniform Response Fields&lt;/li&gt;
&lt;li&gt;Managing HTTP status codes
&lt;/li&gt;
&lt;li&gt;Management business code
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;[x] Components

&lt;ul&gt;
&lt;li&gt;Database&lt;/li&gt;
&lt;li&gt;Email&lt;/li&gt;
&lt;li&gt;Jwt&lt;/li&gt;
&lt;li&gt;Kafka&lt;/li&gt;
&lt;li&gt;Logger&lt;/li&gt;
&lt;li&gt;Nacos&lt;/li&gt;
&lt;li&gt;Etcd&lt;/li&gt;
&lt;li&gt;Nats&lt;/li&gt;
&lt;li&gt;Redis&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;[x] Service Registration and Discovery

&lt;ul&gt;
&lt;li&gt;Nacos&lt;/li&gt;
&lt;li&gt;Etcd&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;[x] Toolkit

&lt;ul&gt;
&lt;li&gt;Encryption and Decryption
&lt;/li&gt;
&lt;li&gt;File&lt;/li&gt;
&lt;li&gt;IP&lt;/li&gt;
&lt;li&gt;String&lt;/li&gt;
&lt;li&gt;Random number
&lt;/li&gt;
&lt;li&gt;Date and Time
&lt;/li&gt;
&lt;li&gt;...&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;[x] Log collection and export

&lt;ul&gt;
&lt;li&gt;Local files&lt;/li&gt;
&lt;li&gt;Exporter

&lt;ul&gt;
&lt;li&gt;Redis
&lt;/li&gt;
&lt;li&gt;Kafka
&lt;/li&gt;
&lt;li&gt;Nats
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;/li&gt;

&lt;li&gt;[x] Scheduled Tasks

&lt;ul&gt;
&lt;li&gt;Cancellable
&lt;/li&gt;
&lt;li&gt;Disposable
&lt;/li&gt;
&lt;li&gt;Periodic
&lt;/li&gt;
&lt;li&gt;Linux Crontab style
&lt;/li&gt;
&lt;li&gt;Race Detection
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;[x] Telemetry and Observability

&lt;ul&gt;
&lt;li&gt;Call chain tracing&lt;/li&gt;
&lt;li&gt;Prometheus&lt;/li&gt;
&lt;li&gt;Pprof&lt;/li&gt;
&lt;li&gt;Log Exporter
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Performance monitor

&lt;ul&gt;
&lt;li&gt;Prometheus
&lt;/li&gt;
&lt;li&gt;Pprof
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;[x] API error codes

&lt;ul&gt;
&lt;li&gt;Dynamic injection
&lt;/li&gt;
&lt;li&gt;Internationalization
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;[x] Distributed lock based on Redis

&lt;ul&gt;
&lt;li&gt;Blocking
&lt;/li&gt;
&lt;li&gt;None-Blocking
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;[x] API Documentation

&lt;ul&gt;
&lt;li&gt;Redocly&lt;/li&gt;
&lt;li&gt;Swagger
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  Big Thanks
&lt;/h2&gt;

&lt;p&gt;Thank you to everyone who provided valuable suggestions and comments during the experience and use, as well as provided other kinds of help!&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Configuration modular optimization proposal &lt;a href="https://github.com/fujilin" rel="noopener noreferrer"&gt;@fujilin&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Responder syntax sugar enhancement optimization proposal &lt;a href="https://github.com/lichuanzhang" rel="noopener noreferrer"&gt;@lichuanzhang&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Logo beautification &lt;a href="https://twitter.com/ShuaiRen34" rel="noopener noreferrer"&gt;@ShuaiRen34&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Other
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;PR is welcome: &lt;a href="https://github.com/keepchen/go-sail/compare" rel="noopener noreferrer"&gt;pull request&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Issue is welcome: &lt;a href="https://github.com/keepchen/go-sail/issues/new/choose" rel="noopener noreferrer"&gt;issue&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Thank you for your star if you like this project :)
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Use cases
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
  &lt;tr&gt;
    &lt;td&gt;
      &lt;a href="https://stardots.io?ref=go-sail" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwhtpuo400lk8f54d8q4u.png" alt="stardots.io" title="https://stardots.io" width="286" height="82"&gt;&lt;/a&gt;
    &lt;/td&gt;
    &lt;td&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnspsw7i2t2mgjmm3z6yd.png" alt="Pikaster" width="800" height="175"&gt;
    &lt;/td&gt;
    &lt;td&gt;
      &lt;a href="https://fantagoal.io" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhlhkxo7iwcf80v6xk6n0.png" alt="FantaGoal" title="https://fantagoal.io" width="512" height="75"&gt;&lt;/a&gt;
    &lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr1uy84d3b1qdtprgtety.png" alt="WinGoal" width="564" height="200"&gt;
    &lt;/td&gt;
    &lt;td&gt;
      &lt;a href="https://t.me/PiggyPiggyofficialbot" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpkptp1yk6l4wqm7wd4q7.jpg" alt="Piggy (telegram mini-game)" title="https://t.me/PiggyPiggyofficialbot" width="640" height="640"&gt;&lt;/a&gt;
    &lt;/td&gt;
    &lt;td&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuj0c214q2y9xardsm7b7.png" alt="生活好评助手-小程序" width="430" height="430"&gt;
    &lt;/td&gt;
  &lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;  

&lt;h2&gt;
  
  
  Star History
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fstarchart.cc%2Fkeepchen%2Fgo-sail.svg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fstarchart.cc%2Fkeepchen%2Fgo-sail.svg" alt="Star History" width="1024" height="400"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;h2&gt;
  
  
  Repository
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/keepchen/go-sail" rel="noopener noreferrer"&gt;https://github.com/keepchen/go-sail&lt;/a&gt;  &lt;/p&gt;

</description>
    </item>
    <item>
      <title>Introduce my works - StarDots</title>
      <dc:creator>Keepchen</dc:creator>
      <pubDate>Thu, 05 Jun 2025 10:08:07 +0000</pubDate>
      <link>https://dev.to/keepchen/introduce-my-works-stardots-2pd0</link>
      <guid>https://dev.to/keepchen/introduce-my-works-stardots-2pd0</guid>
      <description>&lt;p&gt;🚀 Introducing StarDots: Your All-in-One Image Hosting and Transformation Powerhouse!&lt;/p&gt;

&lt;p&gt;🌠 StarDots isn't just another image hosting tool—it's a feature-packed platform designed to give you complete control over your images. Whether you're a designer, developer, photographer, or content creator, StarDots delivers a seamless experience for managing, editing, and sharing images all in one place.&lt;/p&gt;

&lt;p&gt;🔧 Core Features That Make StarDots Shine:&lt;/p&gt;

&lt;p&gt;⚡ Instant Image Resizing: Scale your images to any dimension with just a few clicks. Perfect for creating responsive designs or adapting visuals for different platforms.&lt;br&gt;
🎨 Gaussian Blur Magic: Achieve that professional, soft-focus effect effortlessly. StarDots lets you apply precise levels of blur, giving your images a refined look whether you're creating a subtle backdrop or a stylish visual effect.&lt;br&gt;
🔄 Seamless Image Rotation: Struggling with image orientation? Easily rotate images to the perfect angle and create flawless compositions—no need for complex editing tools!&lt;br&gt;
📉 Adjustable Image Quality: Need optimized performance without compromising on quality? StarDots allows you to fine-tune image compression and quality, so you can strike the right balance between speed and clarity.&lt;br&gt;
🌐 Fast and Reliable Hosting: Say goodbye to slow image loading. With StarDots, you get lightning-fast image hosting on a secure and stable platform—ideal for websites, blogs, eCommerce, and more.&lt;/p&gt;

&lt;p&gt;💡 Why StarDots?&lt;/p&gt;

&lt;p&gt;With more and more online content relying on visuals, optimizing images is critical for speed, user experience, and search engine rankings. StarDots gives you the power to handle everything from quick edits to comprehensive transformations—without needing professional software or technical expertise.&lt;/p&gt;

&lt;p&gt;User-Friendly Interface: No steep learning curve—just upload your images, make your edits, and host them instantly.&lt;br&gt;
One-Click Sharing: Easily share hosted images with customized links and embed codes, making collaboration and distribution a breeze.&lt;br&gt;
Scalable for All Users: Whether you're managing a portfolio or running a large eCommerce site, StarDots scales to fit your needs, offering high-performance hosting and editing.&lt;/p&gt;

&lt;p&gt;🔗 Who’s it for?&lt;/p&gt;

&lt;p&gt;Web developers looking to streamline image management.&lt;br&gt;
Content creators and bloggers needing easy, high-quality image hosting.&lt;br&gt;
Designers seeking quick and precise image adjustments.&lt;br&gt;
Marketers optimizing images for faster loading speeds and better engagement.&lt;/p&gt;

&lt;p&gt;✨ Transform your images, transform your workflow. With StarDots, the possibilities are endless. Start editing, hosting, and sharing in just a few seconds.&lt;/p&gt;

&lt;p&gt;🚀 Try StarDots Today and Discover the Future of Image Hosting!&lt;/p&gt;

&lt;p&gt;👏👏 We welcome your comments and feedback, which will be greatly appreciated!&lt;/p&gt;

&lt;p&gt;Official Website: &lt;a href="https://stardots.io" rel="noopener noreferrer"&gt;https://stardots.io&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Follow us: &lt;a href="https://x.com/stardotsio" rel="noopener noreferrer"&gt;https://x.com/stardotsio&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
