当前位置: 首页 > 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)
}

相关文章:

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 GitHub2 2、Go语言的编译环境 go1.21.6.windows-amd64.m…...

Vue-easy-tree封装及使用

1.使用及安装 下载依赖 npm install wchbrad/vue-easy-tree引入俩种方案 1.在main.js中引入 import VueEasyTree from "wchbrad/vue-easy-tree"; import "wchbrad/vue-easy-tree/src/assets/index.scss" Vue.use(VueEasyTree)2.当前页面引入 import VueEa…...

opencv中使用cuda加速图像处理

opencv大多数只使用到了cpu的版本,实际上对于复杂的图像处理过程用cuda(特别是高分辨率的图像)可能会有加速效果。是否需要使用cuda需要思考: 1、opencv的cuda库是否提供了想要的算子。在CUDA-accelerated Computer Vision你可以…...

FPGA高端项目:IMX327 MIPI 视频解码 USB3.0 UVC 输出,提供FPGA开发板+2套工程源码+技术支持

目录 1、前言免责声明 2、相关方案推荐我这里已有的 MIPI 编解码方案 3、本 MIPI CSI-RX IP 介绍4、个人 FPGA高端图像处理开发板简介5、详细设计方案设计原理框图IMX327 及其配置MIPI CSI RX图像 ISP 处理图像缓存UVC 时序USB3.0输出架构 6、vivado工程详解FPGA逻辑设计 7、工…...

深入探索 MySQL 8 中的 JSON 类型:功能与应用

随着 NoSQL 数据库的兴起,JSON 作为一种轻量级的数据交换格式受到了广泛的关注。为了满足现代应用程序的需求,MySQL 8引入了原生的 JSON 数据类型,提供了一系列强大的 JSON 函数来处理和查询 JSON 数据。本文将深入探讨 MySQL 8 中JSON 类型的…...

学习Spring的第十三天

非自定义bean注解开发 设置非自定义bean : 用bean去修饰一个方法 , 最后去返回 , spring就把返回的这个对象,放到Spring容器 一 :名字 : 如果bean配置了参数 , 名字就是参数名 , 如果没有 , 就是方法名字 二 : 如果方法产生对象时 , 需要注入数据 , 在方法参数设置即可 , …...

jss/css/html 相关的技术栈有哪些?

js 的技术组件有哪些?比如 jQuery vue 等 常见的JavaScript技术组件: jQuery: jQuery是一个快速、小巧且功能丰富的JavaScript库,用于简化DOM操作、事件处理、动画效果等任务。 React: React是由Facebook开发的用于构…...

机器学习超参数优化算法(贝叶斯优化)

文章目录 贝叶斯优化算法原理贝叶斯优化的实现(三种方法均有代码实现)基于Bayes_opt实现GP优化基于HyperOpt实现TPE优化基于Optuna实现多种贝叶斯优化 贝叶斯优化算法原理 在贝叶斯优化的数学过程当中,我们主要执行以下几个步骤: …...

Sklearn、TensorFlow 与 Keras 机器学习实用指南第三版(六)

原文:Hands-On Machine Learning with Scikit-Learn, Keras, and TensorFlow 译者:飞龙 协议:CC BY-NC-SA 4.0 第十四章:使用卷积神经网络进行深度计算机视觉 尽管 IBM 的 Deep Blue 超级计算机在 1996 年击败了国际象棋世界冠军…...

XGB-3: 模型IO

在XGBoost 1.0.0中,引入了对使用JSON保存/加载XGBoost模型和相关超参数的支持,旨在用一个可以轻松重用的开放格式取代旧的二进制内部格式。后来在XGBoost 1.6.0中,还添加了对通用二进制JSON的额外支持,作为更高效的模型IO的优化。…...

springboot(ssm船舶维保管理系统 船只报修管理系统Java系统

springboot(ssm船舶维保管理系统 船只报修管理系统Java系统 开发语言:Java 框架:springboot(可改ssm) vue JDK版本:JDK1.8(或11) 服务器:tomcat 数据库:mysql 5.7&a…...

机器学习本科课程 大作业 多元时间序列预测

1. 问题描述 1.1 阐述问题 对某电力部门的二氧化碳排放量进行回归预测,有如下要求 数据时间跨度从1973年1月到2021年12月,按月份记录。数据集包括“煤电”,“天然气”,“馏分燃料”等共9个指标的数据(其中早期的部分…...

[office] excel中weekday函数的使用方法 #学习方法#微信#媒体

excel中weekday函数的使用方法 在EXCEL中Weekday是一个日期函数,可以计算出特定日期所对应的星期数。下面给大家介绍下Weekday函数作用方法。 01、比如,我在A84单元格输入一个日期,2018/5/9;那么,我们利用weekday计算…...

PAT-Apat甲级题1007(python和c++实现)

PTA | 1007 Maximum Subsequence Sum 1007 Maximum Subsequence Sum 作者 CHEN, Yue 单位 浙江大学 Given a sequence of K integers { N1​, N2​, ..., NK​ }. A continuous subsequence is defined to be { Ni​, Ni1​, ..., Nj​ } where 1≤i≤j≤K. The Maximum Su…...

洛谷:P2957 [USACO09OCT] Barn Echoes G

题目描述 The cows enjoy mooing at the barn because their moos echo back, although sometimes not completely. Bessie, ever the excellent secretary, has been recording the exact wording of the moo as it goes out and returns. She is curious as to just how mu…...

flinksqlbug : AggregateFunction udf Could not extract a data type from

org.apache.flink.table.api.ValidationException: SQL validation failed. An error occurred in the type inference logic of function ‘default_catalog.default_database.CollectSetSort’. org.apache.flink.table.api.ValidationException: An error occurred in the t…...

Aigtek高压放大器用途是什么呢

高压放大器在电子领域中扮演着至关重要的角色,其主要作用是将低电压信号放大到更高的电压水平。这种类型的放大器广泛用于各种应用中,以下是高压放大器的用途以及其关键作用的详细介绍。 1、科学研究和实验室应用: 高压放大器在科学研究和实验…...

c++ STL less 的视角

c less 函数在不同的地方感觉所起的作用是不一样的, 这中间原因是 less 的视角不一样, 下面尝试给出解释下, 方便记忆 1、 左右视角 符合 排序sort less(value, element) less 表示一种 “符合关系“, 表示sort 后…...

MQ面试题整理(持续更新)

1. MQ的优缺点 优点:解耦,异步,削峰 缺点: 系统可用性降低 系统引入的外部依赖越多,越容易挂掉。万一 MQ 挂了,MQ 一挂,整套系统崩 溃,你不就完了?系统复杂度提高 硬生…...

2401cmake,学习cmake2

步4:安装与测试 现在开始给项目添加安装规则和支持测试. 安装规则 安装规则非常简单:对MathFunctions,想安装库和头文件,对应用,想安装可执行文件和配置头. 所以在MathFunctions/CMakeLists.txt尾添加: install(TARGETS MathFunctions DESTINATION lib) install(FILES Mat…...

Qwen3.5-2B轻量部署教程:适配Jetson/树莓派的2B多模态模型实测

Qwen3.5-2B轻量部署教程:适配Jetson/树莓派的2B多模态模型实测 1. 模型概述 Qwen3.5-2B是阿里云推出的轻量化多模态基础模型,属于Qwen3.5系列的小参数版本(20亿参数)。这个模型专为边缘计算设备优化,主打低功耗、低门…...

Redis专题(一)

1. 主从部署主从复制主要⽤于实现数据的冗余备份和读分担,并不是真正的高可用。一个主节点,一个或者多个从节点。同步数据的方向:单向 ,只能主节点到从节点。作用:数据冗余:除了数据持久化之外的一种数据冗…...

OpenClaw安全实践:Qwen3.5-9B本地化部署防数据泄露方案

OpenClaw安全实践:Qwen3.5-9B本地化部署防数据泄露方案 1. 为什么需要关注OpenClaw的安全问题? 去年冬天,我在整理公司财报时突然意识到一个问题:如果让AI助手帮我处理这些敏感文件,数据会不会被意外上传到云端&…...

基于MMC的两端柔性直流输电系统设计仿真:包含电压平衡控制策略、最近电平调制策略、环流抑制及详...

基于MMC的两端柔性直流输电系统设计仿真 1、MMC-HVDC 电压平衡控制策略:为了实现桥臂子模块的电压动态平衡 在正常运行时,由于桥臂子模块投切存在不一致性,以及级联的子模块中的电容不断的在充电、放电或者闭锁状态切换 2、最近电平调制策略&…...

【设计模式】探索状态模式在现代软件开发中的应

在技术领域,我们常常被那些闪耀的、可见的成果所吸引。今天,这个焦点无疑是大语言模型技术。它们的流畅对话、惊人的创造力,让我们得以一窥未来的轮廓。然而,作为在企业一线构建、部署和维护复杂系统的实践者,我们深知…...

高效微信聊天记录管理:解决数据丢失风险的本地化方案

高效微信聊天记录管理:解决数据丢失风险的本地化方案 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we/WeChat…...

hiSHtory 配置管理完全指南:从基础设置到高级调优

hiSHtory 配置管理完全指南:从基础设置到高级调优 【免费下载链接】hishtory Your shell history: synced, queryable, and in context 项目地址: https://gitcode.com/gh_mirrors/hi/hishtory hiSHtory 是一款革命性的 shell 历史记录工具,它不仅…...

强强联合:在快马平台用AI模型驱动你的下一代智能agent应用

最近在尝试用AI辅助开发时,发现了一个特别有意思的方向——智能agent框架。这类框架就像是AI应用的"骨架",而平台内置的AI模型则为其注入了"灵魂"。今天想分享下在InsCode(快马)平台上实现的一个创作辅助agent,整个过程让…...

lvgl_v8之设置label背景颜色一种方式

void lv_label_demo() {static lv_style_t style;lv_style_init(&style);lv_style_set_radius...

HDD与SSD终极对决:性能、成本与应用场景全解析

1. HDD与SSD:从构造看本质差异 第一次拆开电脑主机时,看到那个嗡嗡作响的金属盒子(HDD)和旁边安静的电路板(SSD),我就意识到它们是完全不同的物种。HDD就像老式留声机,数据存储在高速…...