<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های سعید حیدری</title>
        <link>https://virgool.io/feed/@saeedheydari</link>
        <description>من سعید حیدری،برنامه نویس و طراح وب و از علاقه مندان دنیای گنو/لینوکس هستم. بک اند با لاراول وGolang و فرانت اند با vuejs, nuxtjs کار می کنم. همچنین به بلاکچین، هوش مصنوعی و اینترنت اشیا علاقه مندم.</description>
        <language>fa</language>
        <pubDate>2026-04-14 22:12:56</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/38210/avatar/ximlUL.jpg?height=120&amp;width=120</url>
            <title>سعید حیدری</title>
            <link>https://virgool.io/@saeedheydari</link>
        </image>

                    <item>
                <title>آموزش golang - قدم نهم: تابع</title>
                <link>https://virgool.io/@saeedheydari/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-golang-%D9%82%D8%AF%D9%85-%D9%86%D9%87%D9%85-%D8%AA%D8%A7%D8%A8%D8%B9-nat6a2yfyqe3</link>
                <description>سلام دوستانتو این قسمت می خوایم درمورد تابع صحبت کنیم که یکی از مهم ترین امکانات هر زبان برنامه نویسی هست.تابعدر برنامه‌نویسی، تابع به تکه کدهایی سازمان یافته گفته می شه که برای انجام عملی خاص استفاده میشن. به کمک توابع می تونیم تکه کدهارو از هم جدا کنیم و از دوباره نویسی کدهای تکراری که یه کار مشابه رو انجام میدن جلوگیری کنیم و به برنامه مون نظم بیشتری بدیم.برای مثال ممکنه چندین جای برنامه نیاز به محاسبه ی سری فوریه داشته باشیم، به جای اینکه لازم باشه هر بار کد محاسبه رو بنویسیم که هم باعث دوباره نویسی و شلوغی و طولانی شدن کد و هم باعث سخت شدن تغییر میشه، اون رو به صورت یه قطعه کد مجزا به اسم تابع می نویسیم و هر جا لازم شد ازش استفاده می کنیم.این طوری اگه نیاز به تغییر اون باشه با یه بار تغییر دادن تو همه جا این تغییر اعمال میشه.عکس زیر مفهوم تابع رو نشون میدهاستفاده از تابع مزایای زیر رو برامون دارهبا استفاده از توابع، می تونیم یک قطعه کد را یک بار بنویسیم و چندین بار از اون در برنامه استفاده کنیم.با استفاده از توابع، حجم کدنویسی ما کم تر میشه و سرعت توسعه نرم افزار بیشتر می شه.توابع به ما کمک می کنن تا کد خودمون رو به تکه هایی تقسیم کنیم تا برنامه ما خوانا و قابل درک باشه. همچنین نگهداری و اشکال زدایی کد را آسان تر می کنه.نحوه تعریف تابعfunc function_name( [parameter list] ) [return_types] {
   // body of the function
}برای تعریف تابع باید از کلید واژه ی func استفاده کنیمنامگذاری تابع از قواعد نامگذاری شناسه ها پشتیبانی می کنه و باید یکتا باشه. همچنین نباید از کلمات کلیدی و نام توابع درونی برای اسم گذاری توابع استفاده کنیمهر تابع می تونه تعدادی ورودی داشته باشه و یا اصلا ورودی نداشته باشه. لیست پارامتر ها داخل پرانتزها قرار میگیره و باید نوع اون ها هم مشخص باشههر تابع می تونه تعدادی نوع برگشتی یا return types، داشته باشه یا نداشته باشه. این لیست بعد از پرانتزها قرار میگیره و فقط نوع داده باید نوشته بشه. همچنین اگه تعداد اون ها ۲ تا یا بیشتر باشه باید داخل پرانتز قرار بگیرن.تو قسمت body of the function، کدهای ما نوشته میشن. اگه تابع مقدار برگشتی داشته باشه با کلمه کلیدی return اون رو برمی گردونیم.یه مثال کاربردی و ساده رو بیشتر توضیح میدم:package main
import &amp;quotfmt&amp;quot
func plus(a int, b int) int {
	return a + b
}
func main() {
        result := plus(4, 13)
	fmt.Println(result)
}تو این مثال یه تابع به اسم plus نوشتیم که دوتا پارامتر a , b که از نوع int هستن رو میگیره و با هم جمع می کنه و نتیجه رو برمی گردونه که اون هم از نوع int هست.تو بدنه ی تابع main ما تابع plus رو با اسم تابع و دو تا پارامتر ۴ , ۱۳ فراخوانی کردیم و چون مقدار بازگشتی داره اون رو به result نسبت دادیم. مقدار بازگشتی تابع که میشه ۱۷ داخل result ریخته میشه و تو خط بعدی چاپ میشه.مثال با چند نوع بازگشتیpackage main
import &amp;quotfmt&amp;quot
func vals() (int, int) {
    return 3, 7
}
func main() {
    a, b := vals()
    fmt.Println(a)
    fmt.Println(b)
    _, c := vals()
    fmt.Println(c)
}تو این مثال میبینید که تابع vals دو مقدار ۳ و ۷ رو بر می گردونه که ما اون ها رو توی متغیرهای a و b ریختیم و چاپ کردیم.اگه توجه کنید تو خط بعدی مقادیر بازگشتی رو به _ و c دادیم. توجه کنید که _ برای وقتی استفاده میشه که ما یک یا چند خروجی یه تابع رو نیاز نداشته باشیم. تو این مثال چون اول _ و سپس c قرار گرفته، پس مقدار ۳ استفاده نمیشه و مقدار ۷ توی c ریخته میشه.به _ ، blank identifier نیز گفته میشه. برای وقتی استفاده میشه که بخوایم تعدادی از خروجی های یه تابع صرف نظر کنیم. احتمالا جاهای زیادی نیاز باشه ازش استفاده کنید.مقادیر بازگشتی نام گذاری شده (Named Return Values)تو گو می تونیم مقادیر بازگشتی یه تابع رو اسم گذاری کنیم:package main
import &amp;quotfmt&amp;quot
func split(sum int) (x, y int) {
	x = sum * 4 / 9
	y = sum - x
	return
}
func main() {
	fmt.Println(split(17))
}توجه کنید که تو این مورد ما return رو بدون مقادیر بازگشتی استفاده کردیم. تو این حالت که بهش Naked Return گفته میشه، مقادیر بازگشتی اسم گذاری شده برگشت داده میشن.سعی کنید از این نوع return کمتر استفاده کنید و در صورت نیاز فقط تو توابعی که کوتاه هستن استفاده کنید، چون باعث کاهش خوانایی کد میشه.توابع متنوع در گولنگ (Variadic Functions)یکی از قابلیت هایی گو داره اینه که می تونید توابعی رو تعریف کنید که به شما اجازه می ده هر چقدر پارامتر نیاز دارید بدون تعریف وارد تابع کنید.این نوع تابع بیشتر برای توابعی به کار میره که توی اون ها همه ی ورودی ها از یه نوع هستن و یه کار خاص که چندان به ورودی ها وابسته نیست انجام میشه مثل تابع جمع.package main
import &amp;quotfmt&amp;quot
func sum(nums ...int) {
    fmt.Print(nums, &amp;quot &amp;quot)
    total := 0
    for _, num := range nums {
        total += num
    }
    fmt.Println(total)
}
func main() {
    sum(1, 2)
    sum(1, 2, 3)
    nums := []int{1, 2, 3, 4}
    sum(nums...)
}توابع نانشناس در گولنگ (Anonymous Functions)در زبان گولنگ می توانیم تابع بدون نام تعریف کنیم که به عنوان توابع ناشناس شناخته می شن.package main
import &amp;quotfmt&amp;quot
func main() {
  // anonymous function
  var sum = func(n1, n2 int) int {
    sum := n1 + n2
    return sum
  } 
  // function call
  result := sum(5, 3)
  fmt.Println(&amp;quotSum is:&amp;quot, result)
}از آنجایی که توابع ناشناس نامی ندارد ما در بعضی اوقات آن ها را به یک متغیر اختصاص می دیم سپس از نام متغیر برای فراخوانی تابع استفاده می کنیم. در این مثال می بینید که ما از sum برای فراخوانی تابع استفاده می کنیم.مانند توابع معمولی ما میتونیم برای تابع ناشناس پارامتر تعریف کنیم و مقداری را از تابع برگردانیم در این مثال تابع دو مقدار با نوع داده int دریافت میکنه و یک خروجی با نوع int داره.تابع ناشناس را می توانیم برای عملکردهایی که نیازی به نامگذاری ندارند و معمولا برای استفاده کوتاه مدت هست، استفاده کنیم.اما یکی از موارد کاربردی توابع ناشناس در گولنگ پاس دادن آن ها به توابعی هستن که تابعی را به عنوان پارامتر ورودی دریافت میکنن. در مثال زیر ما یک تابع تعریف کردیم که در پارامتر سوم یک تابع دریافت میکنه که باید دو ورودی int و یک خروجی int داشته باشه.package main  
import &amp;quotfmt&amp;quot  
func add10AndSum(num1 int, num2 int, sum func(n1, n2 int) int) {  
   result := sum(num1+10, num2+10)  
   fmt.Println(&amp;quotSum by adding 10 is:&amp;quot, result)  
}  
func main() {  
   add10AndSum(5, 3, func(n1, n2 int) int {  
      sum := n1 + n2  
      return sum  
   })  
}توابع از پیش تعریف شده (Built-in Function)در گو علاوه بر تابع هایی که توسط کابر تعریف میشه. یکسری توابع وجود داره که از قبل توسط طراحان این زبان برای سهولت کار برنامه نویسان نوشته شدن. از این لینک می تونید لیست اون ها رو ببینید. https://virgool.io/@saeedheydari/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D9%85%D9%82%D8%AF%D9%85%D8%A7%D8%AA%DB%8C-golang-%D9%82%D8%AF%D9%85-%D8%B5%D9%81%D8%B1-ufv22zb4j3bq  https://virgool.io/@saeedheydari/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D9%85%D9%82%D8%AF%D9%85%D8%A7%D8%AA%DB%8C-golang-%D8%A8%D8%AE%D8%B4-%D8%AF%D9%88%D9%85-wyvs1idjyan2  https://virgool.io/@saeedheydari/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-golang-%D9%82%D8%AF%D9%85-%D8%B3%D9%88%D9%85-e3mxmjr1mp74  https://virgool.io/@saeedheydari/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-golang-%D9%82%D8%AF%D9%85-%DA%86%D9%87%D8%A7%D8%B1%D9%85-ydltpxgtgdlj  https://virgool.io/@saeedheydari/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-golang-%D9%82%D8%AF%D9%85-%D9%BE%D9%86%D8%AC%D9%85-regehw9odr8y  https://virgool.io/@saeedheydari/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-golang-%D9%82%D8%AF%D9%85-%D8%B4%D8%B4%D9%85-k6cpaqgybxz2  https://virgool.io/@saeedheydari/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-golang-%D9%82%D8%AF%D9%85-%D9%87%D9%81%D8%AA%D9%85-jf9cn4h6fgri  https://virgool.io/@saeedheydari/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-golang-%D9%82%D8%AF%D9%85-%D9%87%D9%81%D8%AA%D9%85-%D9%85%D8%AA%D8%BA%DB%8C%D8%B1%D9%87%D8%A7-%D9%88-constant-oqvlbp5q2hg6 </description>
                <category>سعید حیدری</category>
                <author>سعید حیدری</author>
                <pubDate>Sun, 15 Jan 2023 15:16:57 +0330</pubDate>
            </item>
                    <item>
                <title>آموزش golang - قدم هشتم: متغیرها و constant</title>
                <link>https://virgool.io/@saeedheydari/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-golang-%D9%82%D8%AF%D9%85-%D9%87%D9%81%D8%AA%D9%85-%D9%85%D8%AA%D8%BA%DB%8C%D8%B1%D9%87%D8%A7-%D9%88-constant-oqvlbp5q2hg6</link>
                <description>سلام دوستاندر جلسات قبلی مفهوم متغیر رو توضیح دادم، حالا می خوام درمورد انواع روش های تعریف متغیر و constant (ثابت) توضیح بدم.تعریف متغیردر گو، می تونید از کلمه ی کلیدی var برای تعریف متغیر استفاده کنید.package main
import &amp;quotfmt&amp;quot
func main() {
	var s string = &amp;quotHello World&amp;quot
	fmt.Println(s)
}همچنین می تونید ابتدا متغیر رو تعریف و سپس به اون مقدار بدید.package main
import &amp;quotfmt&amp;quot
func main() {
	var s string
        s := &amp;quotHello World&amp;quot
	fmt.Println(s)
}همچنین می تونید متغیر رو خارج از بدنه ی تابع و به صورت عمومی تعریف کنید:package main
import &amp;quotfmt&amp;quot
var s string = &amp;quotHello World&amp;quot
func main() {
	fmt.Println(s)
}همچنین می تونید چندین متغیر رو توی یه خط تعریف کنید:package main
import &amp;quotfmt&amp;quot
func main() {
	var d, e, f = &amp;quotworld&amp;quot, 13, 24
	fmt.Println(d, e, f)
}اگه به متغیر مقدار ندید، با توجه به تایپی که داره مقدار پیشفرض میگیره مثلا برای رشته مقدار &quot;&quot; می گیره.تعریف متغیر به صورت مختصردر این روش بدون ذکر نوع متغیر و بدون استفاده از کلمه ی کلیدی var متغیر رو تعریف می کنیم و در همون هنگام بهش مقدار هم میدیم.این نوع تعریف متغیر فقط داخل تابع امکان پذیره و دسترسی به اون متغیر رو محدود به تابع می کنه.package main
import &amp;quotfmt&amp;quot
func main() {
	s := &amp;quotHello World&amp;quot
	fmt.Println(s)
}مقدار ثابت (constant)مقدار ثابت (constant) مثل متغیر ها ولی با کلید واژه const تعریف میشن. تفاوتی که constant ها با سایر متغیرها داره اینه که در طول اجرای کد مقدار اون ها غیرقابل تغییر هست و این تضمین را به شما می کنن هیچ چیزی در طول اجرا باعث تغییر مقدار constant نمیشه و اگه در جایی مقدار اون رو تغییر بدید هنگام کامپایل ارور میده.package main
import &amp;quotfmt&amp;quot
func main() {
	const s string = &amp;quotworld&amp;quot
	fmt.Println(s)
}تو گو می تونید بدون تعریف نوع یه مقدار ثابت تعریف کنید:package main
import &amp;quotfmt&amp;quot
func main() {
        const s = &amp;quotworld&amp;quot
        fmt.Println(s)
}استفاده از iota در constantشناسه iota برای ایجاد اعداد auto increment (اعداد افزایشی) و فقط با constant قابل استفاده است. تایپ پیشفرض iota از نوع int و مقدار پیشفرض اون برابر صفر هست.ایجاد auto increment بدون iotaconst (
    a = 0
    b = 1
    c = 2
)ایجاد auto increment با iotaconst (
    a = iota // 0
    b // 1
    c // 2
)نحوه ایجاد enumمتغیرهای enum یه لیست ترتیبی هستن و یه جورایی برای دسته بندی یه نوع خاص و دادن اسامی مورد نظر به اون ها به کار میرن. مثلا میشه اسامی ماه های سال رو به صورت یه enum تعریف کرد و ازشون استفاده کرد.package main
import &amp;quotfmt&amp;quot
type Month uint8
const (
	farvardin Month = iota
	ordibehesht
	khordad
	tir
        mordad
        shahrivar
        mehr
        aban
       azar
       day
       bahman
       esfand
)
func main() {
	fmt.Println(bahman)
	fmt.Println(aban)
	fmt.Println(mordad)
	fmt.Println(farvardin)
}نادیده گرفتن مقدار اول iotaوقتی که داریم از iota استفاده می‌کنیم شاید هنگام استفاده از auto increament نیاز باشد مقدار اول را نادیده بگیریم. برای اینکار می‌تونیم از _ استفاده کنیمconst (
    _ = iota // ignore
    a // 1
    b // 2
    c // 3
)توجه داشته باشید اصولا اسم constant ها را با حروف بزرگ و خارج از function تعریف می‌کنن.تعریف constant ها با حروف بزرگ باعث میشه راحت تر اونا تشخیص بدیم.از آنجایی که constant ها فقط امکان read یا همان خواندن رو دارن ممکنه در قسمت های مختلف از اون ها استفاده بشه.به دلیل اینکه با هر بار فراخوانی function مانع از مقدار دهی دوباره ی کامپایلر به constant ها بشیم بهتره اون ها را خارج از تابع تعریف کنیم. https://virgool.io/@saeedheydari/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D9%85%D9%82%D8%AF%D9%85%D8%A7%D8%AA%DB%8C-golang-%D9%82%D8%AF%D9%85-%D8%B5%D9%81%D8%B1-ufv22zb4j3bq  https://virgool.io/@saeedheydari/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D9%85%D9%82%D8%AF%D9%85%D8%A7%D8%AA%DB%8C-golang-%D8%A8%D8%AE%D8%B4-%D8%AF%D9%88%D9%85-wyvs1idjyan2  https://virgool.io/@saeedheydari/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-golang-%D9%82%D8%AF%D9%85-%D8%B3%D9%88%D9%85-e3mxmjr1mp74  https://virgool.io/@saeedheydari/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-golang-%D9%82%D8%AF%D9%85-%DA%86%D9%87%D8%A7%D8%B1%D9%85-ydltpxgtgdlj  https://virgool.io/@saeedheydari/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-golang-%D9%82%D8%AF%D9%85-%D9%BE%D9%86%D8%AC%D9%85-regehw9odr8y  https://virgool.io/@saeedheydari/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-golang-%D9%82%D8%AF%D9%85-%D8%B4%D8%B4%D9%85-k6cpaqgybxz2  https://virgool.io/@saeedheydari/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-golang-%D9%82%D8%AF%D9%85-%D9%87%D9%81%D8%AA%D9%85-jf9cn4h6fgri  https://virgool.io/@saeedheydari/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-golang-%D9%82%D8%AF%D9%85-%D9%86%D9%87%D9%85-%D8%AA%D8%A7%D8%A8%D8%B9-nat6a2yfyqe3 </description>
                <category>سعید حیدری</category>
                <author>سعید حیدری</author>
                <pubDate>Sun, 15 Jan 2023 09:09:11 +0330</pubDate>
            </item>
                    <item>
                <title>آموزش golang - قدم هفتم: عملگرها</title>
                <link>https://virgool.io/golangpub/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-golang-%D9%82%D8%AF%D9%85-%D9%87%D9%81%D8%AA%D9%85-jf9cn4h6fgri</link>
                <description>سلام دوستانتو این قسمت درمورد عملگرها تو go توضیح میدم. زبان گو هم مثل سایر زبان ها دارای یکسری عملگرها مانند: عملگرهای حسابی, عملگرهای مقایسه ای, عملگرهای منطقی و عملگرهای بیتی هست.عملگرهای حسابی:زبان گو ۵ تا عملگر حسابی داره:جمع (+)تفریق‌(-)ضرب‌(*)تقسیم (/)باقیمانده (٪)a := 1 
b := 2 
c := a + b 
// 3 
d := a - b 
// -1 
e := a * b 
// 2 
f := a / b 
// 0 
g := a % b 
// 1عملگرهای مقایسه ای:زبان گو ۶ تا عملگر مقایسه ای داره:مساوی بودن با (==)مساوی نبودن با (=!)کمتر از (&gt;)کمتر یا مساوی با (=&gt;)بزرگتر (&lt;)بزرگتر یا مساوی با (=&lt;)حاصل استفاده از این عملگرها مقدار true یا false می باشد.a := 1
 b := 2
 c := 1

a == b   // false
a &lt; b   // true
a &lt;= c   // true
c != a   // false
c != b   // trueعملگرهای منطقی:زبان گو ۳ تا عملگر منطقی داره:AND ( &amp;&amp; )OR ( || )NOT ( ! )عملگر &amp;&amp; به انگلیسی AND به فارسی &quot;و&quot;: اگر هردو عملگر true باشه مقدار بازگشتی true و در غیر اینصورت false میشه.عملگر || به انگلیسی OR به فارسی یا , اگر یکی از عملگرها true باشه مقدار بازگشتی true در غیر این صورت false میشه.عملگر ! به انگلیسی NOT به فارسی نفی: زمانیکه شما از عملگر ! استفاده می کنید معکوس نتیجه عملوند را نیاز دارید.a := true  b := true  c := false   fmt.Println(a &amp;&amp; b) //true  fmt.Println(a || b) //true  fmt.Println(!a)     //false  fmt.Println(!c)     //trueعملگرهای بیتی:زبان گو ۵ تا عملگر بیتی داره:شیفت بیتی به چپ (&gt;&gt;)شیفت بیتی به راست (&lt;&lt;)AND ( &amp; )OR ( | )XOR ( ^ )عملگر &gt;&gt; به انگلیسی Zero fill left shift یا به اختصار left shift به فارسی شیفت بیتی به چپ، مقدار باینری ما را با استفاده از انتقال یا اضافه کردن صفر ها به سمت چپ انتقال میده.عملگر &lt;&lt; به انگلیسی Zero fill right shift یا به اختصار right shift به فارسی شیفت بیتی به راست، مقدار باینری ما را با به سمت راست انتقال میده.اولویت عملگرهادر زبان گو ما یکسری اولویت ها برای عملگرها داریم و همچنین در زبان گو مثل سایر زبان ها عبارات داخل پرانتز () نسبت به سایر عبارات اولویت دارن. برای درک بهتر عملکرد عملگرها لازمه اولویت اون ها رو بشناسیم. (به ترتیب از بالا به پایین اولویت بیشتر دارن)*   /   %   &lt;&lt;  &gt;&gt;  &amp;   ^&amp;  +   -   |   ^  ==  !=  &lt;   &lt;=  &gt;   &gt;=  &amp;&amp;  ||
 https://virgool.io/@saeedheydari/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D9%85%D9%82%D8%AF%D9%85%D8%A7%D8%AA%DB%8C-golang-%D9%82%D8%AF%D9%85-%D8%B5%D9%81%D8%B1-ufv22zb4j3bq  https://virgool.io/@saeedheydari/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D9%85%D9%82%D8%AF%D9%85%D8%A7%D8%AA%DB%8C-golang-%D8%A8%D8%AE%D8%B4-%D8%AF%D9%88%D9%85-wyvs1idjyan2  https://virgool.io/@saeedheydari/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-golang-%D9%82%D8%AF%D9%85-%D8%B3%D9%88%D9%85-e3mxmjr1mp74  https://virgool.io/@saeedheydari/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-golang-%D9%82%D8%AF%D9%85-%DA%86%D9%87%D8%A7%D8%B1%D9%85-ydltpxgtgdlj  https://virgool.io/@saeedheydari/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-golang-%D9%82%D8%AF%D9%85-%D9%BE%D9%86%D8%AC%D9%85-regehw9odr8y  https://virgool.io/@saeedheydari/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-golang-%D9%82%D8%AF%D9%85-%D8%B4%D8%B4%D9%85-k6cpaqgybxz2  https://virgool.io/@saeedheydari/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-golang-%D9%82%D8%AF%D9%85-%D9%87%D9%81%D8%AA%D9%85-%D9%85%D8%AA%D8%BA%DB%8C%D8%B1%D9%87%D8%A7-%D9%88-constant-oqvlbp5q2hg6  https://virgool.io/@saeedheydari/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-golang-%D9%82%D8%AF%D9%85-%D9%86%D9%87%D9%85-%D8%AA%D8%A7%D8%A8%D8%B9-nat6a2yfyqe3 </description>
                <category>سعید حیدری</category>
                <author>سعید حیدری</author>
                <pubDate>Tue, 10 Jan 2023 00:11:49 +0330</pubDate>
            </item>
                    <item>
                <title>آموزش golang - قدم ششم: انواع داده</title>
                <link>https://virgool.io/@saeedheydari/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-golang-%D9%82%D8%AF%D9%85-%D8%B4%D8%B4%D9%85-k6cpaqgybxz2</link>
                <description>سلام دوستان، این قسمت می خوام درمورد انواع داده تو go lang توضیح بدم.همون طور که تو قسمت های قبلی گفتم go lang یه زبان برنامه نویسی static type هست. برای همین باید به نوع داده های موجود و کاربرد هر کدوم مسلط باشیم. انواع داده:نوع داده int:برای مقادیر عددی، مقدار پیشفرض صفر و مقدار حجم از حافظه که استفاده می کنه بسته به ۳۲ یا ۶۴ بیتی بودن سیستم عامل ۴ یا ۸ بایت هست.نوع داده int8:برای مقادیر عددی، مقدار پیشفرض صفر و برای اعداد بین ۱۲۷- تا ۱۲۷ و مقدار حجم از حافظه که استفاده می کنه ۱ بایت هست.نوع داده int16:برای مقادیر عددی، مقدار پیشفرض صفر و برای اعداد بین ۳۲۷۶۸- تا ۳۲۷۶۷ و مقدار حجم از حافظه که استفاده می کنه ۱ بایت هست.نوع داده int32:برای مقادیر عددی، مقدار پیشفرض صفر و برای اعداد بین ۲۱۴۷۴۸۳۶۴۸- تا ۲۱۴۷۴۸۳۶۴۷ و مقدار حجم از حافظه که استفاده می کنه ۱ بایت هست.نوع داده int64:برای مقادیر عددی، مقدار پیشفرض صفر و برای اعداد بین  ۹۲۲۳۳۷۲۰۳۶۸۵۴۷۷۵۸۰۸- تا ۹۲۲۳۳۷۲۰۳۶۸۵۴۷۷۵۸۰۷ و مقدار حجم از حافظه که استفاده می کنه ۱ بایت هست.نوع داده uint:برای مقادیر عددی نامنفی (صفر و مثبت)، مقدار پیشفرض صفر و مقدار حجم از حافظه که استفاده می کنه بسته به ۳۲ یا ۶۴ بیتی بودن سیستم عامل ۴ یا ۸ بایت هست.نوع داده uint8:برای مقادیر عددی نامنفی، مقدار پیشفرض صفر و برای اعداد بین ۰ تا ۲۵۶ و مقدار حجم از حافظه که استفاده می کنه ۱ بایت هست.نوع داده uint16:برای مقادیر عددی نامنفی، مقدار پیشفرض صفر و برای اعداد بین ۰ تا ۶۵۵۳۵ و مقدار حجم از حافظه که استفاده می کنه ۲ بایت هست.نوع داده uint32:برای مقادیر عددی نامنفی، مقدار پیشفرض صفر و برای اعداد بین ۰ تا ۶۲۹۴۹۶۷۲۹۵ و مقدار حجم از حافظه که استفاده می کنه ۴ بایت هست.نوع داده uint64:برای مقادیر عددی نامنفی، مقدار پیشفرض صفر و برای اعداد بین ۰ تا ۱۸۴۴۶۷۴۴۰۷۳۷۰۹۵۵۱۶۱۵ و مقدار حجم از حافظه که استفاده می کنه ۸ بایت هست.نوع داده uintptr:برای مقادیر عددی نامنفی خیلی بزرگ، مقدار پیشفرض صفر و مقدار حجم از حافظه که استفاده می کنه ۸ بایت هست.نوع داده float32:برای مقادیر عددی، مقدار پیشفرض صفر و برای اعداد IEEE-754 و مقدار حجم از حافظه که استفاده می کنه ۴ بایت هست.نوع داده float64:برای مقادیر عددی، مقدار پیشفرض صفر و برای اعداد IEEE-754 و مقدار حجم از حافظه که استفاده می کنه 8 بایت هست.نوع داده complex64:برای مقادیر عددی مختلط و مقدار حجم از حافظه که استفاده می کنه ۸ بایت هست.نوع داده complex128:برای مقادیر عددی مختلط و مقدار حجم از حافظه که استفاده می کنه ۱۶ بایت هست.نوع داده bool:برای مقادیر منطقی (صحیح و غلط)، مقدار پیشفرض false و مقادیر قابل قبول true, false و مقدار حجم از حافظه که استفاده می کنه ۱ بایت هست.نوع داده string:برای مقادیر رشته ای (مثل اسم و ...)، مقدار پیشفرض &quot;&quot; (رشته ی خالی) و مقدار حجم از حافظه که استفاده می کنه ۸ بایت هست.نوع داده byte:این نوع داده نام مستعار برای uint8 می باشد.نوع داده rune:این نوع داده نام مستعار برای int32 می باشد.سفارشی سازی نوع داده هانام گذاری جدید:برای نوع داده رشته‌ای، عددی و بول، می‌توان نام سفارشی جدید انتخاب و در پروژه استفاده کرد:/* type alias */
// boolean and bool define same type
  type boolean = bool

// content and string define same type
type content = string

// UI8 and uint8 define same type
type UI8 = uint8ایجاد نوع داده معادل:برای نوع داده های موجود می توان یک نمونه جدید ایجاد کرد:type state bool

type ID uint8 https://virgool.io/@saeedheydari/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D9%85%D9%82%D8%AF%D9%85%D8%A7%D8%AA%DB%8C-golang-%D9%82%D8%AF%D9%85-%D8%B5%D9%81%D8%B1-ufv22zb4j3bq  https://virgool.io/@saeedheydari/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D9%85%D9%82%D8%AF%D9%85%D8%A7%D8%AA%DB%8C-golang-%D8%A8%D8%AE%D8%B4-%D8%AF%D9%88%D9%85-wyvs1idjyan2  https://virgool.io/@saeedheydari/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-golang-%D9%82%D8%AF%D9%85-%D8%B3%D9%88%D9%85-e3mxmjr1mp74  https://virgool.io/@saeedheydari/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-golang-%D9%82%D8%AF%D9%85-%DA%86%D9%87%D8%A7%D8%B1%D9%85-ydltpxgtgdlj  https://virgool.io/@saeedheydari/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-golang-%D9%82%D8%AF%D9%85-%D9%BE%D9%86%D8%AC%D9%85-regehw9odr8y  https://virgool.io/@saeedheydari/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-golang-%D9%82%D8%AF%D9%85-%D8%B4%D8%B4%D9%85-k6cpaqgybxz2  https://virgool.io/@saeedheydari/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-golang-%D9%82%D8%AF%D9%85-%D9%87%D9%81%D8%AA%D9%85-jf9cn4h6fgri  https://virgool.io/@saeedheydari/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-golang-%D9%82%D8%AF%D9%85-%D9%87%D9%81%D8%AA%D9%85-%D9%85%D8%AA%D8%BA%DB%8C%D8%B1%D9%87%D8%A7-%D9%88-constant-oqvlbp5q2hg6  https://virgool.io/@saeedheydari/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-golang-%D9%82%D8%AF%D9%85-%D9%86%D9%87%D9%85-%D8%AA%D8%A7%D8%A8%D8%B9-nat6a2yfyqe3 </description>
                <category>سعید حیدری</category>
                <author>سعید حیدری</author>
                <pubDate>Mon, 09 Jan 2023 12:49:23 +0330</pubDate>
            </item>
                    <item>
                <title>آموزش golang - قدم پنجم: متغیرها</title>
                <link>https://virgool.io/@saeedheydari/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-golang-%D9%82%D8%AF%D9%85-%D9%BE%D9%86%D8%AC%D9%85-regehw9odr8y</link>
                <description>سلام دوستان، من برگشتمتو بخش قبلی درمورد کلمات کلیدی و شناسه ها صحبت کردیم. تو این بخش می خوایم درمورد متغیرها، نحوه ی تعریف اون ها و انواع داده یاد بگیریم.متغیر چیه؟برای درک متغیرها اول باید با ساختار کامپیوتر و حافظه ی اون آشنا بشید. کامپیوترها همه چی رو مثل ما تو حافظه نگه می دارن با این تفاوت که حافظه ی اونا به بخش های کوچکی تقسیم بندی شده که به ترتیب شماره گذاری شدن. به خاطر سپاری این شماره ها برا ما غیرممکنه و از طرفی کامپیوتر داده هایی که بهش میدیم رو تو خونه هایی که خالی هستن قرار میده برای همین اینکه بدونیم متغیر ما در هر لحظه تو کدوم خونه است خیلی سخته. به همین دلیل به هر بخش از حافظه که می خوایم اطلاعاتمون رو توش ذخیره کنیم یه اسم اختصاص میدیم که بهش متغیر گفته میشه. برای درک بهتر این طوری در نظر بگیرید که هر خونه توی شهر یه آدرس پستی داره ولی شما وقتی می خواید به خونه ی عموتون اشاره کنید نمی گید خونه ای که فلان آدرس پستی رو داره بلکه میگید خونه عموم و اعضای خانواده متوجه میشن. این اسم گذاری میشه همون مفهوم متغیر.تایپیک تایپ مشخص کننده نوع داده است، که به کامپایلر می‌گه قراره چه نوع داده ای داخل یک متغیر ذخیره بشه. زبان ها انواع تایپ های مختلفی به صورت پیشفرض دارند که می تونیم از اون ها داخل برنامه استفاده کنیم. تایپ ها به دو دسته تقسیم میشن:اونایی که Static Type هستن مثل C, Cpp , Java و ... . در این دسته که golang هم تو این دسته بندی قرار داده ما باید نوع متغیرمون رو مشخص کنیم و اون متغیر فقط همون نوع داده رو قبول می کنه. مثلا برای اسم باید نوع متغیر ما رشته ای (string) باشه و فقط اجازه داره رشته قبول کنه و اگه بهش مقدار ۱۰ بدیم ارور میده.دسته ی دوم Dynamic Type هستن مثل Python, Js و ... . در این دسته نیازی به مشخص کردن نوع داده نیست و نوع متغیر براساس مقداری که داره مشخص میشه. مثلا ممکنه اولش مقدار ۱۰ داشته باشه که نوعش میشه عددی، و کمی بعدتر بهش مقدار &quot;saeed&quot; رو بدیم که نوعش میشه رشته.نحوه ی تعریف متغیربرای تعریف متغیر تو گو ما دو راه داریم یکی تعریف صریح اون:var age intیا تعریف اون با مقدار دهی:age := 10زبان گو از هر دو روش پشتیبانی داره. اینم اضافه کنم که برای اسامی متغیرها باید از شناسه های معتبر استفاده کنید.اگه دقت کنید تو تعریف صریح ما از کلمه ی var استفاده کردیم. تو این روش ساختار تعریف ما به این شکلهvar variable_name variable_typeتو این روش متغیر ما یه مقدار پیشفرض میگیره که در ادامه توضیح میدم. تعیین تایپ متغیر هم الزامیه.تو روش غیر صریح که به شکل زیر هست، نوع داده توسط خود کامپایلر و براساس مقداری که بهش داریدم تشخیص داده میشه و نیازی نیست که تایپ رو مشخص کنیم.variable_name := valueبرای اینکه بهتر بتونیم با متغیرها کار کنیم بهتره انواع داده و مقادیر پیشفرض اون ها رو تو golang رو بدونیم. تو قسمت بعدی درمورد انواع داده و مقادیر پیشفرض اون ها توضیح میدم. بدرود! https://virgool.io/@saeedheydari/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D9%85%D9%82%D8%AF%D9%85%D8%A7%D8%AA%DB%8C-golang-%D9%82%D8%AF%D9%85-%D8%B5%D9%81%D8%B1-ufv22zb4j3bq  https://virgool.io/@saeedheydari/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D9%85%D9%82%D8%AF%D9%85%D8%A7%D8%AA%DB%8C-golang-%D8%A8%D8%AE%D8%B4-%D8%AF%D9%88%D9%85-wyvs1idjyan2  https://virgool.io/@saeedheydari/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-golang-%D9%82%D8%AF%D9%85-%D8%B3%D9%88%D9%85-e3mxmjr1mp74  https://virgool.io/@saeedheydari/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-golang-%D9%82%D8%AF%D9%85-%DA%86%D9%87%D8%A7%D8%B1%D9%85-ydltpxgtgdlj  https://virgool.io/@saeedheydari/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-golang-%D9%82%D8%AF%D9%85-%D8%B4%D8%B4%D9%85-k6cpaqgybxz2  https://virgool.io/@saeedheydari/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-golang-%D9%82%D8%AF%D9%85-%D9%87%D9%81%D8%AA%D9%85-jf9cn4h6fgri  https://virgool.io/@saeedheydari/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-golang-%D9%82%D8%AF%D9%85-%D9%87%D9%81%D8%AA%D9%85-%D9%85%D8%AA%D8%BA%DB%8C%D8%B1%D9%87%D8%A7-%D9%88-constant-oqvlbp5q2hg6  https://virgool.io/@saeedheydari/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-golang-%D9%82%D8%AF%D9%85-%D9%86%D9%87%D9%85-%D8%AA%D8%A7%D8%A8%D8%B9-nat6a2yfyqe3 </description>
                <category>سعید حیدری</category>
                <author>سعید حیدری</author>
                <pubDate>Sun, 08 Jan 2023 10:24:29 +0330</pubDate>
            </item>
                    <item>
                <title>آموزش golang - قدم چهارم: کلمات کلیدی و شناسه ها</title>
                <link>https://virgool.io/@saeedheydari/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-golang-%D9%82%D8%AF%D9%85-%DA%86%D9%87%D8%A7%D8%B1%D9%85-ydltpxgtgdlj</link>
                <description>سلام دوستان عزیز من با قدم چهارم برگشتم.این بخش می خوایم درمورد کلمات کلیدی، شناسه ها صحبت کنیم.کلمات کلیدیزبان گو تا نسخه ی فعلی (۱.۱۹)، ۲۵ کلمه ی کلیدی داره که لیستش کردم.break    case    chan    const    continue    default    defer    else    fallthrough    for    func   go    goto    if    import    interface    map    package    range    return    select    struct    switch    type    varهمون طور که میبیند تعداد کلمات کلیدی گو نسبت به زبان هایی مثل Java یا C# خیلی کمتره و همین باعث یادگیری ساده تر اون شده. البته نبود برخی موارد که باعث کاهش پیچیدگی شده ممکنه باعث بشه برای کار مشابه کد بیشتری لازم باشه بزنید.این کلمات کلیدی به ۴ دسته کلی تقسیم بندی میشن:کلمات کلیدی که بصورت گلوبال در بدنه قرار می‌گیرن «package, import, type, var, const, func»کلمات کلیدی کامپوزیت «struct, inteface, map, chan»کلمات کلیدی که در کنترل جریان کد استفاده می‌شون «break, case, continue, default, if, else, for, fallthrough, goto, range, return, switch, select»به مرور سعی می کنم این موارد رو بیشتر توضیح بدم. شناسه هاشناسه ها برای نامگذاری استفاده می شن و یه سری قواعد کلی دارن که باید رعایت کنید تا کد خطا نده و یه سری اصول قراردادی هم برای استفاده از اون ها هست که بین برنامه نویسان هر زبان رایجه مثل نحوه ی اسم گذاری متغیرها، توابع و متودها و ...تعریف شناسه رو این طوری میشه گفت: شناسه توکنی هست که باید از حروف یونیکد، ارقام و خط زیرین (_) تشکیل شده باشه.قواعد شناسه ها:برای نامگذاری باید از حروف a-z یا A-Z و یا اعداد ۰-۹ استفاده کنیدنام شناسه ها نباید با اعداد شروع بشهنام شناسه ها به حروف کوچیک و بزرگ حساس هستندنمی شه از کلمات کلیدی استفاده کنیدبرای تعداد حروف شناسه ها هیچ محدودیتی نیست ولی بهتره بین ۴ تا ۱۵ حرف باشه.//correct
_saeed
saeed
Saeed
sa33d
saeed_2311

// Incorrect 
if
default
23saeedتو زبان گو یه سری شناسه برای برخی موارد مثل نوع متغیرها (تو قسمت های بعدی درموردش می گم) یا یه سری از توابع رزرو شدن. مثل موارد زیر:int      uint      float32     bool     bytemake       new       len      delete      complexاین قسمت هم به پایان رسید. منتظر قسمت های بعدی باشید. https://virgool.io/@saeedheydari/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D9%85%D9%82%D8%AF%D9%85%D8%A7%D8%AA%DB%8C-golang-%D9%82%D8%AF%D9%85-%D8%B5%D9%81%D8%B1-ufv22zb4j3bq  https://virgool.io/@saeedheydari/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D9%85%D9%82%D8%AF%D9%85%D8%A7%D8%AA%DB%8C-golang-%D8%A8%D8%AE%D8%B4-%D8%AF%D9%88%D9%85-wyvs1idjyan2  https://virgool.io/@saeedheydari/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-golang-%D9%82%D8%AF%D9%85-%D8%B3%D9%88%D9%85-e3mxmjr1mp74  https://virgool.io/@saeedheydari/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-golang-%D9%82%D8%AF%D9%85-%D9%BE%D9%86%D8%AC%D9%85-regehw9odr8y  https://virgool.io/@saeedheydari/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-golang-%D9%82%D8%AF%D9%85-%D8%B4%D8%B4%D9%85-k6cpaqgybxz2  https://virgool.io/@saeedheydari/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-golang-%D9%82%D8%AF%D9%85-%D9%87%D9%81%D8%AA%D9%85-jf9cn4h6fgri  https://virgool.io/@saeedheydari/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-golang-%D9%82%D8%AF%D9%85-%D9%87%D9%81%D8%AA%D9%85-%D9%85%D8%AA%D8%BA%DB%8C%D8%B1%D9%87%D8%A7-%D9%88-constant-oqvlbp5q2hg6  https://virgool.io/@saeedheydari/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-golang-%D9%82%D8%AF%D9%85-%D9%86%D9%87%D9%85-%D8%AA%D8%A7%D8%A8%D8%B9-nat6a2yfyqe3 </description>
                <category>سعید حیدری</category>
                <author>سعید حیدری</author>
                <pubDate>Fri, 06 Jan 2023 00:25:17 +0330</pubDate>
            </item>
                    <item>
                <title>آموزش golang - قدم سوم: ساختار کد</title>
                <link>https://virgool.io/@saeedheydari/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-golang-%D9%82%D8%AF%D9%85-%D8%B3%D9%88%D9%85-e3mxmjr1mp74</link>
                <description>تو پست های قبلی درمورد golang و نحوه ی نصب اون توی لینوکس و ویندوز نوشتم. از این بخش به بعد می خوایم درمورد مفاهیم پایه مثل ساختار کد، متغیرها، آرایه ها و ... صحبت کنیم. ساختار کدزبان گو، سینتکس ساده و تمیزی داره که به سرعت میشه اونو یاد گرفت و کدنویسی با اون لذت خیلی زیادی داره. این سادگی و آشکار بودن مفاهیم باعث میشه توسعه ی پروژه های مقیاس بزرگ خیلی سریعتر انجام بشه.نمونه کد ساده زبان گوبیاید با برنامه ی معروف Hello World شروع کنیم.package main
import &amp;quotfmt&amp;quot
func main() {
    fmt.Println(&amp;quotHello World!&amp;quot)
}هر برنامه ی گو تعدادی فایل با پسوند go هست که کدهای بخش های مختلف داخل اون قرار داره. البته میشه کل پروژه رو تو یه فایل نوشت. ولی حتما هر فایلی باید یه قسمت به نام package که باعث جداسازی و پکیج بندی کد میشه داشته باشه مثل name space ها تو زباد c++.تو زبان go اسم پکیج main به عنوان یه پکیج منحصر به فرد و پکیج اصلی برنامه در نظر گرفته میشه. شروع برنامه ما از این پکیج شروع میشه. این فایل باید یه تابع به اسم main داشته باشه که برنامه از این تابع شروع به کار می کنه. این تابع هیچ آرگومانی (ورودی تابع) نمیگیره و هیچ خروجی برنمی گردونه.اگه داخل این تابع رو ببینید ما این دستور رو نوشتیم که متن Hello World! رو توی خروجی چاپ می کنه.اگه خط دوم رو دقت کنید کلمه ی import و بعدش &quot;fmt&quot; رو می بینید. fmt یه پکیج go هست که من با import کردن اون از تابع Println داخل اون دارم استفاده می کنم. کاربرد import شبیه کاربرد include تو زبان  c++ هست یا import توی پایتون هست.اجرای کدکدهای بالا رو توی یه فایل با اسم دلخواه و پسوند go مثل example.go ذخیره کنید. بعد دستور زیر رو توی ترمینال تو پوشه ای که فایل رو ذخیره کردید اجرا کنید.go run example.goخروجی باید این شکلی باشه:Hello World!این قسمت هم تموم شد. تو قسمت بعدی بیشتر درمورد کلمات کلیدی و نحوه ی تعریف متغیر و انواع صحبت می کنم.  https://virgool.io/@saeedheydari/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D9%85%D9%82%D8%AF%D9%85%D8%A7%D8%AA%DB%8C-golang-%D9%82%D8%AF%D9%85-%D8%B5%D9%81%D8%B1-ufv22zb4j3bq  https://virgool.io/@saeedheydari/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D9%85%D9%82%D8%AF%D9%85%D8%A7%D8%AA%DB%8C-golang-%D8%A8%D8%AE%D8%B4-%D8%AF%D9%88%D9%85-wyvs1idjyan2  https://virgool.io/@saeedheydari/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-golang-%D9%82%D8%AF%D9%85-%DA%86%D9%87%D8%A7%D8%B1%D9%85-ydltpxgtgdlj  https://virgool.io/@saeedheydari/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-golang-%D9%82%D8%AF%D9%85-%D9%BE%D9%86%D8%AC%D9%85-regehw9odr8y  https://virgool.io/@saeedheydari/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-golang-%D9%82%D8%AF%D9%85-%D8%B4%D8%B4%D9%85-k6cpaqgybxz2  https://virgool.io/@saeedheydari/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-golang-%D9%82%D8%AF%D9%85-%D9%87%D9%81%D8%AA%D9%85-jf9cn4h6fgri  https://virgool.io/@saeedheydari/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-golang-%D9%82%D8%AF%D9%85-%D9%87%D9%81%D8%AA%D9%85-%D9%85%D8%AA%D8%BA%DB%8C%D8%B1%D9%87%D8%A7-%D9%88-constant-oqvlbp5q2hg6  https://virgool.io/@saeedheydari/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-golang-%D9%82%D8%AF%D9%85-%D9%86%D9%87%D9%85-%D8%AA%D8%A7%D8%A8%D8%B9-nat6a2yfyqe3 </description>
                <category>سعید حیدری</category>
                <author>سعید حیدری</author>
                <pubDate>Wed, 04 Jan 2023 23:34:22 +0330</pubDate>
            </item>
                    <item>
                <title>آموزش golang - قدم دوم</title>
                <link>https://virgool.io/@saeedheydari/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D9%85%D9%82%D8%AF%D9%85%D8%A7%D8%AA%DB%8C-golang-%D8%A8%D8%AE%D8%B4-%D8%AF%D9%88%D9%85-wyvs1idjyan2</link>
                <description>تو این قسمت با نحوه ی نصب go توی سیستم عامل های ویندوز و لینوکس آشنا میشیمنصب در ویندوزبرای نصب در ویندوز لازمه اول نسخه ی مورد نظرتون رو از سایت دریافت کنید. برای دانلود می تونید به این لینک مراجعه کنید.(تو این سری آموزشی من از نسخه ی 1.18.7 می خوام استفاده کنم)تو مرحله ی بعدی فایلی که دانلود کردید رو اجرا کنید تا فرایند نصب شروع بشه.‌ مراحل نصب رو به صورت پیشفرض ادامه بدید تا نصب تکمیل بشه.برای اطمینان از اینکه درست نصب شده لازمه مورد زیر رو بررسی کنید:ابتدا CMD رو باز کنید برای این کار می تونید تو استارت cmd رو سرچ کنیدبعدش این دستور رو داخل خط فرمان (CMD) بزنید.go versionاگه دستور رو اجرا کرد و خروجی مشابه زیر بود یعنی درست نصب شده (من رو لینوکس هستم برای شما به جای لینوکس می نویسه ویندوز)go version go1.18.7 linux/amd64نصب در لینوکسبرای نصب تو لینوکس اول نسخه ی مناسب رو از این لینک دانلود کنید. با این دستور هم می تونید دانلودش کنید البته حواستون به نسخه اش باشه$ wget -c https://go.dev/dl/go1.18.7.linux-amd64.tar.gzبعدش این دستور رو بزنید تا اگه نسخه ای قبلا وجود داشت پاک بشه (بازم بگم که حواستون به نسخه ی گو باشه)$ sudo rm -rf /usr/local/go &amp;&amp; sudo tar -C /usr/local -xzf go1.18.7.linux-amd64.tar.gzبا این کار نسخه ی دانلودی شما تو مسیر usr/local/go/ نصب میشه.تو قدم بعدی لازمه محل فایل اجرایی گو یعنی usr/local/go/bin/ v رو به متغیرهای محیطی اضافه کنید (منظورم همون PATH سیستم عامله) تا بتونید توی ترمینال خودتون ازش استفاده کنید.export PATH=$PATH:/usr/local/go/binبرای اینکه هربار لازم نباشه این دستور رو توی ترمینال بزنید بهتره اونو به home/{user}/.profile/ اضافه کنیدحالا توی ترمینال این دستور رو بزنید تا مطمئن بشید که نصب درست انجام شدهgo versionاین بخش هم به پایان رسید امیدوارم که مفید باشهمنتظر بخش های بعدی و مطالب جدید هم باشید https://virgool.io/@saeedheydari/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D9%85%D9%82%D8%AF%D9%85%D8%A7%D8%AA%DB%8C-golang-%D9%82%D8%AF%D9%85-%D8%B5%D9%81%D8%B1-ufv22zb4j3bq  https://virgool.io/@saeedheydari/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-golang-%D9%82%D8%AF%D9%85-%D8%B3%D9%88%D9%85-e3mxmjr1mp74  https://virgool.io/@saeedheydari/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-golang-%D9%82%D8%AF%D9%85-%DA%86%D9%87%D8%A7%D8%B1%D9%85-ydltpxgtgdlj  https://virgool.io/@saeedheydari/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-golang-%D9%82%D8%AF%D9%85-%D9%BE%D9%86%D8%AC%D9%85-regehw9odr8y  https://virgool.io/@saeedheydari/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-golang-%D9%82%D8%AF%D9%85-%D8%B4%D8%B4%D9%85-k6cpaqgybxz2  https://virgool.io/@saeedheydari/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-golang-%D9%82%D8%AF%D9%85-%D9%87%D9%81%D8%AA%D9%85-jf9cn4h6fgri  https://virgool.io/@saeedheydari/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-golang-%D9%82%D8%AF%D9%85-%D9%87%D9%81%D8%AA%D9%85-%D9%85%D8%AA%D8%BA%DB%8C%D8%B1%D9%87%D8%A7-%D9%88-constant-oqvlbp5q2hg6  https://virgool.io/@saeedheydari/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-golang-%D9%82%D8%AF%D9%85-%D9%86%D9%87%D9%85-%D8%AA%D8%A7%D8%A8%D8%B9-nat6a2yfyqe3 </description>
                <category>سعید حیدری</category>
                <author>سعید حیدری</author>
                <pubDate>Wed, 04 Jan 2023 01:25:36 +0330</pubDate>
            </item>
                    <item>
                <title>آموزش golang – قدم اول:‌ گو چیه؟</title>
                <link>https://virgool.io/@saeedheydari/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D9%85%D9%82%D8%AF%D9%85%D8%A7%D8%AA%DB%8C-golang-%D9%82%D8%AF%D9%85-%D8%B5%D9%81%D8%B1-ufv22zb4j3bq</link>
                <description>سلام دنیا! من برگشتم!بالاخره بعد از ماه ها، سرم کمی خلوت شده. برای همین تصمیم گرفتم یه آموزش مقدماتی برای golang داشته باشم.تو این سری آموزشی، قراره از صفر صفر golang رو یاد بگیریم و در نهایت یه پروژه ی ساده در حد یه مشاور املاک داشته باشیم.شاید با خودتون بپرسید چرا golang؟ به دلایل زیر:۱. Go سریع استGo یک زبان واقعا سریعه. از اونجایی که Go به کد ماشین کامپایل میشه، به طور طبیعی اجرای اون از زبان‌هایی که تفسیر می‌شن یا دارای محیط اجرای مجازی هستن، سریعتره. برنامه‌های Go بسیار سریع کامپایل می‌شن و نتایج باینری اون بسیار سبک هستن.۲. یادگیری آسانسینتکس Go در مقایسه با بقیه ی زبان‌ها ساده تره و یادگیری اون ساده است. شما می‌تونید بیشتر مطالب اون رو خیلی سریع یاد بگیرید و تو حافظه تون داشته باشید. از طرفی سینتکس خیلی شفاف و خوانایی داره. اگه قبلا c یا زبان مشابهی کار کردید، یادگیری go برای شما خیلی ساده تره.۳. یک زبان Static Typing استGo یک زبان قوی و statically typed هست. نوع‌های اصلی (primitive) مثل int، byte و string تو اون وجود دارن. همچنین با داشتن structها می تونید نوع های پیشرفته تری متناسب با نیاز پروژه تون بسازید. Go همچنین نوع های از پیش ساخته شده برای listها و mapها داره و استفاده از اون ها ساده است.۴. انواع اینترفیسGo از اینترفیس‌ها را پشتیبانی می کنه و هر struct می‌تونه به سادگی متدهای اینترفیس را پیاده‌سازی و از اون استفاده کنه. این امر به شما اجازه می‌ده وابستگی‌ها رو در کد خودتون جدا کنید و خیلی راحت وابستگی‌ها را در تست‌های خودتون بررسی کنید. با استفاده از اینترفیس می‌تونید کدهای ماژولارتر و قابل تست بنویسید. Go همچنین دارای توابع first-class هست که امکان نوشتن کد های کارآمدتری رو فراهم می‌کنه.۵. مدل Concurrency (هم‌زمانی) آسان‌تراین چیزیه که واقعا من عاشقش هستم. هرچند برنامه‌نویسی هم‌زمان به هیچ وجه ساده نیست، Go اون را نسبت به سایر زبان‌ها آسان تر‌ کرده. برای این کار کافیه ،goroutine را فراخوانی کنید و از طریق channel با اون ارتباط برقرار کنید.به دلایل بالا چندین دلیل دیگه اضافه کنید! من که عاشق golang شدم. کدنویسی باهاش خیلی حس خوبی میده. پس شما هم با من همراه بشید تا یه سفر جذاب به دنیای golang داشته باشم!تو این سفر قراره ما به دنیای golang سفر کنیم و موارد زیر رو کشف و درک کنیم و با هم یاد بگیریم.نصب golang در سیستم عامل های ویندوز و لینوکسساختار برنامه در golang نوشتن اولین برنامه (Hello World معروف!)متغیرها و انواع دادهبررسی عملگرها و کنترلرهابررسی آرایه ها و اسلایس هاکار با رشته هاپوینترهامتودها ایجاد یک برنامه تحت وب سادهبرای دیدن بقیه ی نوشته های من می تونید به سایت من بیاید :)لیست نوشته های این دوره: https://virgool.io/@saeedheydari/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D9%85%D9%82%D8%AF%D9%85%D8%A7%D8%AA%DB%8C-golang-%D8%A8%D8%AE%D8%B4-%D8%AF%D9%88%D9%85-wyvs1idjyan2  https://virgool.io/@saeedheydari/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-golang-%D9%82%D8%AF%D9%85-%D8%B3%D9%88%D9%85-e3mxmjr1mp74  https://virgool.io/@saeedheydari/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-golang-%D9%82%D8%AF%D9%85-%DA%86%D9%87%D8%A7%D8%B1%D9%85-ydltpxgtgdlj  https://virgool.io/@saeedheydari/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-golang-%D9%82%D8%AF%D9%85-%D9%BE%D9%86%D8%AC%D9%85-regehw9odr8y  https://virgool.io/@saeedheydari/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-golang-%D9%82%D8%AF%D9%85-%D8%B4%D8%B4%D9%85-k6cpaqgybxz2  https://virgool.io/@saeedheydari/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-golang-%D9%82%D8%AF%D9%85-%D9%87%D9%81%D8%AA%D9%85-jf9cn4h6fgri  https://virgool.io/@saeedheydari/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-golang-%D9%82%D8%AF%D9%85-%D9%87%D9%81%D8%AA%D9%85-%D9%85%D8%AA%D8%BA%DB%8C%D8%B1%D9%87%D8%A7-%D9%88-constant-oqvlbp5q2hg6  https://virgool.io/@saeedheydari/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-golang-%D9%82%D8%AF%D9%85-%D9%86%D9%87%D9%85-%D8%AA%D8%A7%D8%A8%D8%B9-nat6a2yfyqe3 </description>
                <category>سعید حیدری</category>
                <author>سعید حیدری</author>
                <pubDate>Sat, 08 Jan 2022 20:08:11 +0330</pubDate>
            </item>
                    <item>
                <title>آمار بازدید پست‌های من در سال ۹۹</title>
                <link>https://virgool.io/@saeedheydari/%D8%A2%D9%85%D8%A7%D8%B1-%D8%A8%D8%A7%D8%B2%D8%AF%DB%8C%D8%AF-%D9%BE%D8%B3%D8%AA-%D9%87%D8%A7%DB%8C-%D9%85%D9%86-%D8%AF%D8%B1-%D8%B3%D8%A7%D9%84-%DB%B9%DB%B9-hnls1tuwgpik</link>
                <description>در طول تاریخ از اعداد استفاده کردیم تا اغلب داد و ستد کنیم و آن‌چیزی که شمردنی است را بشماریم. برای هر عدد واحد درست کردیم تا عددهای زندگی قاطی نشوند و از اعداد، شفاف‌تر استفاده کنیم؛ مثلا وقتی می‌گوییم ده هزار تومان به پول اشاره داریم و وقتی می‌گوییم ده هزار بلیط به بلیط!روز به روز که در زندگی جلو‌تر رفتیم عددها فرقی نکردند ولی این واحدها بودند که زیاد شدند. واحد کریپتو، واحد اصله درخت، واحد فاصله و …«واحد» یک توافق عمومی است برای شمردن؛ تا همانطور که گفتم شمردن‌ها قاطی نشود. مشاهده افراد دارای ثروت (اجتماعی یا مالی) به من ثابت کرده اینکه چه چیزی را بشماریم از اینکه چطور بشماریم مهم‌تر است. هرکس با واحد خاصی مسائل زندگی را می‌شمارد. اینطور به نظرم آمده که مشخص کردن واحد یعنی مشخص کردن اینکه من در زندگی برای چه چیزهایی ارزش قائلم و می‌خواهم چه چیزهایی را در زندگی بشمارم. https://cdn.virgool.io/annual-report/1399/qsslorjjb8yw-HEJUv.mp4 اعدادی که بدون واحد ثبت کردمبه ویدیویی که ویرگول برایم ساخته که نگاه می‌کنم میبینم که در سال ۹۹، من در مجموع ۱,۱۰۱ کلمه در ویرگول نوشتم و منتشر کردم و مخاطبین، پست‌های من را ۲۰ مرتبه پسندیدند و  ۸ بار هم نظر خود را روی پست‌های من به اشتراک گذاشتند. در سال ۹۹، ۲۹ نفر در ویرگول من را دنبال کردند تا پست‌های بعدیم را بخوانند. این اعداد نشان میدهند من کاری کرده‌ام. هرکدام به واحدی وصل هستند. از خودم می‌پرسم من کدام واحد را شمارش کرده‌ام؟ کدامیک از واحدهای بالا از همه برای من مهم‌تر است؟ ادامه ویدیو را می‌بینم.آمار از اثر بیرونی می‌گویندطبق آمار پست‌های من ۲,۵۰۴ بار خوانده شدند و ۴۹۲,۰۵۷ ثانیه صرف مطالعه آنها شده است، که با توجه به جمعیتی که در ایران به اینترنت دسترسی دارند، ویرگول به من می‌گوید که توانستم  ۰/۰۰۶۷۴۶۰۵۲ ثانیه، سرانه مطالعه دیجیتال کشور را بالا ببرم.از طرف دیگر ویرگول به من می‌گوید که اگر قرار بود پست‌هایم را چاپ و به دست تک تک خوانندگان برسانم باید ۷,۰۹۱ کاغذ مصرف می‌کردم.آن عددهای کوچک ابتدای ویدیو حالا تبدیل شده‌اند به عددهای بزرگ به اینکه من جلوی مصرف این تعداد کاغذ را گرفتم یا به اینکه من  ۰/۰۰۶۷۴۶۰۵۲ ثانیه، سرانه مطالعه دیجیتال کشور را جابه جا کرده‌ام. واحد این عددها برای من ملموس‌تر است.واحد نوشتن چیست؟همه عددهای بالا و همینطور اثر بیرونی که روی خوانندگان و همینطور در مقیاس بزرگتر طبیعت و جامعه اطرافم گذاشتم اعدادی هستند که من دوستشان دارم و به آنها افتخار می‌کنم. اگر چنین ویدیویی دست شما نیز رسید به شما بابت تک تک اعداد تبریک می‌گویم.اثر هر نوشته تا حدودی معلوم است، اگر بنویسید جلوی قطع درخت را می‌گیرید، به سرانه مطالعه کشور اضافه می‌کنید و خوانندگانی جذب می‌کنید که شما را از طریق نوشته‌هایتان می‌شناسند و …به نظرم می‌رسد که نوشته‌های من و شما واحد ندارند ولی اثر بیرونی دارند.</description>
                <category>سعید حیدری</category>
                <author>سعید حیدری</author>
                <pubDate>Tue, 23 Mar 2021 13:30:44 +0430</pubDate>
            </item>
                    <item>
                <title>ویژگی های جدید لاراول ۸</title>
                <link>https://virgool.io/laravel-community/%D9%88%DB%8C%DA%98%DA%AF%DB%8C-%D9%87%D8%A7%DB%8C-%D8%AC%D8%AF%DB%8C%D8%AF-%D9%84%D8%A7%D8%B1%D8%A7%D9%88%D9%84-%DB%B8-drunaitxo8vf</link>
                <description>سلام دوستان عزیزتو این پست برخی از مهم ترین ویژگی هایی که توی لاراول نسخه ی ۸ اضافه شدن رو براتون میگماول اینکه لاراول ۸ ، آخرین نسخه از فریم ورک لاراول ، در ۸ سپتامبر منتشر شد. لاراول ۸ با ویژگی های جدید جالب و راهنمای ارتقا همراه است. خالق لاراول ، تیلور اوتول در ارائه Laracon برخی از این ویژگی های جدید را اعلام کرد. این پست شامل خلاصه ای از برخی قابلیت های جدید اعلام شده است. بیایید نگاهی به برخی از ویژگی های عالی جدید بیندازیم!۱. app/Models Directory۲. New Landing Page۳. Controllers Routing Namespacing۴. Route Caching۵. Attributes on Extended Blade Components۶. Better Syntax for Event Listening۷. Queueable Anonymous Event Listeners۸. Maintenance Mode۹. Closure Dispatch “Catch”۱۰. Exponential Backoff Strategy۱۱. Job Batching۱۲. Rate Limiting۱۳. Schema Dumping۱۴. Model Factories۱۵. Laravel Jetstreamاین مقاله هم به پایان رسید. تو مقالات بعدی به بررسی دقیق تر این موارد می پردازیم.بقیه ی مقالات من رو می تونید تو ویرگول مطالعه کنید یا به وبسایت شخصی من مراجعه کنید.منتظر آموزش های بیشتر درمورد برنامه نویسی و طراحی سایت تا لینوکس و بلاکچین باشید. روز خوبی داشته باشید.</description>
                <category>سعید حیدری</category>
                <author>سعید حیدری</author>
                <pubDate>Mon, 08 Feb 2021 12:33:27 +0330</pubDate>
            </item>
                    <item>
                <title>نصب تور در اوبونتو و دبیان بیس ها</title>
                <link>https://virgool.io/@saeedheydari/%D9%86%D8%B5%D8%A8-%D8%AA%D9%88%D8%B1-%D8%AF%D8%B1-%D8%A7%D9%88%D8%A8%D9%88%D9%86%D8%AA%D9%88-%D9%88-%D8%AF%D8%A8%DB%8C%D8%A7%D9%86-%D8%A8%DB%8C%D8%B3-%D9%87%D8%A7-ckdxuo3fmmgy</link>
                <description>بخش اول نصب Torتو این آموزش من نحوه ی نصب Tor در اوبونتو رو به شما آموزش میدم، توجه داشته باشید که من با اوبونتو ۱۹.۱۰ نصب میکنم ولی در نسخه های قدیمی تر اوبونتو هم امکان نصب Tor با همین روش داخل مقاله هست.تو قدم اول باید tor رو روسیستم نصب و فعال کنیم برای همین دستورات زیر رو توی ترمینال خودتون وارد کنید:sudo apt install tor
sudo systemctl enable tor.service
sudo systemctl start tor.serviceدستور اول برای نصب tor و دومی برای فعال کردن اون هست و در دستور سوم ما tor رو استارت می کنیم و تو شروع به کار می کنه.بریم سراغ قسمت بعدی و بررسی مشکلی که جدیدا توی لینوکس های دبیان بیس دیده میشه. ابتدا دستور زیر رو تو ترمینال وارد کنید:cat /etc/systemd/system/multi-user.target.wants/tor.serviceاگه خروجی شبیه این بود یعنی مشکلی در رخ داده:[Unit]
Description=Anonymizing overlay network for TCP (multi-instance-master)
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/bin/true
ExecReload=/bin/true
[Install]
WantedBy=multi-user.targetاگه این خروجی رو نگرفتید از این مرحله بگذرید در غیر این صورت کارهای زیر رو به ترتیب انجام بدید:اول دستور زیر رو وارد کنید:sudo nano /etc/systemd/system/multi-user.target.wants/tor.serviceو متن زیر رو جایگزین محتویات فایل کنید:[Unit]
Description=Anonymizing overlay network for TCP (multi-instance-master)
[Service]
User=debian-tor
Type=simple
RemainAfterExit=yes
ExecStart=/usr/bin/tor -f /etc/tor/torrc
ExecReload=/usr/bin/kill -HUP $MAINPID
KillSignal=SIGINT
LimitNOFILE=8192
PrivateDevices=yes
[Install]
WantedBy=multi-user.targetبرای ذخیره کردن ctrl+o و بعد enter و برای خروج ctrl+x رو بزنید.سپس ۲ دستور زیر را یکی یکی وارد کنید و enter بزنید:sudo systemctl daemon-reload
sudo systemctl restart tor.serviceبخش دوم اضافه کردن پلبا دستور زیر شما لاگ های تور رو مشاهده میکنید ، و همینطور اگه لاگ جدیدی بیاد ، بهش اضافه میشه ، با ctrl+c می تونید از این دستور خارج بشید.journalctl -exfu torتوی این لاگ ها خط هایی هستن به این شکل:Bootstrapped 0%: Starting
Bootstrapped 80%: Connecting to the Tor networkشما باید خط Bootstrapped 100%: Done رو در لاگ ها مشاهده کنید.اگه به این خط رسیدید یعنی Tor آماده به کاره ، اما اگه تا ۱۰۰٪ نرفته بود ، یعنی باید پل برای تور تنظیم کنید.در این قسمت ما مراحل اضافه کردن پل رو آموزش میدیم ، اما اگر برای شما تا ۱۰۰٪ رفته بود ، از این بخش بگذریدابتدا دستور زیر را وارد کنید:sudo apt install obfs4proxyبعد از ۲ طریق می تونید به پل برسید:۱ـ صفحه https://bridges.torproject.org/۲ـ ایمل کردن get transport obfs4 به bridges@bridges.torproject.orgدر هر ۲ حالت به چیزی می رسید شبیه این ( اینجا پل obfs4 گرفتیم ، obfs3 پایین تره)حالا باید پل هایی که دریافت کردید رو به فایل torrc اضافه کنید تا tor بتونه با استفاده از اون ها به شبکه اینترنت متصل بشه.با این دستور فایل torrc رو باز می کنیم:sudo nano /etc/tor/torrcاینجاهم من از ویرایشگر فایل nano استفاده کردمولی شما می توانید از یک ویرایشگر دیگه استفاده کنید.به آخر فایل برید و اینا رو به انتهای فایل اضافه کنید:UseBridges 1
ClientTransportPlugin obfs4 exec /usr/bin/obfs4proxy
Bridge obfs4 IP:PORT HASH-OF-YOUR-OBFS4-BRIDGE(در ترمینال برای paste کردن از Ctrl+Shift+v می توانید استفاده کنید).دقت کنید که شما پل خودتون رو بذارید و توجه کنید که به قبل پل Bridge اضافه کردیم. اگه توجه کنید خط آخر این شکلی هست:Bridge obfs4 IP:PORT HASH-OF-YOUR-OBFS4-BRIDGEکه کلمه ی Bridge رو باید بنویسید و بعدش پلی که دریافت کردید رو بنویسید که معمولا سه تا هست. و فایل به این شکل میشه:Bridge obfs4 IP:PORT HASH-OF-YOUR-OBFS4-BRIDGE
Bridge obfs4 IP:PORT HASH-OF-YOUR-OBFS4-BRIDGE
Bridge obfs4 IP:PORT HASH-OF-YOUR-OBFS4-BRIDGEسپس برای دخیره کردن Ctrl+o و بعد Enter و برای خروج Ctrl+x رو بزنید. و در نهایت دستور زیر رو وارد کنید تا tor دوباره راه اندازی بشه:sudo systemctl restart tor.serviceاین آموزش هم به پایان رسید.بقیه ی مقالات من رو می تونید تو ویرگول مطالعه کنید یا به وبسایت شخصی من مراجعه کنید. منتظر آموزش های بیشتر درمورد برنامه نویسی و طراحی سایت تا لینوکس و بلاکچین باشید. روز خوبی داشته باشید.</description>
                <category>سعید حیدری</category>
                <author>سعید حیدری</author>
                <pubDate>Sun, 19 Apr 2020 00:10:59 +0430</pubDate>
            </item>
                    <item>
                <title>جلسه ی دوم لاگ همدان</title>
                <link>https://virgool.io/@saeedheydari/%D8%AC%D9%84%D8%B3%D9%87-%DB%8C-%D8%AF%D9%88%D9%85-%D9%84%D8%A7%DA%AF-%D9%87%D9%85%D8%AF%D8%A7%D9%86-ikvykudvhnyg</link>
                <description>سلام دوستان من سعید حیدری هستم برگزار کننده ی جلسات لاگ همدان به همراه دوستانم پرهام و یاسین. از همه ی لینوکسی های همدانی عزیز درخواست دارم تا تو این جلسات شرکت کنند.چند هفته پیش بود که جلسه ی اول لاگ همدان با حمایت شرکت زومیلا و با همکاری دوست خوبم پرهام برگزار شد.تو جلسه ی اول درمورد لینوکس و تاریخچه ی گنو و برخی تعاریف صحبت شد و در ادامه پرهام درمورد برخی توزیع های لینوکسی و برخی دوره های آموزشی مختصری توضیح داد و سعی کردیم تا دوستان تازه کار رو تو این مسیر راهنمایی کنیم.جلسه ی دوم هم به زودی با حمایت رسانه ای انجمن مهندسی کامپیوتر دانشگاه صنعتی همدان و سفالینا و حمایت زومیلا برگزار میشه و می تونید از طریق لینک زیر ثبت نام کنید:https://evnd.co/3QhmWبرای ارتباط با من می تونید وبسایتم مراجعه کنید.</description>
                <category>سعید حیدری</category>
                <author>سعید حیدری</author>
                <pubDate>Mon, 23 Sep 2019 19:31:11 +0330</pubDate>
            </item>
                    <item>
                <title>هایپرلجر (Hyperledger) چیه؟</title>
                <link>https://virgool.io/@saeedheydari/%D9%87%D8%A7%DB%8C%D9%BE%D8%B1%D9%84%D8%AC%D8%B1-hyperledger-%DA%86%DB%8C%D9%87-xn2gxf8c6giq</link>
                <description>هایپرلجر (Hyperledger) یکی از تکنولوژی های محصول بنیاد لینوکس هست. هر علاقه مند به بلاکچین که کنفرانس ها و مقالات بلاکچین رو دنبال می کنه ناگزیر با اون مواجه میشه.در سال 2015 بنیاد لینوکس خبر از پروژه ی هایپرلجر خود داد و با شرکت هایی مثل IBM و Intel همکاری خودش رو آغاز کرد. هدف از این پروژه ایجاد همکاری موثر بین صنعت و بلاکچین به عنوان یه تکنولوژی کاربردی با هدف بهبود عملکرد و افزایش قابلیت اطمینان در سیستمه. تا این گونه بتونن از معاملات جهانی توسط شرکت های بزرگ فناوری، مالی و زنجیره تامین انجام میشه حمایت کنن.این پروژه سعی در یکپارچه سازی استانداردها و پروتوکل های مستقل متن باز را با استفاده از یک فریمورک مبتنی بر ماژول های با استفاده ی خاص مانند خدمات احراز هویت، کنترل دسترسی و قراردادهای هوشمند، دارد.برخلاف بسیاری از پروژه های بلاکچینی که برای خود رمزارز ارائه می دهند، هایپرلجر تنها بر روی ارائه ی خدمات و ماژول های بلاکچینی برای توسعه ی برنامه های بلاکچینی ارائه می دهد و خود رمزارز نخواهد داشت. البته این موضوع را هم مدنظر داشته باشید که هایپرلجر، بلاکچین نیست! هرچند که تاثیر فراوانی از آن پذیرفته است.هایپرلجر فابریک(Fabric)همونطور که گفنتم شرکت IBM کی از شرکت های حاضر در این پروژه است. فابریک یکی از اولین پروژه های مبتنی بر هایپرلجر می باشد. نسخه ی 1 آن در سال 2017 اراِه شد. در اصل فابریک یک زیرساخت بلاکچینی با معماری ماژولار است که با مشخص کردن نقش بین گره ها در زیرساخت و اجرای قراردادهای هوشمند و الگوریتم اجماع و سرویس عضویت قابل تنظیم کار می کند.شبکه ی فابریک از گره های همتا تشکیل شده است که می توانند قراردادهای هوشمند رو اجرا کنن و یا به داده ها دسترسی داشته باشن و ارتباطات بین برنامه ها و معاملات رو انجام بدن.با ارائه ی فابریک، شرکت های مختلف کارشون رو برای ارائه ی راه حل مبتنی بر فابریک شروع کردن و به زودی انبوهی از برنامه ها مثل تست ایمنی غذایی والمارت(Walmart)، پلتفرم املاک و مستغلات بانک هلندی ABN Amro و همچنین پروتوکل های پرداخت که توسط استارت آپ MonetaGo برای هند توسعه داده میشه.هر چند هنوز هم فضای زیادی برای کار در حوزه ی های مختلف هایپرلجر وجود دارد. علاوه بر فابریک پروژه های جدیدی مثل Sawtooth و Iroha و … نیز انجام شدن که قابل بررسی هستن.امیدوارم این مقاله براتون مفید بوده باشه. :)منتظر و علاقه مند نظراتتون هستم. برای ارتباط با من می تونید به وبسایتم مراجعه کنید.</description>
                <category>سعید حیدری</category>
                <author>سعید حیدری</author>
                <pubDate>Sat, 21 Sep 2019 22:57:31 +0430</pubDate>
            </item>
                    <item>
                <title>بلاکچین چیه؟ مختصری درمورد بلاکچین</title>
                <link>https://virgool.io/@saeedheydari/%D8%A8%D9%84%D8%A7%DA%A9%DA%86%DB%8C%D9%86-%DA%86%DB%8C%D9%87-%D9%85%D8%AE%D8%AA%D8%B5%D8%B1%DB%8C-%D8%AF%D8%B1%D9%85%D9%88%D8%B1%D8%AF-%D8%A8%D9%84%D8%A7%DA%A9%DA%86%DB%8C%D9%86-tonk7grj0iib</link>
                <description>سلام دوستان عزیزاز امروز قصد دارم تا تجربیاتم در زمینه ی بلاکچین رو با شما به اشتراک بذارم. تو این چند سال من تو حوزه های مختلف کار کردم به خصوص بلاکچین و برنامه نویسی وب.بلاکچین یه تکنولوژی خیلی عالی هست که داره دنیای آینده رو شکل میده. البته تو ای راه پیشرفت های زیادی داشته و نسخه های مختلفی از اون ارائه شده مثل هش گراف و تنگل.اول درمورد بلاکچین بگم. بلاکچین یه شبکه ی همتا به همتاست که ارتباط مستقیم و ارسال اطلاعات و ثبت اون ها رو بدون نیاز به واحد مرکزی و کنترل کننده و به صورت غیرقابل تغییر امکان پذیر کرده.ساختار بلاکچیندر حقیقت بلاکچین یه دیتابیس هست. همون طور که در عکس مشخصه یک سری اطلاعات در کنار هم قرار میگیرن و تشکیل یه بلاک رو میدن و این بلاک ها در کنار هم قرار میگیرن و تشکیل یه زنجیره به اسم بلاکچین یا زنجیره بلاک رو میدن. این بلاک ها از طریق هش به هم دیگه متصل هستن.از طرفی بلاکچین غیر متمرکز هست. برای توضیح این قسمت اجازه بدید از مثال استفاده کنم. بیتکوین یه نرم افزار موفق هست که بر بستر بلاکچین ایجاد شده پس بهترین مثال می تونه باشه. در حالت عادی شما برای انتقال پول باید یه تراکنش بانکی انجام بدید. بعد از اون اطلاعات تراکنش به بانک فرستاده میشه و بانک این اطلاعات رو با دیتایس خودش مقایسه می کنه تا ایراد و تناقضی نداشته باشه و در انتها این تراکنش ثبت و تایید میشه و انتقال صورت میگیره.در این بین تمام فرایند تایید، ثبت و کمترل تراکنش در اختیار بانک هست و شما کنترلی روی این موضوع ندارید. حالا فرض کنید بانک بخواد این اطلاعات رو تغییر بده. آیا کسی هست که بتونه به طور خودکار جلوش رو بگیره؟ آیا میشه به طور کامل به صحت اطلاعات اطمینان داشت؟ قطعا نه! چون اگر کسی به دیتابیس دسترسی داشته باشه می تونه اون رو تغییر بده.این در حالی هست که در بیتکوین هر نود کاملی (هر شخص حاضر در شبکه) یه کپی از دیتابیس داره. از طرف دیگه این خود شبکه هست که ترکنش رو تایید می کنه پس همه تو تایید درستی اطلاعات و تراکنش نقش دارن و این اطمینان رو بالا میبره. این تصمیم گیری از طریق الگوریتم های اجماع اتفاق میفته.و در نهایت به علت استفاده از هش و ماهیت هش، اگه کوچکترین تغییری در اطلاعات بلاک اتفاق بیفته، هش اون بلاک تغییر می کنه و چون بلاک ها از طریق هش به هم مرتبط هستن، با تغییر هش هر کدوم از بلاک ها این زنجیره از گسسته میشه.خب برای امروز کافیه. امیدوارم براتون مفید بوده باشه. سعی کردم به صورت خیلی ساده و مختصر بیان کنم. اگه براتون مفید بود لطفا تو نظراتتون اعلام کنید. من هم سعی می کنم تا بیشتر در یان مورد بنویسیم. به خصوص در مورد مباحث جدیدتر این حوزه و تکنولوژی های جدید مثل هش گراف، تنگل، هایپرلجر و… .من تو زمینه های برنامه نویسی وب، اینترنت اشیاء، بلاکچین، هایپرلجر، مفاهیم سیستم عامل، لینوکس، هوش مصنوعی و استارت آپ ها و کسب و کارها نوپا فعالیت داشته و دارم. در هر حوزه ای که تمایل دارید در نظراتتون اعلام کنید تا در مقالات بیشتری در اون زمینه ها قرار بدم.برای ارتباط با من می تونید به وبسایتم مراجعه کنید.</description>
                <category>سعید حیدری</category>
                <author>سعید حیدری</author>
                <pubDate>Wed, 18 Sep 2019 00:15:52 +0430</pubDate>
            </item>
                    <item>
                <title>من کیم؟؟؟؟؟</title>
                <link>https://virgool.io/@saeedheydari/%D9%85%D9%86-%DA%A9%DB%8C%D9%85-j8ldydor6xob</link>
                <description>سلام دوستان عزیزتو این پست قصد دارم چند سطر درمورد خودم بنویسم و کمی هم درددل کنم و در کنارش اهداف و برنامه های خودم رو شرح بدم.من سعید حیدری هستم، فارغ التحصیل کارشناسی مهندسی فناوری اطلاعات از دانشگاه صنعتی همدان. از علاقه مندان دنیای گنو/لینوکس هستم و دو سه سالی میشه که با اوبونتو کار می کنم. علاقه ی فراوانی به برنامه های متن باز دارم و سعی می کنم تا جای ممکن از نرم افزارهای متن باز استفاده کنم.اول اینو بگم که علاقه  اصلی من حقوق و تاریخ اساطیر و ادبیات هست ولی دست سرنوشت من رو به سمت این رشته کشوند. هرچند که دو سال اول دانشگاه ناامیدانه زندگی می کردم ولی آروم آروم به خودم اومدم و تصمیم گرفتم تو این رشته پیش برم. البته تاثیر بعضی اساتیدم و درس های چالش برانگیزی مثل امنیت شبکه و در کنار اون بلاکچین انرژی من رو چند برابر کرد.به هر حال من آروم آروم شروع کردم به پیدا کردن راه خودم و تو این راه چیزهای زیادی رو تجربه کردم از برنامه نویسی c گرفته تا پایتون. از نوشتن برنامه های دسکتاپ تا آموزش و بازاریابی روباتیک، از بلاکچین تا اینترنت اشیا تا بالاخره بهش رسیدم! به چیزی که ادامه ی مسیر رو برام ساده تر کرد برنامه نویسی وب.برنامه نویسی وب رو مدیون یکی از دوستان هستم که ازم خواست براش یه قالب وردپرس بنویسم و منم که به عنوان یه چالش پذیرفتم. قبلا دو سه باری سعی کرده بودم طراحی سایت انجام بدم ولی هرچقدر بیشتر Html Css کار می کردم کمتر جرات کدزنی و انجام پرژه رو داشتم. انگار نیاز به یه تلنگر نیاز داشتم و این پروژه ی دوستانه می تونست شروع خوبی باشه و کمک کنه به ترسم غلبه کنم و خب همین طور هم شد.کاری که تو چند ماه نتونسته بودم رو تو سه روز انجام دادم. یه قالب با Html Css نوشتم و وردپرس رو مقدماتی یاد گرفتم. بعد از اون شروع کردم به نوشتن قالب و تو یه هفته قالب رو تحویل دادم. این قضیه روحیه خوبی بهم داد. آروم آروم رفتم سمت PHP و بعدش لاراول که تا الآن هم لاراول کار می کنم.در کنار همه ی این ها من با استارت آپ ها آسنا شدم و نحوه ی کارشون رو یاد گرفتم. الآن هم یه تیم خیلی خوب دور هم جمع شدیم و داریم با هم کار می کنیم. در حقیقت مثل یه خانواده شدیم. به امید خدا به زودی استارت آپ خودمون رو تو حوزه ی گردشگری شورع می کنیم. من خیلی به این تیم اعتقاد و اعتماد دارم.تو این یک سال من بلاکچین رو به صورت تخصصی ادامه دادم و در مبحث ادغام اون با اینترنت اشیا مطالعاتی رو داشتم. سعی می کنم تو مطالب بعدی مطالعاتم رو به زبان ساده بنویسم. همچنین تو زمینه ی گنو/لینوکس، بلاکچین، هوش مصنوعی، اینترنت اشیا، طراحی و برنامه نویسی وب و اندروید آموزش قرار بدم.تو این مدت اعتماد به نفس خوبی پیدا کردم و تونستم تو روابط اجتماعی هم پیشرفت خوبی داشته باشم. شبکه سازی و برندینگ خودم رو شروع کردم و با افراد خیلی خوبی هم آشنا شدم که هر کدومشون به اندازه ی یه دنیا اطلاعات مفید دارن و می تونم ازشون یاد بگیرم.فکر کنم برای امروز کافی باشه. در آخر فقط یه توصیه دارم که امیدوارم از این برادر کوچکترتون بپذیرید: تصمیمتون رو بگیرید و بدون ترس پیش برید، بدون غرور با افراد مختلف ارتباط بگیرید و ازشون یاد بگیرید و از تجربیاتشون استفاده کنید و هیچ وقت ناامید نشید و به خودتون اعتماد داشته باشید. هرچقدر بیشتر شکست بخورید در آینده موفق تر خواهید شد!برای ارتباط با من می تونید به وبسایتم مراجعه کنید.</description>
                <category>سعید حیدری</category>
                <author>سعید حیدری</author>
                <pubDate>Thu, 12 Sep 2019 22:00:16 +0430</pubDate>
            </item>
            </channel>
</rss>