Golang报错:系统找不到指定的路径怎么办

Golang报错:系统找不到指定的路径怎么办 我正在使用ReactJS作为前端,Go作为后端,MySQL作为数据库。在解析.js文件时遇到了错误。

以下是解析文件中的代码:

func init() {
    db, err = sql.Open("mysql", "root:root@/hrms")
    tpl, err = template.ParseFiles("src/app/Employee/*.js")
    if err != nil {
        log.Fatal(err)
    }
}

我的文件夹结构是src/app,在app文件夹中有不同的子文件夹包含js文件。子文件夹如:src/app/home/index.js、src/app/Admin/AdminUsers.js

我还创建了另一个文件夹src/app/go/personalDetails.go,其中包含go文件

那么如何通过Go访问js文件。

请帮我解决这个问题…非常紧急


更多关于Golang报错:系统找不到指定的路径怎么办的实战教程也可以访问 https://www.itying.com/category-94-b0.html

21 回复

我不明白你的问题,再说一次……

更多关于Golang报错:系统找不到指定的路径怎么办的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


简单来说,我无法从Go文件中解析我的JavaScript文件。

你是否阅读并理解了“相对于工作目录”的相关内容?

NobbZ:

src/app/Employee/*.js

系统仍然提示找不到路径

我的前端使用ReactJS,因此不会有任何HTML文件。它只包含JS文件…为了查看我的前端界面,我需要解析JS文件。

srikanth32:

这是我的项目文件夹结构

大部分不相关。

相关的是你启动二进制文件时的工作目录。

那么你为什么要用 Go 解析 JS 文件呢?

你是想在遍历它们的 AST 时转换它们吗?还是只想将它们发送到任何地方?或者你想让它们在给定的上下文中执行?

但是 Go 不需要知道你的 JS 文件就能做到这一点。

你的前端应该向指定端点发送包含 JSON 数据的请求。

你的 Go 应用程序知道如何处理这个 JSON 并将其存储到数据库中。

除了指定的 API 之外,它不需要了解关于你应用程序的任何信息。

text/template 具有相同的接口。请随意选择一个。

你可能也需要为旧代码导入其中一个。

另外,我不了解 reactjs,所以不明白你在那里怎么会出错。

// 代码部分保持原样

我没理解您说的是什么意思?

这是我的包含Go文件的go文件夹 Capture1

你的 Go 代码与 React 项目之间是什么关系?

你的 Go 代码是打算作为客户端吗?还是用来提供 React 应用服务?

你说过你的 React 项目原本运行正常,但加入 Go 语言后就出问题了。那么你加入 Go 的目的是想实现什么功能?

你仍然没有告诉我们启动时 Go 应用程序的工作目录是什么,以及它的运行环境是怎样的。

引用:

template.ParseFiles(“src/app/Employee/*.js”)

这将尝试打开相对于程序启动目录的 src/app/Employee 文件夹中字面名为 *.js 的文件。

或许你实际上想使用 ParseGlob 来代替?

除此之外,我不太明白你的问题是什么…

petkop:

repoFrontend := "/path/to/repofrontend/"
http.Handle("/static/",http.StripPrefix("/static/",
http.FileServer(http.Dir(repoFrontend))))

你能告诉我怎么写那个json吗……我对此一无所知

当我不将其与Go语言链接时,React文件运行良好。

React JS文件应通过命令提示符从项目文件夹启动。

Capture3

当我输入npm start时,服务器会在上述情况下启动。

是的,但问题在于如果我使用 parseglob 就需要导入 html/template…这会导致错误,因为我的整个项目前端使用的是 ReactJS。所以如果需要在整个项目中导航或解析…你现在理解问题了吗?

这是我的项目文件夹结构

Capture

例如,我有一个页面 personaldetails.js,其中包含需要填写的文本框…如果我们填写这些文本框,那么数据应该保存到 MySQL 数据库中…因此我使用 Go 来保存我的应用程序或项目的详细信息。

Capture1

我的 Go 目录是 src/app/go/ go run personalDetails.go

我理解你正在使用reactjs,也明白你的Go代码找不到文件。

但我不理解的是,你为什么如此坚持使用这种方式处理react。

首先需要解决的问题是模板能够被渲染并传递给客户端。只要你的Go服务器找不到模板或无法正确渲染它们,客户端就无关紧要。当且仅当Go正确完成它的工作后,那时你才应该在reactjs论坛询问为什么你的JavaScript代码不工作。

另外,你仍然没有展示你是如何启动服务器的,从哪里启动的,以及启动服务器时工作目录下的文件树结构是怎样的。

或许实际展示更多错误信息,或者提供一个精简的GitHub仓库来展示你的问题和处理过程会更好。

根据我的理解,你正在使用JavaScript处理前端界面,而Go语言用于后端开发。

为了在Go中使用JavaScript文件,你需要提供静态文件服务,而不是解析或打开它们。

package main
import (
        "net/http"
)
func main(){
        repoFrontend := "/path/to/repofrontend/"
        http.Handle("/static/",http.StripPrefix("/static/",
                http.FileServer(http.Dir(repoFrontend))))
        err := http.ListenAndServe(":9999", nil)
        if nil != err {
                panic(err)
        }
}

Shakedos

使用Go提供静态文件服务

头像

Shaked Klein Orbach的博客

能告诉我怎么写那个JSON吗……我对此一无所知

我认为 @NobbZ 想向你建议的是:

你的后端将使用 Go 编写,与数据库交互,并暴露一些 API 来处理数据交换。一旦你的所有 API 功能正常,你的 UI 将向你的后端发起 API 调用,请求用户信息、存储数据等。

这里有一个示例:https://medium.com/[@kelvin_sp](/user/kelvin_sp)/building-and-testing-a-rest-api-in-golang-using-gorilla-mux-and-mysql-1f0518818ff6

另一种使用 JavaScript 和 Go 的可能方式是使用原生库:

GitHub - gopherjs/gopherjs: A compiler from Go to JavaScript for running Go...

示例 https://gopherjs.github.io/playground/

再次说明,这只是通用指南,因为我不熟悉你的应用程序架构。希望这对你有所帮助。

根据你的代码和描述,问题在于template.ParseFiles()函数无法找到指定的JavaScript文件路径。这通常是由于路径不正确或工作目录问题导致的。

以下是几种解决方案:

方案1:使用相对路径(推荐)

func init() {
    db, err = sql.Open("mysql", "root:root@/hrms")
    if err != nil {
        log.Fatal(err)
    }
    
    // 使用相对路径从项目根目录开始
    tpl, err = template.ParseFiles("src/app/home/index.js", "src/app/Admin/AdminUsers.js")
    if err != nil {
        log.Fatal(err)
    }
}

方案2:使用filepath.Glob匹配多个文件

import (
    "path/filepath"
    "html/template"
    "log"
)

func init() {
    db, err = sql.Open("mysql", "root:root@/hrms")
    if err != nil {
        log.Fatal(err)
    }
    
    // 使用filepath.Glob来匹配所有js文件
    files, err := filepath.Glob("src/app/**/*.js")
    if err != nil {
        log.Fatal(err)
    }
    
    if len(files) > 0 {
        tpl, err = template.ParseFiles(files...)
        if err != nil {
            log.Fatal(err)
        }
    }
}

方案3:使用绝对路径

import (
    "path/filepath"
    "os"
    "html/template"
    "log"
)

func init() {
    db, err = sql.Open("mysql", "root:root@/hrms")
    if err != nil {
        log.Fatal(err)
    }
    
    // 获取当前工作目录
    wd, err := os.Getwd()
    if err != nil {
        log.Fatal(err)
    }
    
    // 构建绝对路径
    jsPath := filepath.Join(wd, "src", "app", "home", "index.js")
    tpl, err = template.ParseFiles(jsPath)
    if err != nil {
        log.Fatal(err)
    }
}

方案4:递归遍历目录

import (
    "path/filepath"
    "os"
    "html/template"
    "log"
)

func getAllJSFiles(root string) ([]string, error) {
    var files []string
    err := filepath.Walk(root, func(path string, info os.FileInfo, err error) error {
        if err != nil {
            return err
        }
        if !info.IsDir() && filepath.Ext(path) == ".js" {
            files = append(files, path)
        }
        return nil
    })
    return files, err
}

func init() {
    db, err = sql.Open("mysql", "root:root@/hrms")
    if err != nil {
        log.Fatal(err)
    }
    
    jsFiles, err := getAllJSFiles("src/app")
    if err != nil {
        log.Fatal(err)
    }
    
    if len(jsFiles) > 0 {
        tpl, err = template.ParseFiles(jsFiles...)
        if err != nil {
            log.Fatal(err)
        }
    }
}

重要提醒:

  1. 确保你的Go程序运行时的当前工作目录是正确的项目根目录
  2. 检查路径分隔符,Windows使用\而Unix系统使用/,建议使用filepath.Join()来构建路径
  3. 验证文件确实存在于指定位置
  4. 注意:template.ParseFiles()主要用于HTML模板文件,对于JS文件你可能需要不同的处理方式

如果问题仍然存在,请检查你的项目结构和文件权限。

回到顶部