গোলং “অপরিজ্ঞাত” ফাংশনটি অন্য একটি ফাইলে ঘোষিত হয়েছে?


135

আমি একটি বেসিক গো প্রোগ্রাম লেখার চেষ্টা করছি যা বিভিন্ন ফাইলে একটি ফাংশনকে কল করে তবে একই প্যাকেজের একটি অংশ। তবে, এটি ফিরে আসে:

undefined: NewEmployee

উত্স কোডটি এখানে:

main.go:

package main

func main() {
emp := NewEmployee()    
}

employee.go:

package main

type Employee struct {
    name string
    age int
}   

func NewEmployee() *Employee {
    p := &Employee{}
    return p
}

func PrintEmployee (p *Employee)  {
    return "Hello world!"
}

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

8
আপনি ব্যবহার করছেন go run? (এবং দেখতে golang.org/doc/code.html )
JimB

1
@ জুয়ানম, আমার প্রশ্নটি ছিল যে এর সম্পূর্ণ উত্স main.goএবং employee.go? কারণ সমস্ত গো ফাইলের একটি প্যাকেজ স্টেটমেন্ট থাকার কথা, এবং আমি আপনার কোনও দেখতে পাচ্ছি না। দেখুন: golang.org/doc/code.html# প্যাকেজ নাম
ক্রিস

1
কর্মচারী.গো সর্বশেষ কাজটি ভুল (কোনও ফাংশনের নাম, কোনও রিটার্নের প্রকার ঘোষণা করা হয়নি)। এটি আপনি যে সমস্যাটি চেয়েছেন তা নয়, তবে এটি আরও দেখায় যে আরও বেশি সমস্যা রয়েছে। সংকলনের সময় আপনি কি সম্পূর্ণ কোড এবং সম্পূর্ণ ত্রুটি পোস্ট করতে পারেন?
সিরিটিং

1
তাহলে আমাদের আপনি কি করছেন তা দেখান! গোপথ, আসল কোড এবং আপনি কীভাবে সরঞ্জামটি চালাচ্ছেন go
জিম্ব

উত্তর:


172

দয়া করে "কীভাবে কোড লিখবেন" পড়ুন

/srcআপনার ব্যবহার করবেন না GOPATH। প্যাকেজগুলি অবস্থিত $GOPATH/src

জন্য buildবা installআপনি একটি প্যাকেজ ডিরেক্টরির মধ্যে আপনার ফাইল থাকতে হবে।

এর জন্য go run, আপনাকে যুক্তি হিসাবে সমস্ত ফাইল সরবরাহ করতে হবে:

go run main.go employee.go

তবে, আপনার প্রায় সবসময় ব্যবহার করা উচিত go install, বা go build(এবং অগ্রাধিকার হিসাবে পূর্ববর্তী, go buildঅ-প্রধান প্যাকেজগুলির সাথে কাজ করার সময় বিভ্রান্তির কারণ হিসাবে )


জিমবি ইনপুট দেওয়ার জন্য ধন্যবাদ! আমি এনভায়রনমেন্ট ভেরিয়েবলগুলি সম্পাদনা করেছি (আমিও গবিন সেট করতে ভুলে গিয়েছিলাম), আমার ফাইলগুলি সঠিক জায়গায় সরিয়ে নিয়েছি, তবে এখনও যখন আমি ইনস্টল যাওয়ার চেষ্টা করি তখন আমি একই ত্রুটি পাই। কোনও পরামর্শ?
জুয়ান এম

আপনি কি নিশ্চিত যে অন্য কোনও ত্রুটি আছে? আপনার কর্মচারী.গো ফাইলটি সেভাবে সংকলন করতে পারে না। অন্যথায়, আপনি ঠিক কী করছেন তা আমার দেখতে হবে । সঠিক পাথ, অনুরোধ, ইত্যাদি
জিম্ব

8
অথবা $ যান চালান * .গো
পুরান

$ go run *.goসমস্ত ফাইল চালানোর পরিবর্তে রান করা শর্টকাট হতে পারে
অফারনি

60

আমার কেবল গোল্যান্ডে একই সমস্যা ছিল (যা গো এর জন্য ইন্টেলিজ আইডিইএ) এবং একটি সমাধানের কাজ করে। আপনি পরিবর্তন করতে হবে Run kindথেকে Fileথেকে Packageবা Directory। আপনি যদি Run/Editকনফিগারেশনে যান তবে আপনি এটি কোনও ড্রপ-ডাউন থেকে চয়ন করতে পারেন ।

উদাহরণ: প্যাকেজের জন্য ~/go/src/a_package, একটি ব্যবহার Package pathএর a_packageএকটি Directoryএর ~/go/src/a_packageএবং Run kindএর Packageবা Directory


1
আপনাকে ধন্যবাদ, আমি এটিই খুঁজছিলাম দয়া করে উল্লেখ করুন যে আপনার উত্তরটি ইন্টেলিজ আইডিইএ সম্পর্কিত।
কিভাগান্ট

12

আপনি যদি ব্যবহার করছেন go run, করবেন go run *.go। এটি স্বয়ংক্রিয়ভাবে বর্তমান ওয়ার্কিং ডিরেক্টরিতে সমস্ত গো ফাইলগুলি সন্ধান করবে, সংকলন করবে এবং তারপরে আপনার মূল ফাংশনটি চালাবে।


এইভাবে এটি করার জন্য কোনও পতন আছে? এটি ওপিএস প্রশ্নের সহজ উত্তর বলে মনে হচ্ছে।
স্ট্যাভ্রোস_


8

আপনি অনুসরণের একটি চেষ্টা করতে পারেন।

পদ্ধতি 01 : ধরে নিন যে আপনার প্রকল্পের নামMyProject

  • আপনার পথে যান, টাইপ করুন go build এবং এন্টার চাপুন।
  • এটি আপনার প্রকল্পের নাম হিসাবে "এক্সিকিউটেবল ফাইল তৈরি করে (" আমারপ্রজেক্ট ")
  • তারপরে আপনার টার্মিনালে টাইপ করুন ./MyProjectএবং এন্টার টিপুন

আপনি টাইপ করে একবারে উভয় পদক্ষেপ করতে পারেন go build && ./MyProject। এটি আপনার প্রকল্পটি সবার সাথে সঠিকভাবে পরিচালিত করবেgo ফাইলটি ফাইলের ।

পদ্ধতি 02

শুধু টাইপ করুন go run *.goএবং এন্টার লিখুন। এটি আপনার সমস্ত কার্যকর করবে go files

আশা করি এটি কারও সাহায্য করবে।


4

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


1

আমি একই ইস্যু নিয়ে দৌড়েছি Go11 , কেবল অন্যদের একই সমস্যার সমাধান হওয়ার ক্ষেত্রে সাহায্য করার জন্য আমি কীভাবে এটি সমাধান করেছি তা ভাগ করে নিতে চেয়েছিলাম।

আমার বাইরে আমার গো প্রকল্প ছিল $GOPATH, সুতরাং GO111MODULE=onএই বিকল্পটি চালু না করেই আমাকে চালু করতে হবে, এটি আপনাকে এই সমস্যাটি দেবে; এমনকি আপনি যদি পুরোটি তৈরি বা পরীক্ষার চেষ্টা করেন packageবা directoryএটি সমাধান না করেGO111MODULE=on


1

আপনি যদি অনুসরণ না করেন তবে আপনাকে এখনই গো মডিউলগুলি ব্যবহার করা উচিত কীভাবে গো কোড লিখবেন

গো মডিউলের সাথে আপনাকে কোডটি $ GOPATH / src এ রাখতে হবে না। এটি অন্য যে কোনও স্থানেও থাকতে পারে।

আপনি কোডটি / কর্মচারীর মতো বিভিন্ন ডিরেক্টরিতে স্থানান্তর করতে পারেন, এটি কর্মচারী ডিরেক্টরিতে কাজ করার জন্য গো মডিউলটি আরম্ভ করুন

go mod init example.com/employee

0

যদি আপনার উত্স ফোল্ডারটি কাঠামোযুক্ত / গো / এসআরসি / ব্লগ হয় (ধরে নিলে আপনার উত্স ফোল্ডারের নামটি ব্লগ।

  1. সিডি / গো / এসসিআর / ব্লগ ... (আপনার প্যাকেজটি যে ফোল্ডারের অভ্যন্তরে রয়েছে সিডি)
  2. ইনস্টল করুন
  3. ব্লগ

এটি আপনার সমস্ত ফাইল একই সাথে চালানো উচিত, পরিবর্তে আপনার নিজের হাতে ফাইলগুলি তালিকাভুক্ত করা বা কমান্ড লাইনে একটি পদ্ধতি "বশিং" করা উচিত।


0

go run .আপনার সমস্ত ফাইল চালাবে। এন্ট্রি পয়েন্ট হ'ল ফাংশন main()যা mainপ্যাকেজের জন্য স্বতন্ত্র হতে হবে ।

আরেকটি বিকল্প হ'ল বাইনারিটি তৈরি করে go buildএটি চালানো।


0

go run *.goআপনার প্যাকেজের সমস্ত গো ফাইলগুলি কার্যকর করতে কমান্ডটি ব্যবহার করুন !


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