go - كيفية الرجوع إلى ملف نسبي من التعليمات البرمجية والاختبارات




relative-path revel (2)

أنا لم تستخدم أبدا ريفيل نفسي ولكن ما يلي تبدو مفيدة بالنسبة لي:

http://revel.github.io/docs/godoc/revel.html

  • revel.BasePath
  • revel.AppPath

أحتاج إلى مرجع patients.json من patients.go ، وهنا هيكل المجلد:

إذا فعلت:

filepath.Abs("../../conf/patients.json")

فإنه يعمل go test ./... لكنه فشل revel run

إذا فعلت:

filepath.Abs("conf/patients.json")

يحدث العكس تماما (عربد على ما يرام ولكن الاختبارات تفشل).

هل هناك طريقة لإشارة الملف بشكل صحيح بحيث يعمل على حد سواء للاختبارات وتشغيل البرنامج العادي؟


يتم تفسير المسارات النسبية دائما / حلها إلى مسار أساسي: الدليل الحالي أو العمل - وبالتالي سيكون دائما حدوده.

إذا كنت تستطيع العيش مع الحرص دائما على دليل العمل الصحيح، يمكنك الاستمرار في استخدام المسارات النسبية.

ما أقترحه هو عدم الاعتماد على دليل العمل، ولكن مسار أساسي محدد صراحة. قد يكون هذا قيمة افتراضية مرمزة في التطبيق الخاص بك (الذي قد يكون دليل العمل كذلك)، ويجب أن توفر عدة طرق لتجاوز قيمته.

الطرق الموصى بها لتجاوز المسار الأساسي الذي يتم حل المسارات "النسبية" ضده:

  1. علامة سطر الأوامر (انظر حزمة flag )
  2. متغير البيئة (راجع os.Getenv() )
  3. (فيكس نامد) ملف التكوين في الدليل الرئيسي للمستخدم (انظر os/user/User و os/user/Current() )

مرة واحدة لديك مسار قاعدة، يمكنك الحصول على المسار الكامل من خلال الانضمام إلى المسار الأساسي والمسار النسبي. يمكنك استخدام path.Join() أو filepath.Join() ، على سبيل المثال:

// Get base path, from any or from the combination of the above mentioned solutions
base := "/var/myapp"

// Relative path, resource to read/write from:
relf := "conf/patients.json"

// Full path that identifies the resource:
full := filepath.Join(base, relf) // full will be "/var/myapp/conf/patients.json"






revel