زبان برنامه نویسی GO چیست؛ کاربرد زبان گو
برای درک بلاکچین به زبان ساده میتوان از زبانهای برنامهنویسی که با آن در ارتباط هستند شروع کرد. زبان برنامه نویسی Go یک زبان برنامه نویسی توسعه یافته توسط گوگل است. با ویژگیهای مهم و خاصی که دارد، میتواند در زمینه توسعه بلاک چین و معامله ارز دیجیتال کمک کند.
معرفی زبان برنامه نویسی گو (GO)
اگر در برنامه نویسی پیش زمینه داشته باشید، میدانید که زبان برنامه نویسی گو با C ظاهری کاملاً مشابه دارند. هر دو این زبانهای برنامه نویسی برای برنامهنویسان حرفهای مناسب است. این زبان، حداقل ابزارها را دارد ولی کارایی زیادی را برای شما فراهم میکند. این زبان در باطن، بسیار فراتر از زبان برنامه نویسی C عمل میکند.
زبان برنامه نویسی گو، امکانات جدید و کارآمدی مانند قابلیت تفکیک داده (Data Abstraction) و برنامه نویسی شی گرا (Object Oriented) را دارا است. همچنین، به سیستم اتوماتیک مدیریت حافظه (Garbage Collection) مجهز است. همانطور که آگاه هستید، مدیریت حافظه به طور دستی، وقت و انرژی بسیاری را از برنامهنویسان میگیرد. پس، سیستم اتوماتیک مدیریت حافظه گو، یک مزیت در صرفه جویی وقت و هزینه به حساب میآید. علاوه بر این موارد، در زبان برنامه نویسی گو، مفاهیمی مانند جنریک لیستها، سازنده و استثناها وجود ندارد.ویژگی عدم پشتیبانی از وراثت در گو (GO) باعث آسانتر شدن روند ویرایش کدها میشود. به طور مثال، در زبانهای دیگر مانند جاوا یا پایتون، اگر کلاس ABC از کلاس XYZ ارث ببرد، باید در کلاس XYZ تغییراتی ایجاد شود. از همین رو، تمام کلاسهایی که از کلاس XYZ نیز ارث میبرند، باید تغییر کنند؛ بنابراین، عدم پشتیبانی از وراثت باعث فهم بهتر زبان گو میشود.
طبق ویژگیهای گفته شده، زبان گو برای توسعه زیرساخت مثل برنامه نویسی سرورهای شبکه استفاده میشود و تمام ابزار و سیستم موردنیاز برای برنامهنویسان را نیز فراهم میکند. در نهایت لازم است بدانید، این زبان در حوزههای گرافیک، هوش مصنوعی و اپلیکیشنهای موبایل استفاده میشود.
ساخت بلاک چین با Go
بسیاری از ویژگیها و عملکردهایی که گو ارائه میدهد، برای ساخت یک بلاک چین مناسب است. به طور مثال، گو به شما اجازه ایجاد برنامههای بسیار کارآمدی را میدهد که تنها به کمی تلاش نیاز دارد.
همچنین، گو برای ساخت برنامههایی که نیاز به موازی سازی و همزمانی (مثل بلاک چین) دارند، با توانایی تولید و مدیریت هزاران Goroutine مناسب است. این زبان با سیستم اتوماتیک مدیریت حافظه و مدیریت پشته (ساختمان داده یا Stack Management)، زمان اجرا خود را پیاده سازی میکند.
در نهایت، برنامههای کامپایل (Compiles Applications) را به کد ماشین و باینریهای تکی (Single Binaries) تبدیل میکند. برای این کار از چندین سیستم عامل معماریهای پردازنده پشتیبانی میکند و به راحتی سرور مستقر میشود.
یکی دیگر از زبانهای کاربردی در دنیای کریپتو سالیدیتی است.
دلیل محبوبیت گو (GO)
گو به عنوان یک Go lang شناخته میشود. یک زبان برنامه نویسی سیستم محور است که توسط گوگل در سال ۲۰۱۲ منتشر شد. گو سومین زبان برنامه نویسی محبوب، بعد از جاوا و C، است که مزایای زیادی را به متخصصان DevOps ارائه میدهد.
برنامه نویسی گو مانند بلاک چین یک فناوری فوقالعاده برای یادگیری است. گو یک زبان مرسوم برای برنامهنویسان است. برنامهنویسان گو مانند برنامهنویسان Java/Javascript/PHP حقوق میگیرند و دستمزدشان بر اساس دستمزد برنامه نویسان سایر زبانها تعیین میشود.
علاوه بر این موارد، گو برای معماری CPU چندهستهای بهینه شده است. شما میتوانید هزاران نخ سبک وزن (light-weight threads) را بدون هیچ دردسری تولید کنید. این امر آن را برای نرم افزارهای همزمانی و موازی مانند بلاک چین بسیار کاربردی میکند. با نوشتن نرم افزار در گو، میتوانید به سطح C++ از عملکرد کاملاً خارج از جعبه دست یابید.
از جمله مزایای گو، ظرفیت قوی برای آنچه همزمان نامیده میشود، است. یعنی، این زبان برنامه نویسی قادر به اجرای چندین کار به طور همزمان است. با چنین ویژگی گو، میتوانید چندین برنامه فرعی را به طور همزمان مدیریت کنید. این کار توسط کانال و گو روتین انجام میشود. در نتیجه، برای انجام محاسبات توزیع شده، پیچیدگی بالا و فناوریهای ابری فوقالعاده است.
تنها، زبانهای برنامه نویسی C، C++ و جاوا میتوانند با یکدیگر مقایسه شوند و گو قابل مقایسه با این زبانهای برنامه نویسی نیست.همچنین، گو میتواند برنامهها را مستقیماً اجرا کند. زیرا در کد ماشین، کامپایل شده است. زبان Go نسبت به زبانهای تفسیری دیگری مانند جاوا اسکریپت سریعتر است. به عنوان یک زبان کامپایل شده، شبیه زبانهای سطح پایینتر مانند C و C++ است.
ساخت بلاک چین در گو(GO)
در ادامه میخواهیم یک پروژه جدید را در گو ایجاد و بستههای لازم برای ساخت بلاک چین را وارد کنیم.
در ابتدا یک فایل با نام blockchain.go ایجاد کرده و کد زیر را در آن ذخیره کنید.
package main
import (
“crypto/sha256”
“encoding/json”
“fmt”
“strconv”
“strings”
“time”
)
در مرحله بعدی، باید یک بلاک سفارشی، جهت نگهداری دادههای بلاک چین ایجاد کنیم. کد زیر را به فایل قبلی اضافه کنید.
type Block struct {
data map[string]interface{}
hash string
previousHash string
timestamp time.Time
pow int
}
سپس، یک نوع بلاک چین سفارشی ایجاد میکنیم که حاوی بلاکهای ما باشد. کد زیر را به فایلمان اضافه میکنیم.
type Blockchain struct {
genesisBlock Block
chain []Block
difficulty int
}
ویژگی Genesis Block نشان دهنده اولین بلاک اضافه شده به بلاک چین است. در مقابل، این ویژگی شرایط دشواری را برای تلاش ماینرها در جهت استخراج یک بلاک و گنجاندن آن در بلاک چین به وجود میآورد.
محاسبه هش(Hash) یک بلاک
هش یک بلاک، شناسه آن بلاک است که با استفاده از رمزنگاری تولید میشود. ما هش بلاک را برای بلاک چین خود با هش کردن، هش بلاک قبلی، دادههای بلاک فعلی، مهر زمانی و PoW با استفاده از الگوریتم SHA256 استخراج میکنیم.
در ادامه به یک متد میپردازیم که بلاک خودمان را با چنین عملکردی اجرا کند.
func (b Block) calculateHash() string {
data, _ := json.Marshal(b.data)
blockData := b.previousHash + string(data) + b.timestamp.String() + strconv.Itoa(b.pow)
blockHash := sha256.Sum256([]byte(blockData))
return fmt.Sprintf(“%x”, blockHash)
}
مواردی که در بالا گفته شد را انجام دهید:
- دادههای بلاک را با فرمت JSON تبدیل کنید.
- هش قبلی بلاک، دادهها، مهر زمانی و اثبات کار (PoW)
- الحاق قبلی را با الگوریتم SHA256 هش کنید.
- نتیجه هش را در پایه ۱۶ با حروف کوچک به A-F برگردانید.
استخراج بلاکهای جدید
استخراج یک بلاک جدید شامل تولید یک هش بلاک است که با تعداد صفرهای دلخواه شروع میشود. یعنی اگر سختی بلاک چین ۳ باشد، باید یک هش بلاک چین ایجاد کرده که با ۰۰۰ شروع شود.
از آن جایی که ما هش یک بلاک را از محتوای آن استخراج میکنیم، باید مقدار PoW بلاک فعلی را تغییر دهیم تا زمانی که هشی را به دست میآوریم که شرایط استخراج ما را برآورده کند.
برای پیاده سازی این گفتهها، ما یک متد mine () برای نوع بلاک خود ایجاد میکنیم که مقدار PoW آن را افزایش میدهد. همچنین، هش بلاک را محاسبه میکند تا زمانی که یک هش معتبر به دست آوریم.
کد زیر را به فایل blockchain.go اضافه کنید.
func (b *Block) mine(difficulty int) {
for !strings.HasPrefix(b.hash, strings.Repeat(“0”, difficulty)) {
b.pow++
b.hash = b.calculateHash()
}
}
ساخت اولین بلاک
در مرحله بعدی از ساخت بلاک چین در گو، تابعی باید بنویسم که یک GenesisBlock را برای بلاک چین ما ایجاد کند و نمونه جدید از نوع بلاک چین را برمیگرداند.
کد زیرا را به فایل blockchain.go اضافه کنید.
func CreateBlockchain(difficulty int) Blockchain {
genesisBlock := Block{
hash: “۰”,
timestamp: time.Now(),
}
return Blockchain{
genesisBlock,
[]Block{genesisBlock},
difficulty,
}
}
در اینجا، هش GenesisBlock خود را روی ۰ قرار میدهیم. زیرا، اولین بلاک در بلاک چین است و هیچ مقداری برای هش قبلی وجود ندارد و ویژگی داده خالی است.
سپس، نمونه جدیدی از نوع بلاک چین ایجاد کرده و GenesisBlock را همراه با سختی بلاک چین ذخیره میکنیم.
ساخت بلاک جدید در بلاک چین
اکنون که عملکردهایی را برای بلاکهای خود پیاده سازی کردیم تا هش آنها را محاسبه شود، میخواهیم ببینیم که چگونه بلاکهای جدید را در یک بلاک چین قرار دهیم.
کد زیر را همچنان به فایل blockchain.go اضافه کنید.
func (b *Blockchain) addBlock(from, to string, amount float64) {
blockData := map[string]interface{}{
“from”: from,
“to”: to,
“amount”: amount,
}
lastBlock := b.chain[len(b.chain)-1]
newBlock := Block{
data: blockData,
previousHash: lastBlock.hash,
timestamp: time.Now(),
}
newBlock.mine(b.difficulty)
b.chain = append(b.chain, newBlock)
}
در اینجا، ما یک متد addBlock را به نوع بلاک چین اضافه کردیم که کارهای زیر را انجام دهد:
- جزئیات یک تراکنش مانند فرستنده، مبلغ انتقال و گیرنده را جمع آوری کند.
- یک بلاک جدید با جزئیات تراکنش ایجاد کند.
- بلاک جدید را با هش بلاک قبلی، دادههای بلاک فعلی و PoW تولید شده، استخراج کند.
- بلاک جدید ایجاد شده را به بلاک چین اضافه کند.
بررسی اعتبار بلاک چین
بعد از اتمام مراحل بالا، شما موفق به ساخت یک بلاک چینی شدهاید که امکان ثبت تراکنشها را دارد. حالا به عملکردی نیاز داریم که اعتبار بلاک چین را بررسی کرده تا از عدم دستکاری تراکنشها مطمئن شویم.
کد زیر را به فایل blockchain.go اضافه کنید.
func (b Blockchain) isValid() bool {
for i := range b.chain[1:] {
previousBlock := b.chain[i]
currentBlock := b.chain[i+1]
if currentBlock.hash != currentBlock.calculateHash() || currentBlock.previousHash != previousBlock.hash {
return false
}
}
return true
}
در اینجا، هش هر بلاک را مجدداً محاسبه میکنیم. این محاسبه بر اساس مقایسه مقادیر هش ذخیره شده سایر بلاکها است. همچنین، بررسی میکنیم که آیا مقدار هش قبلی هر بلاک دیگری با مقدار هش بلاک قبل از آن برابر است؟ دقت کنید که اگر هر یک از این بررسیها ناموفق بود، به معنای دستکاری شدن و نامعتبر بودن بلاک چین است.
انجام معاملات در بلاک چین
حالا که یک بلاک چین کاملاً کاربردی را ساختیم، باید یک تابع “mine ()” ایجاد کنیم تا کاربرد آن را نشان دهیم.
برای این کار تنها کافی است که کد زیر را به فایل blockchain.go اضافه کنیم.
func main() {
// create a new blockchain instance with a mining difficulty of 2
blockchain := CreateBlockchain(2)
// record transactions on the blockchain for Alice, Bob, and John
blockchain.addBlock(“Alice”, “Bob”, 5)
blockchain.addBlock(“John”, “Bob”, 2)
// check if the blockchain is valid; expecting true
fmt.Println(blockchain.isValid())
}
تاریخچه گو (GO)
برخی از افراد، تاریخچه گو را به زبان C قرن ۲۱ برمیگردانند. زیرا که زبان گو، ساختار، پارامترهای ارزش گذاری، نوع داده و نشانگر خود را از زبان C به ارث برده است.
مزایا زبان برنامه نویسی گو
برخی از مزایای اصلی زبان گو شامل موارد زیر میشود.
- قابلیت اجرای چندین Task به طور همزمان
- سطح دسترسی و برقراری ارتباط بیشتر با سخت افزار
- کیفیت خوب در نوشتن برنامهها
- ساخت برنامههای اندروید با زبان برنامه نویسی اندروید go
- ویژگیهای مختصر
- ارتباط نزدیک دو زبان کامپیوتر و انسان
- املای کارآمد، تمیز و آسان
- دارای قابلیت کامپایل شدن به زبان ماشین
- پشتیبانی گوگل
- کدنویسی ساده به زبانهای Python و Ruby
- دارای مکانیسم همپوشانی
- افزایش سرعت در اجرای برنامهها و نوشتن
C و C++ در سال ۱۹۸۵ به دست Bjarne Stroustrup معرفی شد، بهترین زبان برنامه نویسی برای توسعه ارزهای دیجیتال است. از متدولوژی OOPs پیروی میکند و برای توسعه و خرید و فروش ارز دیجیتال مختلف مانند لایت کوین، بیت کوین، استلار، ریپل و EOS مناسب است.
همه افراد در دنیای بلاک چین از زبان گو استفاده میکنند. اکثر ابزارها و برنامههای کاربردی مبتنی بر بلاک چین با استفاده از Golang ساخته میشود.
Go (همچنین به نام Golang یا Go Language) یک زبان برنامه نویسی متن باز است که برای اهداف عمومی استفاده میشود. Go توسط مهندسان گوگل برای ایجاد نرم افزار قابل اعتماد و کارآمد توسعه داده شد.
پایتون زمانیکه باید مسائل علم داده را حل کنید بهترین در نظر گرفته میشود، در حالی که Go برای برنامه نویسی سیستم مناسبترین است. Python یک زبان تایپ شده پویا است، در حالی که Golang یک زبان تایپ ایستا است.
وقتی کارشناس روانشناسی راجع به گو مطلب مینویسه بهتر ازاین نمیشه حداقل به تخصص افراد و مخاطبتون احترام بگذارید
سلام و عرض ادب
همراه عزیز والکس، مقاله منتشر شده تالیف شخص نویسنده نیست و صرفاً بر اساس منابع معتبر ترجمه و ویرایش شده است. بسیار خوشحال میشویم اگر ایراد یا مشکلی در محتوای آن وجود دارد، به ما در بهبود آن کمک کنید. قطعا والکس با هدف رضایتمندی شما و بالابردن کیفیت خدمات خود از هرتلاشی دست نمیکشد.
بیصبرانه منتظر دریافت نظرات شما هستیم.
چطوری میتونم زبان گو رویا بگیرم
سلام
وقت شما به خیر
منابع زیادی در یوتیوپ و گوگل در قالب PDF و محتوای تصویری وجود دارد که با سرچ کردن در اینترنت به آنها دسترسی پیدا میکنید. در لینکهای زیر چند نمونه از آنها را برای شما قرار داده ایم.
https://www.youtube.com/watch?v=YS4e4q9oBaU
https://www.golang-book.com/public/pdf/gobook.pdf
همچنین با سرچ فارسی “آموزش زبان go” محتوای فارسی زیادی در وبسایتهای مختلف در دسترش شما قرار میگیرد.
سپاس از همراهی شما
سلام و خسته نباشید خدمت شما سرکار خانوم مهدیس مسکینی.
آیا با زبان go میشه برنامه اندرویدی توسعه داد و نمونه اپ هاش رو لطف میکنید (ریپو گیتهاب)؟
همچنین نمونه وبسایت هایی که با گو نوشته شدن.
با تشکر ازتون
سلام
وقت شما به خیر
زبان go یک زبان بسیار قدرتمند و open Source است و از ویژگیهای مهم آن قابلیت Cross Platform است بصورتی که با یادگیری زبان Go می توان هر نوع نرم افزاری را در بستر ویندوز، مک، لینوکس، “اندروید” و… پیاده سازی کرد. در لینک زیر میتوانید لیست برخی پروژهایی که از زبان go استفاده کرده اند را مشاهده کنید.
https://github.com/golang/go/wiki/GoUsers#iran
سپاس از همراهی شما