当前位置: 首页 > news >正文

Go语言学习踩坑记

go: go.mod file not found in current directory or any parent directory; see 'go help mod 解决

资源下载:

序号文件地址
1

1、Go IDE

liteidex38.3-win64-qt5.15.2.zip

Release x38.3 · visualfc/liteide · GitHub
2

2、Go语言的编译环境

go1.21.6.windows-amd64.msi

All releases - The Go Programming Language
3

2、cgo编译器

x86_64-13.2.0-release-win32-seh-ucrt-rt_v11-rev0.7z

Releases · niXman/mingw-builds-binaries · GitHub

Downloads - MinGW-w64

1、Go中 必须添加//export ToUpper


2、使用cmd进入到go文件夹中
   go tool nm main.dll >>log.txt
   go build -buildmode=c-shared -o main.dll main.go
   这两句话必须常备


3、放在web项目中的lib目录。使用如下代码获取
   String path = servletContext.getRealPath("/WEB-INF/lib/");
   GlobalData.GOLIB_A_INSTANCE = Native.load(path + File.separator + "golib.dll", GoLibrary.class); // "main" 是Go编译的共享库的名称
   
4、Java_完全限定类名_方法名([参数类型描述符])返回值类型描述符
举个例子,如果您有一个Java类com.example.MyClass中的方法add,该方法接受两个整数参数并返回一个整数,那么相应的JNI方法名可能是:
Java_com_example_MyClass_add(II)I

5、环境变量设置
set GO111MODULE=on
GOROOT=D:/Program/Go
GOARCH=amd64
GOOS=windows
GOPATH=D:\workspace\go_workspace
path中
%GOROOT%\bin
%GOPATH%\bin

6、引入自己写的本地go文件
import (
    "C"
    "GoLib/main/util"
)

一定要使用go.mod,在项目的根目录创建go.mod

go mod init GoLib
go mod tidy

目录结构 ,否则无效,不能引用到包

myproject/
├── go.mod  # 如果使用 Go Modules
├── main.go
└── utils/
    └── strutil.go

     |___file.go

示例代码

package org.example;import com.sun.jna.Library;
import com.sun.jna.Native;//https://blog.51cto.com/u_16175450/8992831
//没成功
public class GoExample {public interface GoLibrary extends Library {//System.load("D:\\workspace\\go_workspace\\Test\\src\\test\\main.dll");//GoLibrary INSTANCE = Native.load("main", GoLibrary.class); // "main" 是Go编译的共享库的名称GoLibrary INSTANCE = Native.load("D:\\workspace\\go_workspace\\src\\GoLib\\main\\golib.dll", GoLibrary.class); // "main" 是Go编译的共享库的名称public void GoPrintA();public void GoPrintB(String str);public String GoPrintC(String str);}public static void main(String[] args) {GoLibrary goLibrary = GoLibrary.INSTANCE;String inputStr = "hello";String result = goLibrary.GoPrintC(inputStr);System.out.println(result);}}

// main project main.go
package mainimport ("C""GoLib/main/util"
)//export GoPrintA
func GoPrintA() {strutil.PrintA()
}//export GoPrintB
func GoPrintB(str *C.char) {goStr := C.GoString(str)strutil.PrintB(goStr)
}//export GoPrintC
func GoPrintC(str *C.char) *C.char {goStr := C.GoString(str)return C.CString(strutil.PrintC(goStr))
}func main() {//strutil.PrintA()
}

// strutil project strutil.go
package strutilimport ("encoding/json""fmt"
)//export PrintA
func PrintA() {fmt.Println("Hello GoLib!!!")
}//export PrintB
func PrintB(str string) {fmt.Println("Hello GoLib!!!" + str)// 解码 JSON 字符串为 map[string]interface{} 类型var jsonData map[string]interface{}err := json.Unmarshal([]byte(str), &jsonData)if err != nil {fmt.Println("JSON 解码失败:", err)return}// 访问 JSON 对象的属性name := jsonData["name"].(string)age := int(jsonData["age"].(float64))city := jsonData["city"].(string)fmt.Printf("Name: %s, Age: %d, City: %s\n", name, age, city)
}//export PrintC
func PrintC(str string) string {fmt.Println("Hello GoLib!!!" + str)// 使用字面量创建 Mapm := map[string]int{"apple":  1,"banana": 2,"orange": 3,}// 将 Person 结构体编码为 JSON 格式的字节切片jsonData, err := json.Marshal(m)if err != nil {errMsg := fmt.Sprintf("JSON 编码失败: %s", err)fmt.Println(errMsg)// 返回错误信息return "JSON 编码失败: " + err.Error()}return "PrintC success" + string(jsonData)
}

http://www.lryc.cn/news/294082.html

相关文章:

  • Vue-easy-tree封装及使用
  • opencv中使用cuda加速图像处理
  • FPGA高端项目:IMX327 MIPI 视频解码 USB3.0 UVC 输出,提供FPGA开发板+2套工程源码+技术支持
  • 深入探索 MySQL 8 中的 JSON 类型:功能与应用
  • 学习Spring的第十三天
  • jss/css/html 相关的技术栈有哪些?
  • 机器学习超参数优化算法(贝叶斯优化)
  • Sklearn、TensorFlow 与 Keras 机器学习实用指南第三版(六)
  • XGB-3: 模型IO
  • springboot(ssm船舶维保管理系统 船只报修管理系统Java系统
  • 机器学习本科课程 大作业 多元时间序列预测
  • [office] excel中weekday函数的使用方法 #学习方法#微信#媒体
  • PAT-Apat甲级题1007(python和c++实现)
  • 洛谷:P2957 [USACO09OCT] Barn Echoes G
  • flinksqlbug : AggregateFunction udf Could not extract a data type from
  • Aigtek高压放大器用途是什么呢
  • c++ STL less 的视角
  • MQ面试题整理(持续更新)
  • 2401cmake,学习cmake2
  • 理解Jetpack Compose中的`remember`和`mutableStateOf`
  • 3D力导向树插件-3d-force-graph学习002
  • QXlsx Qt操作excel
  • Node.js 包管理工具
  • PyTorch 2.2 中文官方教程(十七)
  • Failed at the chromedriver@2.27.2 install script.
  • OpenResty 安装
  • 套路化编程 C# winform 自适应缩放布局
  • 源码梳理(3)MybatisPlus启动流程
  • 《学成在线》微服务实战项目实操笔记系列(P1~P49)【上】
  • 两种添加删除属性字段的方法