একটি অ-স্থির আকারের সাথে একটি খালি স্লাইস ঘোষণা করার জন্য এটি করা আরও ভাল:
mySlice1 := make([]int, 0)
বা:
mySlice2 := []int{}
শুধু ভাবছেন কোনটি সঠিক উপায়।
একটি অ-স্থির আকারের সাথে একটি খালি স্লাইস ঘোষণা করার জন্য এটি করা আরও ভাল:
mySlice1 := make([]int, 0)
বা:
mySlice2 := []int{}
শুধু ভাবছেন কোনটি সঠিক উপায়।
উত্তর:
আপনার দেওয়া দুটি বিকল্প শব্দার্থগতভাবে অভিন্ন, তবে ব্যবহারের make([]int, 0)ফলে রানটাইম.মেকস্লাইস (Go 1.14) এ অভ্যন্তরীণ কল আসবে ।
আপনার কাছে এটিকে একটি nilমান সহ রেখে যাওয়ার বিকল্প রয়েছে :
var myslice []int
গোলাং.আরোগ ব্লগে যেমন লেখা আছে :
কোনও শূন্য দৈর্ঘ্যের স্লাইসের সাথে নিল টুকরোটি কার্যত সমান, যদিও এটি কিছুই দেখায় না। এটির দৈর্ঘ্য শূন্য এবং বরাদ্দ সহ এটিকে যুক্ত করা যেতে পারে।
একটি nilফালি তবে হবে json.Marshal()মধ্যে "null"একটি খালি ফালি মধ্যে মার্শাল হবে যেহেতু "[]", @farwayer দ্বারা সরু আউট হিসাবে।
@ আরমান অর্দুখানি দ্বারা নির্দেশিত হিসাবে উপরের বিকল্পগুলির মধ্যে কোনওটিই বরাদ্দের কারণ হবে না।
json.Marshal()ফিরে আসবেnullvar myslice []int[]myslice := []int{}
reflect.DeepEqualশূন্য টুকরা এবং অ শূন্য টুকরা মধ্যে একটি পার্থক্য তোলে: a := []int{}, var b []int,reflect.DeepEqual(a, b) // returns false
তারা সমতুল্য। এই কোডটি দেখুন:
mySlice1 := make([]int, 0)
mySlice2 := []int{}
fmt.Println("mySlice1", cap(mySlice1))
fmt.Println("mySlice2", cap(mySlice2))
আউটপুট:
mySlice1 0
mySlice2 0
উভয় স্লাইসের 0ক্ষমতা রয়েছে যা উভয় টুকরোকেই বোঝায়0 দৈর্ঘ্য রয়েছে (ধারণক্ষমতার চেয়ে বড় হতে পারে না) যা বোঝায় যে উভয় টুকরোয়ের কোনও উপাদান নেই। এর অর্থ 2 টি স্লাইস প্রতিটি ক্ষেত্রে একরকম।
অনুরূপ প্রশ্নগুলি দেখুন:
অতিরিক্ত হিসাবে @ANisus ' উত্তর ...
নীচে "এক্স-অ্যাকশন" বইয়ের কিছু তথ্য দেওয়া আছে , যা আমি মনে করি এটি উল্লেখযোগ্য:
nilএবং emptyটুকরা মধ্যে পার্থক্যযদি আমরা এই জাতীয় স্লাইস সম্পর্কে চিন্তা করি:
[pointer] [length] [capacity]
তারপর:
nil slice: [nil][0][0]
empty slice: [addr][0][0] // points to an address
নীল টুকরা
আপনি যখন এমন কোনও স্লাইস উপস্থাপন করতে চান যা বিদ্যমান নেই, যেমন সেগুলি কার্যকর যখন যেমন কোনও ফাংশনে কোনও ব্যতিক্রম ঘটে যখন স্লাইস ফেরত দেয়।
// Create a nil slice of integers. var slice []intখালি টুকরো
খালি সংকলনগুলি কার্যকর যখন আপনি একটি খালি সংগ্রহ উপস্থাপন করতে চান যেমন কোনও ডেটাবেস ক্যোয়ারী শূন্য ফলাফল প্রদান করে।
// Use make to create an empty slice of integers. slice := make([]int, 0) // Use a slice literal to create an empty slice of integers. slice := []int{}তথাপি আপনি যদি একটি শূন্য ফালি বা একটি খালি ফালি, বিল্ট-ইন ফাংশান ব্যবহার করছেন কিনা
append,lenএবংcapকাজ একই।
package main
import (
"fmt"
)
func main() {
var nil_slice []int
var empty_slice = []int{}
fmt.Println(nil_slice == nil, len(nil_slice), cap(nil_slice))
fmt.Println(empty_slice == nil, len(empty_slice), cap(empty_slice))
}
কপি করে প্রিন্ট:
true 0 0
false 0 0
makeকী ব্যবহার করে এক ধাপে খালি স্লাইসের ঠিকানা পেতে পারি ?
খালি স্লাইস এবং নীল স্লাইস গোতে আলাদাভাবে শুরু করা হয়:
var nilSlice []int
emptySlice1 := make([]int, 0)
emptySlice2 := []int{}
fmt.Println(nilSlice == nil) // true
fmt.Println(emptySlice1 == nil) // false
fmt.Println(emptySlice2 == nil) // false
তিনটি স্লাইস হিসাবে, লেন এবং ক্যাপ 0 হয়।
make([]int, 0)সেরা কারণ জেটব্রাইন্স গো ল্যান্ড এটি "অপ্রয়োজনীয়" হওয়ার বিষয়ে অভিযোগ করে না যেমন এটি ক্ষেত্রে ঘটে []int{}। এটি ইউনিট পরীক্ষা লেখার ক্ষেত্রে কার্যকর।
keys := make([]int, 0, len(m)); for k, v := range m { keys := append(keys,k) }