রানটাইম ত্রুটি: শূন্য মানচিত্রে প্রবেশের অ্যাসাইনমেন্ট


105

আমি একটি মানচিত্র উত্পন্ন করার চেষ্টা করছি এবং তারপরে এটিকে यমল ফাইলে রূপান্তর করব:

uid :
      kasi:
        cn: Chaithra
        street: fkmp
      nandan:
        cn: Chaithra
        street: fkmp
      remya:
        cn: Chaithra
        street: fkmp

আমি মনে করি মানচিত্র তৈরি করার সময় আমি গুরুত্বপূর্ণ কিছু মিস করছি। আমার কোডটি নীচে।

package main

import (
    "fmt"
    "gopkg.in/yaml.v2"
)

type T struct {
    cn     string
    street string
}

func main() {
    names := []string{"kasi", "remya", "nandan"}

    m := make(map[string]map[string]T, len(names))
    for _, name := range names {

        //t := T{cn: "Chaithra", street: "fkmp"}

        m["uid"][name] = T{cn: "Chaithra", street: "fkmp"}

    }
    fmt.Println(m)

    y, _ := yaml.Marshal(&m)

    fmt.Println(string(y))
    //fmt.Println(m, names)
}

এটি নিম্নলিখিত ত্রুটিটি দিচ্ছে:

panic: runtime error: assignment to entry in nil map

উত্তর:


144

আপনি আপনার অভ্যন্তরীণ মানচিত্রটি আরম্ভ করেননি। আপনার লুপের আগে আপনি m["uid"] = make(map[string]T)নাম যুক্ত করতে পারেন এবং তারপরে নামটি নির্ধারণ করতে পারেন ।


25

মানচিত্রটি শূন্য কিনা তা আপনার পরীক্ষা করা উচিত এবং এটি লুপের অভ্যন্তরে শূন্য হলে এটি আরম্ভ করুন:

if m["uid"] == nil {
    m["uid"] = map[string]T{}
}

4

ত্রুটি অনুযায়ী জিনিস আছে

assignment to entry in nil map

গভীর স্তরের কী বরাদ্দকালে নেস্টেড মানচিত্রের জন্য আমাদের নিশ্চিত হওয়া দরকার যে এর বাইরের কীটির মূল্য আছে। অন্যথায় এটি বলবে যে মানচিত্রটি শূন্য। যেমন আপনার ক্ষেত্রে

m := make(map[string]map[string]T, len(names))

মি একটি নেস্টেড মানচিত্র যাতে মান stringসহ কী রয়েছে map[string]T। এবং আপনি মান নির্ধারণ করা হয়

m["uid"][name] = T{cn: "Chaithra", street: "fkmp"}

এখানে আপনি দেখতে পারেন m["uid"]হয় nilএবং আমরা চিঠিতে হয় এটি একটি মান রয়েছে [name]যা ধরনের নেস্টেড মান করার জন্য একটি চাবিকাঠি T। সুতরাং প্রথমে আপনাকে "uid" এর মান নির্ধারণ করতে হবে বা এটি হিসাবে আরম্ভ করতে হবে

m["uid"] = make(map[string]T)

0

@ ম্যাকপোক ইতিমধ্যে প্রশ্নের উত্তর দিয়েছেন। কিছু অতিরিক্ত তথ্য যুক্ত করছি।

মানচিত্রের প্রকারগুলি হ'ল রেফারেন্স ধরণের, যেমন পয়েন্টার বা স্লাইস, এবং তাই উপরের মিটার মানটি শূন্য; এটি কোনও প্রাথমিক মানচিত্রে নির্দেশ করে না। একটি শূন্য মানচিত্র পড়ার সময় একটি খালি মানচিত্রের মতো আচরণ করে, তবে শূন্য মানচিত্রে লেখার চেষ্টা করলে রানটাইম আতঙ্ক দেখা দেয়; এটা করবেন না। মানচিত্র সম্পর্কে আরও তথ্য

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.