⚡️ سرعت توسعه را افزایش دهید؟ کتابخانه مفیدی از پرکاربردترین قطعهها برای برنامههای Go

معرفی
خوب، سلام، دوستان DEV من! 👋
خیلی وقت بود که وقت و فرصتی برای نوشتن این وبلاگ نداشتم. اما به هر حال از شما ممنونم که با من ماندید و سوال پرسیدید!
من واقعا آن را قدردانی می کنم. شما را دوست دارم مردم! 😘
امروز قصد دارم در مورد پروژه کوچک شخصی خود که اخیراً در معرض دید عموم قرار داده ام به شما بگویم. اما در تمام این سال ها به من کمک کرد تا برنامه های Go را با بیشترین سرعت ممکن و با رعایت کامل اصل DRY (تکرار نکن) بنویسم.
شیفته؟ پس خوش آمدید، جالب خواهد بود! 👇
📝 فهرست مطالب
انگیزه در ایجاد کتابخانه
همانطور که قبلاً از مقالات قبلی من می دانید، من رویکردی برای توسعه نرم افزار دارم که زندگی توسعه دهنده را کاملاً آسان می کند.
اگر می توانید کارآمدترین راه حل را یک بار به کتابخانه اضافه کنید و آن را در جایی که نیاز دارید وارد کنید، چرا همان قطعه را تکرار کنید، مثلاً برای ترجمه یک تکه بایت به یک رشته؟ دقیقا درسته! این یک بار شناختی غیر ضروری برای کسانی است که کد شما را در آینده می خوانند (و همچنین برای شما).
به همین دلایل است که کتابخانه Go Snippet (یا gosl
به طور خلاصه) مجموعه ای از قطعات را برای کار با عملیات معمول در برنامه های Go شما با یک API فوق العاده کاربرپسند و کارآمدترین عملکرد ارائه می دهد.
↑ فهرست مطالب
استفاده اولیه از کتابخانه
بله، به سادگی اضافه کنید gosl
به پروژه شما:
go get github.com/koddr/gosl
قطعه مورد نیاز را به کد خود اضافه کنید، مانند این:
import (
fmt
log
"github.com/koddr/gosl"
)
func main() {
b := []byte("Hello, World!")
s, err := gosl.ToString(b) // convert byte slice to string
if err != nil {
log.Fatal(err)
}
fmt.Println(s)
}
یا برای دسترسی به اسنیپتها بهعنوان ساختار جاسازیشده، به این شکل عمل کنید:
type App struct {
// ...
utils *gosl.Utility // add regular snippets
genUtils *gosl.GenericUtility[any, comparable] // add generic snippets
}
func (a *App) handleSomething(b []byte) error {
// ...
s, err := a.utils.ToString(b) // convert byte slice to string
if err != nil {
return err
}
// ...
u, err := a.genUtils.Unmarshal(json, model) // unmarshal JSON data to struct
if err != nil {
return err
}
// ...
}
و شما در حال حاضر در وقت و انرژی خود صرفه جویی می کنید. به من اعتماد کن ✌️
↑ فهرست مطالب
قطعه های منظم
تکه های منظم از gosl
بستهها با هدف حل یک کار واحد با کمترین تخصیص ممکن از منابع دستگاه شما هستند.
Concat
رشته ها را به هم متصل کنید s
به یک رشته:
s1 := "this "
s2 := "is "
s3 := "my string"
s := gosl.Concat(s1, s2, s3)
حاوی CaseInsensitive است
اگر رشته را گزارش دهید substr
درون رشته است s
(به طور پیش فرض به حروف بزرگ و کوچک حساس نیست):
s := "Hello, WORLD!"
substr := "r"
b := gosl.ContainsCaseInsensitive(s, substr)
RandomString
یک (واقعا) رشته تصادفی با اندازه معین:
size := 8
s, err := gosl.RandomString(size)
if err != nil {
log.Fatal(err)
}
ToString
تبدیل تکه بایت b
به رشته یا خطا:
b := []byte("Hello, World!")
s, err := gosl.ToString(b)
if err != nil {
log.Fatal(err)
}
ToBytes
تبدیل رشته s
به تکه بایت یا خطا:
s := "Hello, World!"
b, err := gosl.ToBytes(s)
if err != nil {
log.Fatal(err)
}
↑ فهرست مطالب
قطعه های جهانی
جهانی (یا عمومی) تکه هایی از gosl
بسته ها با هدف حل یک کار خاص با کمترین تخصیص ممکن از منابع دستگاه شما هستند، اما می توانند برای تعداد زیادی از انواع کاربر اعمال شوند.
ContainsInSlice
اگر مقدار را گزارش کنید v
در برش است s
:
s := []string{"one", "two", "three"}
v := "two"
b := gosl.ContainsInSlice(s, v)
ContainsInMap
اگر کلید را گزارش کنید k
داخل نقشه است m
:
m := map[string]int{"one": 1, "two": 2, "three": 3}
k := "two"
b := gosl.ContainsInMap(m, k)
مارشال
ساختار مارشال user
به داده های JSON j
(برش بایت) یا خطا:
type user struct {
ID int `json:"id"`
Name string `json:"name"`
}
u := &user{}
j, err := gosl.Marshal(u)
if err != nil {
log.Fatal(err)
}
💡 این قطعه یک جایگزین 100% سازگار با استاندارد است
encoding/json
کتابخانه
از مارشال
دادههای JSON را حذف کنید j
(برش بایت) برای ساخت user
یا خطا:
type user struct {
ID int `json:"id"`
Name string `json:"name"`
}
j := []byte(`{"id":1,"name":"Viktor"}`)
m := &user{}
u, err := gosl.Unmarshal(j, m)
if err != nil {
log.Fatal(err)
}
💡 این قطعه (همچنین) یک جایگزین 100% سازگار با استاندارد است
encoding/json
کتابخانه
↑ فهرست مطالب
معیارها
نتایج من برای همه قطعههای موجود در کتابخانه (محل آزمایش Apple MacBook Air M1، 16 گیگابایت رم، macOS 13.3.1 است):
BenchmarkConcat_String2-8 58663996 20.06 ns/op 32 B/op 1 allocs/op
BenchmarkConcat_String8-8 26829356 44.16 ns/op 128 B/op 1 allocs/op
BenchmarkConcat_String32-8 9321133 127.8 ns/op 448 B/op 1 allocs/op
BenchmarkToString_HelloWorld-8 100000000 10.56 ns/op 16 B/op 1 allocs/op
BenchmarkToBytes_HelloWorld-8 1000000000 0.6288 ns/op 0 B/op 0 allocs/op
BenchmarkRandomString_Size1-8 3488678 344.6 ns/op 6 B/op 3 allocs/op
BenchmarkRandomString_Size8-8 3394548 353.3 ns/op 24 B/op 3 allocs/op
BenchmarkRandomString_Size64-8 2313856 517.9 ns/op 160 B/op 3 allocs/op
BenchmarkRandomString_Size512-8 1423572 838.9 ns/op 1280 B/op 3 allocs/op
BenchmarkRandomString_Size4096-8 185337 6350 ns/op 10240 B/op 3 allocs/op
BenchmarkMarshal_StructField_4-8 8584442 139.9 ns/op 48 B/op 3 allocs/op
BenchmarkMarshal_StructField_16-8 2838062 420.8 ns/op 192 B/op 3 allocs/op
BenchmarkUnmarshal_StructField_4-8 6960462 169.3 ns/op 32 B/op 3 allocs/op
BenchmarkUnmarshal_StructField_16-8 764182 1553 ns/op 864 B/op 45 allocs/op
BenchmarkContainsCaseInsensitive_HelloWorld-8 24856041 48.46 ns/op 16 B/op 1 allocs/op
BenchmarkContainsCaseInsensitive_LoremIpsum-8 1797150 695.9 ns/op 448 B/op 1 allocs/op
BenchmarkContainsInSlice-8 122999034 9.758 ns/op 0 B/op 0 allocs/op
BenchmarkContainsInMap-8 19123504 62.61 ns/op 0 B/op 0 allocs/op
↑ فهرست مطالب
یک همکاری برد-برد
من از هر کاربر Dev.to (و مسلماً وبلاگ حقیر من) دعوت می کنم تا در این پروژه شرکت کنند! بیا کار کنیم با یکدیگر برای ایجاد بزرگترین و مفیدترین کتابخانه قطعات برای برنامه های Go امروز در وب.
- سوال بپرسید و ویژگی های خود را به بخش مسائل ارسال کنید.
- قطعات یا بهبودهای خود را در جریان فعلی به بخش Pull requests ارسال کنید.
روابط عمومی و مسائل شما خوش آمدید! با تشکر 😉
↑ فهرست مطالب
عکس و فیلم توسط
PS
اگر می خواهید مقالات بیشتری از این قبیل در این وبلاگ داشته باشید، در زیر نظر خود را ارسال کنید و در من عضو شوید. با تشکر! 😘
و البته، می توانید با کمک مالی در LiberaPay از من حمایت کنید. هر کمک مالی برای نوشتن مقالات جدید و توسعه پروژه های غیرانتفاعی منبع باز برای جامعه استفاده می شود.