private git repository
اگر بخواهیم یه پکیبج درون گیت شرکت توسغه بدیم و تنها اونجا استفاده کنیم ، بادی مقدار زیر رو اکسپورت کنیم
یه نمونه آدرسی که درون گروه بک اند است
https://git.maani.app/maani/backend/kafka-wrapper
حالا می توان این رو به فایل /etc/environment اضافه کرد
GOPRIVATE=*.example.app
همچنین اگر پروژه ذیل یه لایبری باشد مانند آدرس زیر ، باید درون gitconfig مقداری رو اضافه کنیم
nano ~/.gitconfig
[url "ssh://git@git.maani.app/"]
insteadOf = https://git.maani.app/
403 - 443 - forbidden
یه سری وقتا یه پکیج نصب نمی شه ، شاید بشه با یه سری فلگ نصب کرد
GOPROXY=https://proxy.golang.org,direct go get github.com/gin-gonic/gin
GODEBUG=netdns=go GOHOST=localhost GOINSECURE=nullprogram.com GONOSUMDB=nullprogram.com GO111MODULE=on go get -v github.com/gin-gonic/gin
اگر نشد این هم امتحان کنیم :
export GOPROXY=direct
export GOSUMDB=off
go mod tidy
cobra vs multiple cmd folders
در صورتی که برنامه ی ما بیش از یک حالت ران شود یعنی همزمان هم rest api http داره هم چند کرون جاب ، می تونیم ۲ کار کنیم :
حالت اول این که چند cmd و دایرکتوری داشته باشیم و درون هر کدوم ، main جدا ، خوبیش اینه خیلی مستقل هستن و نیاز به پکیج بیرونی نداره مانند کبرا همچنین به ازای هر کدوم ، یه داکر فایل باید داشته باشیم
حالت دوم استفاده از کبرا هست ، کلن یه بار بیلد میشه و یه فایل باینری داریم ولی در عوض می تونه با پارامتر هایی که میگیره ،
unmarshal
- invalid character ‘u003c’ looking for beginning of value
- invalid character ’<’ looking for beginning of value
خیلی وقتا می خوایم بادی یه ریسپانس رو آنمارشال کنیم ولی اینا رو میبینیم ، اینا به این معنیه که جواب جیسون نبوده بلکه تگ html tag بوده ، احتمالا nginx , cloudeflare بوده
-
در کل بهتر هر جا آنمارشال نشد ، علاوه بر متن خطای آنمارشال ، 200 کارکتر اول رو هم بدیم بالا
-
سعی کنیم همیشه در صورتی که پروایدر چندین حالت استایل پاسخ می ده ، اون رو مانند سوییچ کیس هندل کنیم و پاسخ یکی باشه مثلا در صورتی که جواب 200 و لیست خالی هست ، استایلش متفاوت میشه
-
سعی کنیم در صورتی که هیچ جوره نتونستیم آنمارشال کنیم ، اون رو لاگ کنیم ، مثلا خطای آنمارشال و ۱۰۰ کارکتر اول اون بادی یا اسلایس بایت ها
time.Time
این تایپ برای زمانه و اگر استرینگ با فرمت زیر بدیم ، می توینم unmarshal کنیم
type Event struct {
Name string
Timestamp time.Time
}
...
jsonStr := `{"Name":"Birthday","Timestamp":"2024-04-27T12:00:00Z"}`
var event Event
err := json.Unmarshal([]byte(jsonStr), &event)
json unmarshal
وجه شود در صورتی که فیلد های استراکت پرایویت باشد ، اگر اینستنسی از آن مارشال شود ، فیلد های پرایویت برگردانده نمی شود ، پس با دقت فیلد ها را پرایوت کن . ( کلا پرایوت جالب نیست )
redis - json ------- اینجوری می تونیم دیکد کنیم :
result := new(interface{})
json.Unmarshal([]byte(cacheResponse.(string)), result)
json.Decoder
- یکی از ابزار های خوب برای کار با جیسون آنمارشال است اما گاهی جیسون ما خیلی بزگ است و یا گاهی می خواهیم بخشی از جیسون رو استفاده کنیم در این صورت نیازی نیست تمامی جیسون را در مموری نگه داریم و راه حل استفاده از json.Decoder
golang conventional naming package
متاسفانه مرسومه که نام پکیج ها lowercase باشه و از - or _ استفاده نکنیم
و این شد که من باید اسم پکیجم رو این بزارم :
internalrequestservice