如何在 GO 中访问另一个文件
How to access another file in GO
我正在尝试从 main.go
访问控制器,但出现以下错误:
./main.go:34:28: cannot refer to unexported name controllers.getUserDetails
./main.go:34:28: undefined: controllers.getUserDetails
这是我的 main.go
的片段,我删除了一些额外的代码
package main
import (
"net/http"
"os"
"log"
"github.com/urfave/negroni"
"github.com/gorilla/mux"
"github.com/joho/godotenv"
"Go-Social/controllers"
)
func main() {
router := mux.NewRouter()
UserRouter := router.PathPrefix("/api/user").Subrouter()
UserRouter.HandleFunc("", controllers.getUserDetails).Methods("GET")
env := os.Getenv("GO_ENV")
if "" == env {
env = "Development"
}
// appending middlewares
server := negroni.Classic()
// router handler with negroni
server.UseHandler(router)
// starting server
server.Run(":" + os.Getenv(env + "_PORT"))
}
我的controller.go
文件
package controllers
import (
"net/http"
"fmt"
)
func getUserDetails(w http.ResponseWriter, r *http.Request) {
fmt.Println("here")
message := "Hello World"
w.Write([]byte(message))
}
请帮助我是 Go 新手。提前致谢。
要使用另一个包中的函数,您需要将其导出 (GetUserDetails
)
如前所述here
An identifier may be exported to permit access to it from another package
func GetUserDetails(w http.ResponseWriter, r *http.Request) {
fmt.Println("here")
message := "Hello World"
w.Write([]byte(message))
}
由于 getUserDetails 函数在另一个包中,因此无法访问。只能访问以大写字母开头的函数。这就是封装在 Go 中的工作方式。
func GetUserDetails(w http.ResponseWriter, r *http.Request) {
fmt.Println("here")
message := "Hello World"
w.Write([]byte(message))
}
所以在你的主要:
UserRouter.HandleFunc("", controllers.GetUserDetails).Methods("GET")
类似Java的语言,基于class的OOP中的封装是通过私有和public class变量/方法实现的。
在 Go 中,封装是在包级别实现的。
换句话说,在 Go 中,以大写字母开头的任何包对象(类型、变量或函数)将允许您从另一个包访问它。
我正在尝试从 main.go
访问控制器,但出现以下错误:
./main.go:34:28: cannot refer to unexported name controllers.getUserDetails
./main.go:34:28: undefined: controllers.getUserDetails
这是我的 main.go
的片段,我删除了一些额外的代码
package main
import (
"net/http"
"os"
"log"
"github.com/urfave/negroni"
"github.com/gorilla/mux"
"github.com/joho/godotenv"
"Go-Social/controllers"
)
func main() {
router := mux.NewRouter()
UserRouter := router.PathPrefix("/api/user").Subrouter()
UserRouter.HandleFunc("", controllers.getUserDetails).Methods("GET")
env := os.Getenv("GO_ENV")
if "" == env {
env = "Development"
}
// appending middlewares
server := negroni.Classic()
// router handler with negroni
server.UseHandler(router)
// starting server
server.Run(":" + os.Getenv(env + "_PORT"))
}
我的controller.go
文件
package controllers
import (
"net/http"
"fmt"
)
func getUserDetails(w http.ResponseWriter, r *http.Request) {
fmt.Println("here")
message := "Hello World"
w.Write([]byte(message))
}
请帮助我是 Go 新手。提前致谢。
要使用另一个包中的函数,您需要将其导出 (GetUserDetails
)
如前所述here
An identifier may be exported to permit access to it from another package
func GetUserDetails(w http.ResponseWriter, r *http.Request) {
fmt.Println("here")
message := "Hello World"
w.Write([]byte(message))
}
由于 getUserDetails 函数在另一个包中,因此无法访问。只能访问以大写字母开头的函数。这就是封装在 Go 中的工作方式。
func GetUserDetails(w http.ResponseWriter, r *http.Request) {
fmt.Println("here")
message := "Hello World"
w.Write([]byte(message))
}
所以在你的主要:
UserRouter.HandleFunc("", controllers.GetUserDetails).Methods("GET")
类似Java的语言,基于class的OOP中的封装是通过私有和public class变量/方法实现的。 在 Go 中,封装是在包级别实现的。
换句话说,在 Go 中,以大写字母开头的任何包对象(类型、变量或函数)将允许您从另一个包访问它。