找不到Go软件包

时间:2018-09-03 12:18:02

标签: go

我刚开始学习Go。我读到如果创建一个程序包并使用安装功能,该程序包将在整个程序中可用。但是,在创建以下软件包并运行“执行安装”命令后,该软件包对我的程序不可用:

package person

import (
 "fmt"
 "time"
)

//Person struct
type Person struct {
 FirstName, LastName string
 Dob                 time.Time
 Email, Location     string
}

//PrintName method
func (p Person) PrintName() {
  fmt.Printf("\n%s %s\n", p.FirstName, p.LastName)
}

//PrintDetails Method
func (p Person) PrintDetails() {
  fmt.Printf("[Date of Birth: %s, Email: %s, Location: %s ]\n", p.Dob.String(), p.Email,
    p.Location)
}

然后创建以下主要功能,要么给我“语法错误:函数主体外的非声明语句”,要么说如果我仅使用可以学到的功能,则找不到该包。

package main

import (
"person"
)

p := Person {
FirstName : "Shiju",
LastName : "Varghese",
Dob : time.Date(1979, time.February, 17, 0, 0, 0, 0, time.UTC),
Email : "shiju@email.com",
Location : "Kochi",
}

p. PrintName()
p. PrintDetails()

请问我在做什么错?

3 个答案:

答案 0 :(得分:1)

non declartion statement outside function body指代代码的这一部分

p := Person {
FirstName : "Shiju",
LastName : "Varghese",
Dob : time.Date(1979, time.February, 17, 0, 0, 0, 0, time.UTC),
Email : "shiju@email.com",
Location : "Kochi",
}

p. PrintName()
p. PrintDetails()

您需要添加一些功能,例如main功能。 另外,在初始化类型时,还需要使用其包名称(例如me:=person.Person{})来引用它,该名称应注意type Person not found。如果要在同一包中调用类型或函数,则无需这样做。如果使用相同的软件包,则也无需import

答案 1 :(得分:0)

希望这将有助于解决您的问题。如果要在函数外部声明自己的人,则应使用var,并且不能在函数外部使用方法

DB::table('articles')
        ->leftJoin('articles', 'articles.id', '=', 'articles.user_id')
        ->leftJoin('news_groups', 'news_groups.id', '=', 'articles.news_group_id')
        ->leftJoin('magazine_groups', 'magazine_groups.id', '=', 'articles.magazine_groups_id')
        ->select(DB::raw('articles.id, type, title, articles.published_at, users.first_name, users.last_name, COALESCE(news_groups.name, magazine_groups.name) as group_name'))
        ->groupBy('articles.id');

答案 2 :(得分:-1)

导入和使用本地软件包的正确方法是

import person "./dirnameOfPackage"

func main(){
    var p Person
    p.FirstName = "yourName"
    p.LastName = "lastname"
}