इससे क्या होता है '।' (डॉट या पीरियड) गो इंपोर्टेंट स्टेटमेंट में क्या करते हैं?


135

गो ट्यूटोरियल, और अधिकांश गो कोड मैंने देखा है, पैकेज इस तरह से आयात किए जाते हैं:

import (
    "fmt"
    "os"
    "launchpad.net/lpad"
    ...
)

लेकिन http://bazaar.launchpad.net/~niemeyer/lpad/trunk/view/head:/session_test.go में , gocheck पैकेज एक .(अवधि) के साथ आयात किया जाता है :

import (
    "http"
    . "launchpad.net/gocheck"
    "launchpad.net/lpad"
    "os"    
)

.(अवधि) का क्या महत्व है ?


22
ध्यान दें, मैंने प्रश्न और खोज की अवधि को आसान बनाने के लिए बिंदु और अवधि जोड़ी।
जारेड फरिश

जवाबों:


182

यह आयातित पैकेज में पहचानकर्ताओं को क्वालीफायर के बिना स्थानीय फ़ाइल ब्लॉक में संदर्भित करने की अनुमति देता है।

यदि एक नाम के बजाय एक स्पष्ट अवधि (?) दिखाई देती है, तो सभी पैकेज के निर्यात किए गए पहचानकर्ता वर्तमान फ़ाइल के फ़ाइल ब्लॉक में घोषित किए जाएंगे और एक क्वालीफायर के बिना एक्सेस किए जा सकते हैं।

मान लें कि हमने पैकेज क्लॉज पैकेज गणित युक्त एक पैकेज संकलित किया है, जो फ़ंक्शन पाप का निर्यात करता है, और "lib / गणित" द्वारा पहचानी गई फ़ाइल में संकलित पैकेज स्थापित किया है। यह तालिका दर्शाती है कि विभिन्न प्रकार के आयात घोषणा के बाद पैकेज को आयात करने वाली फाइलों में पाप को कैसे पहुँचा जा सकता है।

Import declaration          Local name of Sin

import   "lib/math"         math.Sin
import M "lib/math"         M.Sin
import . "lib/math"         Sin

Ref: http://golang.org/doc/go_spec.html#Import_declarations


29
यह ध्यान दिया जाना चाहिए कि गो टीम डॉट आयात का उपयोग करने की अनुशंसा नहीं करती है। यह कुछ मामलों में कुछ अजीब व्यवहार का कारण बन सकता है और भाषा में अनिश्चित काल तक नहीं हो सकता है।
jimt

यह कुछ परिदृश्यों में भ्रामक हो सकता है, लेकिन मैं इसे go-linq का उपयोग करने में खड़ा नहीं कर सका। github.com/ahmetalpbalkan/go-linq
steviesama

ध्यान दें कि आप अभी भी गैर-निर्यात कार्यों (गैर-अपरकेस फ़ंक्शन) तक पहुँच प्राप्त नहीं कर सकते हैं। तो आयात करने का यह तरीका वास्तव में बेकार है।
डेविड David वोंग

1
डॉट आयात का उपयोग करके किसी प्रोग्राम को संकलित करते समय बनाम डॉट आयात का उपयोग न करें। यदि फ़ाइल आकार संकलित करने में कोई बड़ा अंतर है तो क्या कोई कारण है? डॉट आयात का उपयोग बड़े आकार के संकलन करता है।
माजिदरीफ

@ मजीदरीफ: यह एक दिलचस्प अवलोकन है :) क्या आप उस कोड के साथ एक अलग प्रश्न पोस्ट कर सकते हैं जो इस मुद्दे को पुन: पेश करता है? (मैंने इसे स्वयं करने की कोशिश की, import "fmt"बनाम के साथ एक सरल हैलो-वर्ल्ड प्रोग्राम संकलित किया import . "fmt", लेकिन दोनों मामलों में यह मेरे लिए एक ही आकार था।)
एटिलियो

66

यहाँ पायथन से आने वालों के लिए एक सादृश्य है:

  • गो का import "os"लगभग अजगर के बराबर हैimport os
  • गो का import . "os"लगभग अजगर के बराबर हैfrom os import *

दोनों भाषाओं में, उत्तरार्द्ध का उपयोग आम तौर पर किया जाता है, लेकिन इसे करने के अच्छे कारण हो सकते हैं।


4

यह केवल परीक्षण में उपयोग किया जाना चाहिए।

यहाँ गोलंग के विकि में कुछ दस्तावेज हैं

यदि आपने कुछ नकली कोड उत्पन्न किए हैं जैसे कि मॉकजेन और यह आपके पैकेज कोड को आयात करता है, और फिर आपका परीक्षण पैकेज आपके पैकेज कोड को भी आयात करता है, तो आपको एक परिपत्र निर्भरता मिलती है (कुछ गोलंग उपयोगकर्ता को यह तय करने के लिए चुनता है कि कैसे हल करें)।

हालाँकि, यदि आपके परीक्षण पैकेज के अंदर आप जिस पैकेज का परीक्षण कर रहे हैं, उस बिंदु पर डॉट नोटेशन का उपयोग करते हैं, तो उन्हें उसी पैकेज के रूप में माना जाता है और होने के लिए कोई परिपत्र निर्भरता नहीं है!

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.