কীভাবে কাস্টম প্যাকেজ ব্যবহার করবেন


178

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

mylib.go

package mylib

type SomeType struct {

}

main.go

package main

import (
    "mylib"
)

func main() {

}

আমি যখন চেষ্টা করি তখন আমি go run main.goএই ত্রুটিটি পাই:

main.go:4:2: import "mylib": cannot find package

আমি go build mylib.goপ্রথমে চালানোর চেষ্টা করেছি কিন্তু মনে হচ্ছে এটি কিছুই করছে না (কোনও ফাইল উত্পন্ন হয়নি, কোনও ত্রুটি বার্তা নেই)। সুতরাং কোন ধারণা আমি কিভাবে এটি করতে পারে?


আমি কোনও গোপথ ভেরিয়েবল সেট করি নি, কেবল গুরূট।
লরেন্ট

1
প্রথম go installডিরেক্টরিতে চালান mylib, এবং আবার চেষ্টা করুন।
জো

1
আরও দেখুন এই থ্রেড
kostix

@ জো, এটি এখনও ভিতরে ভিতরে যান "ইনস্টল করুন" চালিয়ে কাজ করতে পারে না
শিকারি_টেক

উত্তর:


175

প্রথমে "গো কোড কীভাবে লিখবেন" ডকুমেন্টটি পড়তে এবং বুঝতে ভুলবেন না ।

আসল উত্তরটি আপনার "কাস্টম প্যাকেজ" এর প্রকৃতির উপর নির্ভর করে।

যদি এটি সাধারণ ব্যবহারের উদ্দেশ্যে হয়, তথাকথিত "গিথুব কোড লেআউট" নিয়োগের বিষয়টি বিবেচনা করুন । মূলত, আপনি আপনার গ্রন্থাগারটিকে আলাদা করুন makego get টেবিল প্রকল্প করেন।

আপনার লাইব্রেরি যদি অভ্যন্তরীণ ব্যবহারের জন্য হয় তবে আপনি এটির মতো যেতে পারেন:

  1. আপনার প্রকল্পের ডিরেক্টরিতে লাইব্রেরি ফাইলগুলির সাথে ডিরেক্টরিটি রাখুন।
  2. আপনার প্রকল্পের বাকী অংশে, লাইব্রেরিটির পথটি আপনার ওয়ার্কস্পেসের প্রকল্পের মূলের সাথে সম্পর্কিত ব্যবহার করে দেখুন।

প্রদর্শন করার জন্যে:

src/
  myproject/
    mylib/
      mylib.go
      ...
    main.go

এখন, শীর্ষ-স্তরে main.go, আপনি করতে পারেন import "myproject/mylib"এবং এটি ঠিক কাজ করবে।


1
যদি আমি এসসিআর / এর অধীনে একটি নতুন প্রকল্প (মাইপ্রজেক্ট 2) তৈরি করি তবে আমি কীভাবে মেলিব আমদানি করতে পারি?
কিরিল

2
@Kiril, আপনি বলতে চাচ্ছি, কিভাবে আপনি আমদানি না mylibএর কোডে myproject2? তারপরে উত্তরটি "ব্যবহার করে import "myproject/mylib"- ধারণাটি হ'ল যে প্রতিটি GOPATHপরিবেশের পরিবর্তনশীল থেকে এগুলি বের করে নেওয়া প্রতিটি ডিরেক্টরিের অধীনে আমদানীকৃত পাথ অনুসন্ধান করে (এগুলিকে" ওয়ার্কস্পেস "বলা হয়) তবে এই অনুসন্ধানটি (ভাগ্যক্রমে) পুনরাবৃত্ত নয়, সুতরাং এই জাতীয় পথগুলি তাদের নিজ নিজ কর্মক্ষেত্রে কার্যকরভাবে "নোঙ্গর করা"
কোস্টিক্স

4
আর একটি অবশ্যই পড়ে থাকতে হবে: "প্যাকেজের নাম"
kostix

1
@ মাথিয়াসসোমার, সাধারণত my প্রতিটি মাইক্রো সার্ভিস ব্যবহার করে এমন একটি সাধারণ প্যাকেজে মাইলিবটি বের করে। ঠিক কীভাবে "ব্যবহারগুলি" সংজ্ঞায়িত করা হয় তা আপনার পছন্দসই কর্মপ্রবাহের উপর নির্ভর করে। এন্টারপ্রাইজ গ্রেড উন্নয়ন সালে vendoring সাধারণত ব্যবহার করা হয়, কিন্তু সাম্প্রতিক সঙ্গে go modউন্নয়ন, একটি মডিউল উত্তর (এবং হতে পারে go modসমর্থন পাশাপাশি মডিউলগুলি vendoring)।
kostix

1
@ লিয়্যাং, "আমদানি করা প্যাকেজ" হল এক বা একাধিক গো সোর্স ফাইল সহ একটি ডিরেক্টরি। "কীভাবে একটি .lib ফাইলে প্যাকেজ তৈরি করবেন" এবং তারপরে lib ফাইলটি কীভাবে আমদানি করা যায় "- উত্তরটি আপনি কী জিজ্ঞাসা করতে চেয়েছিলেন তার উপর নির্ভর করে you're আপনি যদি সংকলনের গতি নিয়ে উদ্বিগ্ন হন তবে ভয় করবেন না: গো টুলচেন ক্যাশে । প্রতি প্যাকেজ ভিত্তিতে সব বিল্ড ফলাফল পারলে, এর পরিবর্তে, আপনি তা কম্পাইল করা সম্ভব জিজ্ঞাসা করতে চেয়েছিলেন এবং একটি বাইনারি শুধুমাত্র কম্পাইল প্যাকেজ বিতরণ, তারপর উত্তর কোন
kostix

68

এই জাতীয় ফোল্ডারের কাঠামোর জন্য:

main.go
mylib/
  mylib.go

সবচেয়ে সহজ উপায় হ'ল এটি ব্যবহার করা:

import (
    "./mylib"
)

1
প্যাকেজটি খুঁজে পাওয়া যাবেনা কারণ সর্বশেষ সংস্করণগুলিতে এটি আর কাজ করে না। সঠিক আমদানিটি হবে foo/mylib(মূলত.যুক্ত ফোল্ডারটি ধরে নেওয়া foo)।
নিমো

6
@ নেমো, সর্বশেষতম সংস্করণ সহ, আমি সর্বদা "./mylib" ব্যবহার করি এবং এটি কার্যকর হয়।
লরেন্ট

3
গো 1.2 ব্যবহার করুন এবং আমি @ this.lau_
কানাডাড্রি

8
সচেতন হন যে এটি go installবিরতি দেয়। আপনি যদি এমন একটি স্ট্যান্ডলোন প্রজেক্ট তৈরি করেন যা আপনি লোকেরা ডাউনলোড করে চালিয়ে যেতে চান go buildতবে এটি ঠিক আছে - তবে আমি সম্পূর্ণ go installসমর্থন চাইলে উপরে বর্ণিত "গিথুব কোড লেআউট" ব্যবহার করব (বিটবাকেট বন্ধ থাকলেও বা অনুরূপ) ।
photoionized

আমি পরামর্শ দিচ্ছি যে এভাবে ব্যবহার করবেন না। এটা গোডেফ ভেঙে ফেলবে এটি "সম্পর্কে বুঝতে পারে না" " আমদানি
কিং জে কে

6

গিটহাবে হোস্ট করা একটি প্রকল্পের জন্য, লোকেরা সাধারণত যা করেন তা এখানে's

github.com/
  laike9m/
    myproject/
      mylib/
        mylib.go
        ...
      main.go

mylib.go

package mylib

...

main.go

import "github.com/laike9m/myproject/mylib"

...

6

আমি একজন অভিজ্ঞ প্রোগ্রামার, তবে গো ওয়ার্ল্ডে একেবারে নতুন! এবং আমি স্বীকার করি গো বুঝতে কিছু সমস্যার মুখোমুখি হয়েছি ... সাব-ফোল্ডারে আমার গো ফাইলগুলি সংগঠিত করার চেষ্টা করার সময় আমি এই একই সমস্যার মুখোমুখি হয়েছিলাম। আমি যেভাবে এটি করেছি:

জিও_ডাইরেক্টরি (assigned গোপথের জন্য নির্ধারিত এক)

GO_Directory //the one assigned to $GOPATH
__MyProject
_____ main.go
_____ Entites
_____ Fiboo // in my case, fiboo is a database name
_________ Client.go // in my case, Client is a table name

মাইপ্রজেক্ট \ সত্ত্বা \ ফিবু \ ক্লায়েন্ট.গো ফাইল ফাইল করুন

package Fiboo

type Client struct{
    ID int
    name string
}

ফাইলে মাইপ্রজেক্ট \ main.go

package main

import(
    Fiboo "./Entity/Fiboo" 
)

var TableClient  Fiboo.Client

func main(){
    TableClient.ID = 1
    TableClient.name = 'Hugo'

    // do your things here
}

(আমি উবুন্টু 16.04 এ Go 1.9 চালাচ্ছি)

এবং ছেলেরা মনে রাখবেন, আমি গো-এ নবাগত। আমি যা করছি তা যদি খারাপ অভ্যাস হয় তবে আমাকে জানান!


3

অন্য সমাধান:
যোগ করুনsrc/myproject $ গোপথে ।

তারপর import "mylib"সংকলন করা হবে।


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