- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
如何将方法添加到不同文件的结构中?到目前为止,这是我尝试过的方法,但似乎没有用。
// ./src
package routes
type App struct{
}
func (a *App) initializeRoutes() {
a.Subrouter.HandleFunc("/products", a.getSomething).Methods("GET")
}
// ./src/controller
package routes
func (a *App) getSomething(w http.ResponseWriter, r *http.Request){
...
}
最佳答案
They are in the same package.
它们不在同一个包中。 Go 包既有名称又有路径。它们都被命名为 routes
但它们有不同的路径。实际的包是routes
和controller/routes
。结果是子目录是不同的包。
参见 Package Names on the Go Blog获取更多信息。
由于它们在不同的包中,它们只能访问彼此的公共(public)成员和导出方法。你不能在 Go 中给别人的包或接口(interface)打补丁。这是为了将一个包的所有功能都集中在一个地方,而不是远距离操作。
您有多种选择。您可以将 routes
的所有方法放入一个包中。如果它们都属于一起,则无需将其拆分为多个文件。
如果它们并不真正属于一起,您可以编写一个新的结构,其中嵌入了路由,并在其上定义新的方法。然后,您可以访问包装器结构以获取添加的方法,或访问其嵌入式结构以获取 routes
' 方法。参见 this answer举个例子。
但我真的认为您需要考虑您的代码是如何安排的。 App
可能不应该由 routes
包定义,它们应该是分开的。相反,Go 更喜欢 has-a 关系。 App
将包含 routes.Route
的实例。
你会像这样重新排列你的代码树:
app/
app.go
app_test.go
routes/
routes.go
routes_test.go
请注意,它现在包含在自己的项目目录中,而不是全部放在 src/
中。 app.go
看起来像这样。
// src/app/app.go
package app
import(
"app/routes"
"fmt"
"net/http"
)
type App struct {
routes routes.Route
}
func (a *App) initializeRoutes() {
a.routes.AddRoute("/products", a.getSomething)
}
func (a *App) getSomething(w http.ResponseWriter, r *http.Request) {
fmt.Println("Something!")
}
请注意我们是如何将责任委托(delegate)给 a.routes
添加路由,而不是让 App
自己做。这避免了将所有功能粉碎到一个巨大的包中的愿望。 routes.Route
将在 app/routes/routes.go
中定义。
// src/app/routes/routes.go
package routes
import "net/http"
// A type specifying the interface for route handlers.
type RouteHandler func(w http.ResponseWriter, r *http.Request)
type Route struct {
handlers map[string]RouteHandler
}
func (r *Route) AddRoute(path string, handler RouteHandler) {
r.handlers[path] = handler
}
现在所有的路由都要操心的是处理路由。它对您的特定应用程序逻辑一无所知。
I was trying to get my http.res & http.req functions in a controllers file.
现在我们已经重新安排了文件结构,您可以这样做了。如果愿意,您可以定义 app/controllers.go
来组织您的代码。
// src/app/controllers.go
package app
import(
"fmt"
"net/http"
)
func (a *App) getSomething(w http.ResponseWriter, r *http.Request) {
fmt.Println("Something!")
}
app/app.go
和 app/controllers.go
在同一个包中。它们具有相同的路径和相同的名称。所以 app/controllers.go
可以给 App
添加方法。
关于go - 将方法添加到不同文件中的 golang 结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45379722/
我目前正在尝试基于哈希表构建字典。逻辑是:有一个名为 HashTable 的结构,其中包含以下内容: HashFunc HashFunc; PrintFunc PrintEntry; CompareF
如果我有一个指向结构/对象的指针,并且该结构/对象包含另外两个指向其他对象的指针,并且我想删除“包含这两个指针的对象而不破坏它所持有的指针”——我该怎么做这样做吗? 指向对象 A 的指针(包含指向对象
像这样的代码 package main import "fmt" type Hello struct { ID int Raw string } type World []*Hell
我有一个采用以下格式的 CSV: Module, Topic, Sub-topic 它需要能够导入到具有以下格式的 MySQL 数据库中: CREATE TABLE `modules` ( `id
通常我使用类似的东西 copy((uint8_t*)&POD, (uint8_t*)(&POD + 1 ), back_inserter(rawData)); copy((uint8_t*)&PODV
错误 : 联合只能在具有兼容列类型的表上执行。 结构(层:字符串,skyward_number:字符串,skyward_points:字符串)<> 结构(skyward_number:字符串,层:字符
我有一个指向结构的指针数组,我正在尝试使用它们进行 while 循环。我对如何准确初始化它并不完全有信心,但我一直这样做: Entry *newEntry = malloc(sizeof(Entry)
我正在学习 C,我的问题可能很愚蠢,但我很困惑。在这样的函数中: int afunction(somevariables) { if (someconditions)
我现在正在做一项编程作业,我并没有真正完全掌握链接,因为我们还没有涉及它。但是我觉得我需要它来做我想做的事情,因为数组还不够 我创建了一个结构,如下 struct node { float coef;
给定以下代码片段: #include #include #define MAX_SIZE 15 typedef struct{ int touchdowns; int intercepti
struct contact list[3]; int checknullarray() { for(int x=0;x<10;x++) { if(strlen(con
这个问题在这里已经有了答案: 关闭 11 年前。 Possible Duplicate: Empty “for” loop in Facebook ajax what does AJAX call
我刚刚在反射器中浏览了一个文件,并在结构构造函数中看到了这个: this = new Binder.SyntaxNodeOrToken(); 我以前从未见过该术语。有人能解释一下这个赋值在 C# 中的
我经常使用字符串常量,例如: DICT_KEY1 = 'DICT_KEY1' DICT_KEY2 = 'DICT_KEY2' ... 很多时候我不介意实际的文字是什么,只要它们是独一无二的并且对人类读
我是 C 的新手,我不明白为什么下面的代码不起作用: typedef struct{ uint8_t a; uint8_t* b; } test_struct; test_struct
您能否制作一个行为类似于内置类之一的结构,您可以在其中直接分配值而无需调用属性? 前任: RoundedDouble count; count = 5; 而不是使用 RoundedDouble cou
这是我的代码: #include typedef struct { const char *description; float value; int age; } swag
在创建嵌套列表时,我认为 R 具有对列表元素有用的命名结构。我有一个列表列表,并希望应用包含在任何列表中的每个向量的函数。 lapply这样做但随后剥离了列表的命名结构。我该怎么办 lapply嵌套列
我正在做一个用于学习目的的个人组织者,我从来没有使用过 XML,所以我不确定我的解决方案是否是最好的。这是我附带的 XML 文件的基本结构:
我是新来的 nosql概念,所以当我开始学习时 PouchDB ,我找到了这个转换表。我的困惑是,如何PouchDB如果可以说我有多个表,是否意味着我需要创建多个数据库?因为根据我在 pouchdb
我是一名优秀的程序员,十分优秀!