Struct در GO
در این بخش به بررسی Struct در GO می پردازیم، زبان برنامهنویسی Go که به نام Golang نیز شناخته میشود، یکی از زبانهای مدرن و قدرتمند است که توسط گوگل توسعه یافته است. این زبان با هدف سادهسازی و بهینهسازی کدنویسی، برای پروژههای بزرگ و سیستمهای پیچیده طراحی شده است. یکی از ویژگیهای کلیدی و پراستفاده در Go، قابلیت تعریف و استفاده از Struct است. Struct یک نوع داده کاربر-تعریفشده است که به ما اجازه میدهد تا مجموعهای از ویژگیها (یا دادهها) را در یک ساختار واحد ترکیب کنیم.
در زبان Go، Structها جایگزین کلاسها هستند، چراکه Go به صورت مستقیم از مفهوم کلاس و شیگرایی به شکلی که در زبانهایی مانند Java یا Python میبینیم، پشتیبانی نمیکند. با این حال، Structها به همراه ویژگیهایی مثل متدها و ترکیب، به توسعهدهندگان امکان میدهند تا مفاهیم شیگرایی را در پروژههای خود پیادهسازی کنند. در این مقاله، به صورت جامع و با مثالهای عملی، به بررسی Structها در زبان Go میپردازیم.
تعریف Struct در Go
Structها در Go به عنوان مجموعهای از فیلدها تعریف میشوند که هر فیلد دارای یک نام و یک نوع داده است. با استفاده از Structها میتوان دادههای مرتبط را در یک واحد منطقی گروهبندی کرد. برای تعریف Struct، از کلمه کلیدی type و struct استفاده میشود.
مثال:
توضیح:
- Struct User سه فیلد دارد:
Name
,Age
, وEmail
. - هنگام ایجاد یک نمونه از Struct، مقادیر برای هر فیلد اختصاص داده میشود.
- با استفاده از
user.Name
و سایر فیلدها، میتوان به دادهها دسترسی پیدا کرد.
مقداردهی به Struct
در Go، روشهای مختلفی برای مقداردهی به Struct وجود دارد. از مقداردهی مستقیم تا مقداردهی با اشارهگرها، هر کدام کاربرد خاص خود را دارند.
مقداردهی مستقیم
در مثال قبلی، از مقداردهی مستقیم استفاده کردیم. این روش زمانی مناسب است که تمام فیلدهای Struct مقداردهی شوند.
مقداردهی به صورت جزئی
اگر نیازی به مقداردهی تمام فیلدها نباشد، میتوان فقط فیلدهای خاصی را مقداردهی کرد:
user := User{Name: "زهرا"}
fmt.Println(user) // مقدار سایر فیلدها صفر خواهد بود (Age=0, Email="")
مقداردهی با اشارهگر
میتوان از اشارهگرها برای ایجاد نمونه Struct استفاده کرد:
userPointer := &User{Name: "امیر", Age: 30}
fmt.Println(userPointer.Name) // دسترسی مشابه با مقدار مستقیم
متدها برای Struct
در Go، میتوان متدهایی را تعریف کرد که برای یک Struct خاص کار میکنند. این متدها مشابه توابع هستند اما با یک گیرنده (receiver) که به Struct مرتبط است.
مثال:
توضیح:
- متد
Greet
برای Struct User تعریف شده است. - گیرنده
u User
به Struct مرتبط است و به دادههای آن دسترسی دارد. - میتوان با فراخوانی
user.Greet()
متد را اجرا کرد.
مقایسه Structها
در Go میتوان Structها را با یکدیگر مقایسه کرد، البته این امکان فقط زمانی وجود دارد که تمام فیلدهای Struct قابل مقایسه باشند.
مثال:
نکته:
- اگر Struct شامل فیلدهای غیرقابل مقایسه (مانند نقشه یا برشها) باشد، امکان مقایسه وجود ندارد.
ترکیب Structها
در Go میتوان Structها را به یکدیگر ترکیب کرد. این قابلیت شبیه به ارثبری در زبانهای شیگرا است.
مثال:
توضیح:
- Struct Address به Struct User ترکیب شده است.
- با این ترکیب، میتوان بدون نیاز به ذکر مستقیم Struct ترکیبشده به فیلدهای آن دسترسی داشت.
Structها در زبان Go ابزار قدرتمندی برای تعریف و مدیریت دادههای ساختارمند هستند. با استفاده از این قابلیت، میتوان کدهای خواناتر، منعطفتر و کارآمدتری ایجاد کرد. Structها در پروژههای واقعی نقش مهمی در پیادهسازی منطق دادهها ایفا میکنند، به ویژه زمانی که نیاز به ترکیب دادهها و متدها داریم.
منابع
آیا این مطلب برای شما مفید بود ؟