gpt4 book ai didi

import - `import` 语句的用法

转载 作者:IT王子 更新时间:2023-10-29 02:28:04 30 4
gpt4 key购买 nike

谁能给我解释一下 import 语句是如何工作的?

例如,我在 myapp/app/models 包中有一个类型 User:

package models

type User struct {
// exportod fields
}

我在 myapp/app/controllers 包中有一个类型 Users:

package controllers

import (
_ "myapp/app/models"
"github.com/revel/revel"
)

type Users struct {
*revel.Controller
}

func (c Users) HandleSubmit(user *User) revel.Result {
// Code here
}

这给了我以下错误:

undefined: User

我尝试将导入更改为以下代码:

import (
. "advorts/app/models"
"github.com/revel/revel"
)

但是得到这个错误:

undefined: "myapp/app/controllers".User

我也不明白。那么,import 之间有什么区别。 "something"import "something" ?如何正确导入我的模型?

最佳答案

每个包都有一组类型、函数、变量等。我们称它们为实体。每个实体都可以导出(其名称以大写字母开头)或不导出(其名称以小写字母开头)。

一个包只能访问另一个包的导出实体。为此,它需要import 它,这将使导出的实体可用包名称作为标识符。示例:

import "github.com/revel/revel"

将获取 revel 包的所有导出实体,使用 revel. 前缀即可使用。与 revel.Controller 一样,它是 revel 包中定义的 Controller 类型。

您可以通过在导入路径前加上所需的标识符来为包标识符设置别名。示例:

import rev "github.com/revel/revel"

将导入所有具有标识符 revrevel 实体。所以 revel.Controller 变成了 rev.Controller。如果您有多个同名的包,或者一个包的名称长得离谱,这将很有用。

作为奖励,您可以匿名导入包,方法是将其别名为空白标识符:

import _ "github.com/revel/revel"

这将导入包,但不会让您访问导出的实体。它对于需要导入但永远无法访问的驱动程序之类的东西很有用。一个常见的例子是数据库驱动程序,它们将自己注册到 database/sql 包中,因此您永远不需要直接访问它们。

作为奖励,您还可以在本地导入包,方法是使用 . 标识符作为别名。导出的实体将在没有标识符的情况下可用,就像您在同一个包中定义它们一样。

如何正确导入包由您决定。一般的约定是如果你能管理它就永远不要别名,隐藏你不需要访问但仍然需要导入的包(数据库驱动程序),仅此而已。你真的永远不需要在本地导入包,即使一些教程或框架为了简单起见这样做了。

关于import - `import` 语句的用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24425002/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com