গোলং অব্যবহৃত আমদানি ত্রুটি কীভাবে অক্ষম করবেন


99

ডিফল্টরূপে, গো আপনাকে আমদানি মুছতে বাধ্য করে, অব্যবহৃত আমদানিকে ত্রুটি হিসাবে বিবেচনা করে। আমি জানতে চাই যে এই আচরণে পরিবর্তনের কোনও আশা রয়েছে কিনা, উদাহরণস্বরূপ এটি সতর্কবাণীতে হ্রাস করুন।

আমি এই সমস্যাকে অত্যন্ত বিরক্তিকর বলে মনে করি, গোয়ে কোডিং উপভোগ করা থেকে বিরত রেখেছি।

উদাহরণস্বরূপ, আমি একটি কোড / ফাংশন অক্ষম করে কিছু কোড পরীক্ষা করছিলাম। একটি লিব থেকে কিছু ফাংশন আর ব্যবহার করা হয় না (যেমন, এফএমটি, ত্রুটি, যাই হোক না কেন), তবে সামান্য পরীক্ষার পরে আমার ফাংশনটি পুনরায় সক্ষম করতে হবে। আমি এইসব আমদানি অপসারণ না করে এখন প্রোগ্রামটি সংকলন করবে না এবং কয়েক মিনিট পরে আমাকে পুনরায় আমদানি করতে হবে।

জিএই প্রোগ্রাম তৈরি করার সময় আমি বারবার এই প্রক্রিয়াটি করছিলাম।


4
আপনার কোডগুলিতে অব্যবহৃত আমদানিগুলি ছেড়ে দেওয়া ভাল ধারণা নয় তবে আপনি কেবল সাময়িকভাবে এগুলি মন্তব্য করতে পারেন।
এলিথার

74
আমি সম্মত হলাম অব্যবহৃত আমদানি ছেড়ে দেওয়া ভাল ধারণা নয় তবে প্রোগ্রামারর অভাবে অহেতুক এই জাতীয় কাজ করার প্রচেষ্টা নষ্ট করা একটি খারাপ ধারণা বিশেষত যখন কোনও কিছু পরীক্ষা করার সময় এটি ঘটে প্রায়শই ঘটে। এই ডাউন ভোটিংদের অবশ্যই জিওর প্রতি আমার মনোভাবের জন্য ভোট দেওয়া উচিত।
নিক

6
এটি একটি বৈশিষ্ট্য, বাগ নয়
বেটগ্যামিট

4
অব্যবহৃত আমদানি অপসারণ করা ভাল জিনিস। অনেক স্টাইল গাইড রয়েছে যা সমস্ত সতর্কতাগুলিকে ত্রুটি হিসাবে বিবেচনা করা প্রয়োজন, সুতরাং একটি নতুন সতর্কতা যুক্ত করা সাধারণত একটি খারাপ ধারণা। সম্ভবত কোনও দেবদেব পতাকা একটি সম্ভাব্য আপস হতে পারে, তবে এটি কার্যকর var _ = <module>.Functionকাজ করে এবং এটি সাধারণ অনুশীলন থেকে রোধ করার পক্ষে এটি যথেষ্ট স্পষ্টিকর ।
deft_code

4
যেহেতু কেউ নীচের উত্তরগুলিতে স্পর্শ করছে, আমি প্রস্তাব দিচ্ছি যে আপনি একটি আইডিই ব্যবহার করুন যা আমদানি পরিচালনা করে (গোগল্যান্ড, লাইটাইড, ইত্যাদি several বেশ কয়েকটি রয়েছে), অথবা goimportsআপনার বিল্ডিং প্রক্রিয়াটিতে একটি পদক্ষেপ হিসাবে রয়েছে। এগুলির কোনও একটি ছাড়া এটি সত্যই দ্রুত পুরানো হয়ে যায়।
জোসেফ গ্রাহন

উত্তর:


40

_প্যাকেজের নামের আগে একটি আন্ডারস্কোর ( ) যুক্ত করা অব্যবহৃত আমদানি ত্রুটিটিকে উপেক্ষা করবে।

আপনি কীভাবে এটি ব্যবহার করতে পারেন তার একটি উদাহরণ এখানে দেওয়া হয়েছে:

import (
    "log"
    "database/sql"

    _ "github.com/go-sql-driver/mysql"
)

একমাত্র প্যাকেজটিকে এর পার্শ্ব-প্রতিক্রিয়া (ইনিশিয়ালাইজেশন) এর জন্য আমদানি করতে, ফাঁকা শনাক্তকারীকে সুস্পষ্ট প্যাকেজের নাম হিসাবে ব্যবহার করুন।

Https://golang.org/ref/spec#Import_declaration এ আরও দেখুন


এটা সঠিক উত্তর. GoLang স্পেসিফিকেশন ডকের ভিত্তিতে, এটি কেবলমাত্র পার্শ্ব-প্রতিক্রিয়া (আরম্ভকরণ) এর জন্য কোনও প্যাকেজ আমদানি করার জন্য ব্যবহার করা হবে is GoLang ফটকা খেলা ডক এখানে: golang.org/ref/spec#Import_declarations
উইল

কেবল চমত্কার। এটি গোলাংয়ের ক্ষেত্রে নতুন দশটি শীর্ষস্থানীয় জিনিসের তালিকা থাকা উচিত। ধন্যবাদ!
জেএম জানজেন

13
খুব দরকারী না। এর সাথে সমস্যাটি হ'ল আপনি যদি পরে আমদানিটি আবার ব্যবহার করতে চান তবে আপনাকে অবশ্যই তা অপসারণ করতে হবে _(অন্যথায় প্যাকেজটির কোনও নাম নেই বলে রেফারেন্স করা যায় না)। আপনি যদি এমনটি করতে যাচ্ছেন তবে আপনি কেবল মন্তব্য / অসন্তুষ্ট হতে পারেন। var _ = ...কৌতুক এই সমস্যা নেই।
EM0

আপনি যদি "fmt"গোগল্যান্ডে আন্ডারস্কোর যুক্ত করেন তবে এটি স্বয়ংক্রিয়ভাবে যুক্ত হয় "fmt"যাতে আপনার উভয়ই থাকে _"fmt"এবং "fmt"যা এই
আইডিইতে

26

var _ = fmt.Printfকৌতুক এখানে সহায়ক।


আমি এই সমাধান ভালোবাসি। এটিকে অনাকাঙ্ক্ষিত করে তুলতে এটি যথেষ্ট কুৎসিত, তবে এটি যদি আপনার সত্যিই প্রয়োজন হয় তবে এটি সেখানে কাজ করে।
deft_code

4
আরও তথ্যের জন্য দয়া করে এই লিঙ্কটি দেখুন tip.golang.org/doc/effective_go.html#blank_unused
দীপক সিং রাওয়াত

4
এই মুহুর্তে এটি সহায়ক, তবে যখন আমি এই কৌশলটি ব্যবহার করি তখন আমি আর ফিরে না গিয়ে অব্যবহৃত ফাঁকা শনাক্তকারীকে পরে মুছে ফেলার প্রবণতা করি না, যখন আমদানি সত্যই দীর্ঘমেয়াদে ব্যবহারের ইচ্ছা করি না তখন আমদানি আটকে থাকে stick গোপিমপোর্টস এর মতো একটি সরঞ্জাম ব্যবহার করা আসল সমস্যার সমাধান করেছে এবং নিশ্চিত করে যে আমার আমদানি সর্বদা সর্বনিম্ন এবং পরিষ্কার।
এমডিহটকাট

এখনও আমার মতে একটি বোকা হ্যাক, যদিও এটি করা সম্ভবত সবচেয়ে দক্ষ জিনিস।
অ্যান্টনি

+1 কারণ এটি ফাইলের যে কোনও জায়গায় করা যেতে পারে , যা সাধারণত একটি ভয়ংকর ধারণা হতে পারে তবে importবিবৃতিতে পৌঁছানোর জন্য আপনাকে ফাইলটি চারপাশে ঝাঁপিয়ে পড়া থেকে বাঁচানোর জন্য সত্যই দরকারী এবং যখন আপনি কেবল সংকলন বা পরীক্ষা করার চেষ্টা করছেন এমন কিছু কোড ফাইল যা আপনি পুনরাবৃত্তভাবে মশাল করছেন।
mtraceur

22

আমি একই সমস্যা আছে। আমি কেন অব্যবহৃত আমদানি এবং ভেরিয়েবলগুলি অস্বীকার করার জন্য ভাষাটি প্রয়োগ করেছিলাম তার যুক্তিটি আমি বুঝতে পারি তবে আমার কোডটি লেখার সময় আমি ব্যক্তিগতভাবে এই বৈশিষ্ট্যটিকে বিরক্তিকর বলে মনে করি। এটি পেতে, আমি আমার কোডারে অব্যবহৃত ভেরিয়েবল এবং আমদানির অনুমতি দেওয়ার জন্য alচ্ছিক পতাকাগুলি অনুমতি দেওয়ার জন্য আমার সংকলকটির চারপাশে পরিবর্তন করেছি।

আপনি যদি আগ্রহী হন তবে https://github.com/dtnewman/modified_golang_compiler এ এটি দেখতে পারেন

এখন, আমি কেবল কমান্ডের সাহায্যে কোড চালাতে পারি যেমন go -gcflags '-unused_pkgs' test.go এবং এটি এই "অব্যবহৃত আমদানি" ত্রুটিগুলিকে ফেলে দেবে না। যদি আমি এই পতাকাগুলি ছেড়ে চলে যাই তবে এটি অব্যবহৃত আমদানি না করার ডিফল্টতে ফিরে আসে।

এটি করার জন্য কেবল কয়েকটি সাধারণ পরিবর্তন প্রয়োজন। অব্যবহৃত ভেরিয়েবল / আমদানি না করার উপযুক্ত কারণ রয়েছে বলে গো পুরিস্টরা সম্ভবত খুশি হবেন না, তবে আমি ব্যক্তিগতভাবে আপনার সাথে একমত হই যে এই সমস্যাটি গোয়ে কোডে খুব কম উপভোগযোগ্য করে তুলেছে এই কারণেই আমি আমার এই পরিবর্তনগুলি করেছি সংকলক


4
আমি ১.6 প্রকাশের সাথেও একই কাজ করেছি, আগ্রহী কিনা তা এখানে দেখুন: নথি : কিছু পরীক্ষা ব্যর্থ হবে
রন ই

4
আমি এর পিছনে ধারণা পছন্দ করি। আমি দেখতে পাচ্ছি যে আপনার কাঁটাটি এখনও 1.2 সংস্করণে রয়েছে, এটি এটি অকেজো করে তোলে। এটি স্ট্যান্ডার্ড গো সংকলনে অন্তত অন্তর্ভুক্ত করা উচিত, যাতে কমপক্ষে go run main.goত্রুটিগুলি ডিফল্টরূপে অক্ষম করে go build। এইভাবে এটি ব্যবহার করে বিকাশ করা সহজ go runএবং যখন উত্পাদনের সময় তৈরির সময় হবে তখনও আপনি আপনার কোড সাফ করতে বাধ্য হন।
kramer65

17

গিম্পোর্টস ব্যবহার করুন । এটি মূলত gofmtব্র্যাড ফিটজপ্যাট্রিকের লেখা একটি কাঁটাচামচ এবং এখন গো সরঞ্জামগুলির প্যাকেজগুলিতে অন্তর্ভুক্ত। আপনি যখনই কোনও ফাইল সংরক্ষণ করেন তখন আপনি এডিটরটি চালনার জন্য এটি কনফিগার করতে পারেন। এই সমস্যাটি নিয়ে আপনাকে আর কখনও চিন্তা করতে হবে না।


5

আপনি fmtযখন বিকাশ এবং পরীক্ষার সময় কনসোলের জন্য সাধারণ মুদ্রণের জন্য প্যাকেজটি ব্যবহার করছেন তবে লগ প্যাকেজে আপনি আরও ভাল সমাধান পেতে পারেন ।


4
বা অন্তর্নির্মিত ফাংশন printlnযা লোকেরা সবসময় ভুলে যায় বলে মনে হয়।
ম্যাট্রিক্সফ্রোগ

4
@ ম্যাট্রিক্সফ্রোগ দীর্ঘমেয়াদে, এই ফাংশনগুলির উপর ভিত্তি করে গড়ে তোলা ভাল ধারণা নয় কারণ তারা সময়ের সাথে সাথে বিলুপ্ত হতে পারে। লগ ব্যবহার করা একটি ভাল ধারণা কারণ আপনি এটি রাখতে পারেন এবং এটি স্ট্যান্ডার্ড লাইব্রেরির অংশ এবং এটি অপসারণের সম্ভাবনা নেই। দেখুন বৈশিষ্ট বিস্তারিত জানার জন্য।
নিমো

4
বিল্টিন println?? আমার জন্য এটাই সংবাদ. এটি কি নিঃসংশ্লিষ্ট? আমি এটি কোথাও খুঁজে পাচ্ছি না।
ম্যাট

4
@ নমো ভাল পয়েন্ট। যখন আপনাকে দ্রুত ওয়ান-অফ হিসাবে কিছু মুদ্রণ করা দরকার তখন তারা এগুলি নিখুঁত actually
ম্যাট্রিক্সফ্রোগ

4
@ মার্টিনটর্নোইজ - আমি একমত নই এই সমাধানটি আমি অবশেষে যখন 5 বছর আগে এই সমস্যাটি পেয়েছিলাম তখন খুঁজে পেলাম এবং 5+ টি উন্নত দ্বারা এটি অন্যকে স্পষ্টভাবে সহায়তা করেছে। fmtলগিংয়ের জন্য প্যাকেজটি ব্যবহার করে আমি একজন নবাগত ছিলাম, অজানা ছিলাম যে একটি রেডিমেড লগিং প্যাকেজ রয়েছে।
ल्डকুরিমডজিয়ন

5

ব্যবহার করুন if false { ... }থেকে মন্তব্য কিছু কোড। ধনুর্বন্ধনী ভিতরে কোড অবশ্যই সিনথেটিকভাবে সঠিক হতে হবে, তবে অন্যথায় ননসেন্স কোড হতে পারে।


4
চিহ্নগুলি সিন্টেক্সের বেশী সঠিক কোন উল্লেখ ভেরিয়েবল (যেমন foo.Bar) থাকা আবশ্যক, ইত্যাদি
ড্রাগন

এটি খুব পরিষ্কার বা অভিহিতিকর নয়। গো যেভাবে ডিজাইন করা হয়েছিল তার কারণ রয়েছে
এসিডিক 9

4
এটি একটি দুর্দান্ত কৌশল যখন কোনও স্ক্রিপ্ট বিকাশ করার সময় বা গোলাংয়ের এপিআইগুলি অন্বেষণ করার সময় জিনিসগুলি চেষ্টা করে। ধন্যবাদ টপস্কিপ!
জে টেলর

2

প্রচুর লোক ইতিমধ্যে বৈধ সমর্থনযোগ্যতার সাথে মন্তব্য করেছে এবং আমি মূল লেখকের উদ্দেশ্যকেও স্বীকার করি। যাইহোক, রব পাইক বিভিন্ন ফোরামে উল্লেখ করেছেন যে গো প্রক্রিয়াগুলি সরলকরণের ফলাফল যা অন্য কয়েকটি মূলধারার প্রোগ্রামিং ভাষার অভাব বা অর্জন সহজ নয়। এটি গো এর ভাষা শব্দার্থবিদ্যা পাশাপাশি সংকলনটি আরও দ্রুত তৈরি করার জন্য, অনেকগুলি জিনিস গৃহীত হয় যা প্রাথমিকভাবে অক্ষম বলে মনে হয়।

এটি সংক্ষিপ্ত করার জন্য, অব্যবহৃত আমদানিগুলি গোটিকে ত্রুটি হিসাবে বিবেচনা করা হয় কারণ এটি প্রোগ্রামটি ব্লট করে এবং সংকলনটি ধীর করে দেয়। পার্শ্ব প্রতিক্রিয়া (_) এর জন্য আমদানি করা একটি কাজ হিসাবে বিবেচিত, তবে আমি কখনও কখনও এই বিভ্রান্তিকর বিষয়টি দেখতে পাই যখন ডিবাগিং / পরীক্ষার উদ্দেশ্যে বিশুদ্ধভাবে আমদানি করা পার্শ্ব প্রতিক্রিয়াগুলির সাথে পার্শ্ব প্রতিক্রিয়াগুলির সাথে বৈধ আমদানির মিশ্রণ থাকে বিশেষত যখন কোড বেস থাকে বড় এবং অবিচ্ছিন্নভাবে মুছে ফেলার এবং না মুছার সুযোগ রয়েছে যা পরে অন্য প্রকৌশলী / পর্যালোচকদের বিভ্রান্ত করতে পারে। আমি অব্যবহৃত লোকদের মন্তব্য করতাম, তবে, ভিএস কোড এবং গোল্যান্ডের মতো জনপ্রিয় আইডিই goimportsসহজেই ব্যবহার করতে পারে যা আমদানি সন্নিবেশ এবং মোছার কাজটি বেশ ভালভাবে করে। আরও তথ্যের জন্য দয়া করে লিঙ্কটি দেখুন, https://golang.org/doc/effective_go.html#blank_import


এর জন্য ধন্যবাদ! আমি আপনার প্রতিক্রিয়াতে পোস্ট করা ইউআরএল থেকে কোডের লাইনটি স্পষ্টভাবে কপি-পেস্ট করার পরামর্শ দিচ্ছি পার্শ্ব-প্রতিক্রিয়াটির জন্য আমদানি করার একটি নিদর্শন উদাহরণ হিসাবে: import _ "net/http/pprof"
ড্রাগন

4
আপনার পরামর্শের জন্য @ ড্রাগন ধন্যবাদ! যেহেতু আমি নতুন অবদানকারী, তাই আপনার মতো লোকের সহায়তায়, আমি আমার পোস্টগুলি দিয়ে দ্রুত আরও ভাল হয়ে উঠব।
এসবিচর

-1

এটি আপনার নথির উপরে রাখুন এবং অব্যবহৃত আমদানিগুলি ভুলে যান:

import (
    "bufio"
    "fmt"
    "os"
    "path/filepath"
)

var _, _, _, _ = fmt.Println, bufio.NewReader, os.Open, filepath.IsAbs

4
আপনি যদি সত্যিই এটি করতে চান তবে কম্পাইলারটি ডেড কোড উত্পন্ন করার _পরিবর্তে গ্লোবাল ভেরিয়েবলগুলি ব্যবহার করুন (উদাহরণস্বরূপ, প্রতি লাইনে একটি প্যাকেজ অথবা আপনি যদি জেদ করেন তবে সব মিলিয়ে পছন্দ করুন var _, _, _, _ = fmt.Println, bufio.NewReader, os.Open, filepath.IsAbs:)। তবে এটি করবেন না, কেবল ব্যবহার করুন goimports
ডেভ সি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.