গোতে, var s []int
এবং এর মধ্যে পার্থক্য কী s := make([]int, 0)
?
আমি দেখতে পাচ্ছি যে দুটোই কাজ করে তবে কোনটি ভালো?
উত্তর:
ছাড়াও fabriziom এর উত্তর , আপনি "এ আরো উদাহরণ দেখতে পারেন : ব্যবহার এবং অভ্যন্তরীণ যান স্লাইস , যেখানে একটি ব্যবহার" []int
উল্লেখ করা হয়:
যেহেতু একটি স্লাইসের শূন্য মান (
nil
) একটি শূন্য দৈর্ঘ্যের স্লাইসের মতো কাজ করে , আপনি একটি স্লাইস ভেরিয়েবল ঘোষণা করতে পারেন এবং তারপরে এটি একটি লুপে যুক্ত করতে পারেন:
// Filter returns a new slice holding only
// the elements of s that satisfy f()
func Filter(s []int, fn func(int) bool) []int {
var p []int // == nil
for _, v := range s {
if fn(v) {
p = append(p, v)
}
}
return p
}
এর মানে, একটি ফালি লিখবেন করতে, আপনাকে প্রথমে মেমরি বরাদ্দ করা হবে না: nil
ছে p int[]
যেমন একটি ফালি যোগ করতে যথেষ্ট।
var p []int
ব্যবহারের চেয়ে আরও সহজ make
(যা আমি বরাদ্দের সাথে আরও বেশি সংযুক্ত করি, যদিও 0 ক্যাপযুক্ত হলেও এটি কোনও বরাদ্দ দেয় না)। পাঠযোগ্যতার মেয়াদে, আমি make
এখানে ব্যবহার না করা পছন্দ করি ।
p := []int{}
)। যেহেতু আমরা সাধারণত :=
বেশিরভাগ ভেরিয়েবল ঘোষণার জন্য বাক্য গঠন ব্যবহার করি , তাই স্লাইসের ব্যতিক্রম না হয়ে সর্বত্র এটি থাকা আরও স্বাভাবিক more এগুলি বরাদ্দের কথা চিন্তা করার চেষ্টা করা ব্যতীত সাধারণত মানুষকে অকাল অনুকূলকরণের দিকে ঠেলে দেয়।
সরল ঘোষণা
var s []int
মেমরি এবং বরাদ্দ নেই s
পয়েন্ট nil
, যখন
s := make([]int, 0)
s
0 টি উপাদান সহ একটি স্লাইসে মেমরি এবং পয়েন্টগুলিকে বরাদ্দ করে।
সাধারণত, আপনি যদি আপনার ব্যবহারের ক্ষেত্রে সঠিক আকার না জানেন তবে প্রথমটিটি আরও মূর্খ।
make
মানচিত্রের প্রয়োজন কারণ map
কিছু খালি রাখার জন্য খালি স্থানও বরাদ্দ রয়েছে।
nil
খালি অ্যারের পরিবর্তে আপনার স্লাইজের কোনও উপাদান না থাকলে ফিরে আসবে । তবে, যদি make
স্লাইস তৈরি করতে ব্যবহৃত হয়, পরিবর্তে একটি খালি অ্যারে ফিরে আসবে, যা সাধারণত কাঙ্ক্ষিত প্রভাব।
var s []int
) উত্পাদন করা হবে null
, যখন খালি ফালি (marshaling s := make([]int, 0)
) প্রত্যাশিত উত্পাদন করা হবে[]
সবেমাত্র একটি পার্থক্য খুঁজে পেয়েছি। আপনি যদি ব্যবহার
var list []MyObjects
এবং তারপরে আপনি আউটপুটটিকে JSON হিসাবে এনকোড করে পাবেন null
।
list := make([]MyObjects, 0)
[]
প্রত্যাশিত হিসাবে ফলাফল ।
আরও কিছু সম্পূর্ণ সম্পূর্ণ (আরও একটি যুক্তিতে make
) উদাহরণ:
slice := make([]int, 2, 5)
fmt.Printf("length: %d - capacity %d - content: %d", len(slice), cap(slice), slice)
আউট:
length: 2 - capacity 5 - content: [0 0]
বা ডায়নামিক ধরণের সহ slice
:
slice := make([]interface{}, 2, 5)
fmt.Printf("length: %d - capacity %d - content: %d", len(slice), cap(slice), slice)
আউট:
length: 2 - capacity 5 - content: [<nil> <nil>]
nil
স্লাইস তৈরি করে , অন্যটি একটি স্লাইস তৈরি করেempty
(এটি "অ্যাকশন বইতে যান" দ্বারা ব্যবহৃত পরিভাষা )। এখানে খুব একই উত্তর পোস্ট এড়াতে, আপনি না পরীক্ষা করতে stackoverflow.com/a/45997533/1561148