我正在尝试在Go项目中使用专有DLL.
DLL的方法描述之一如下所示:
BYTE* Init(const BYTE* path, int id);
Run Code Online (Sandbox Code Playgroud)
在我的测试Go项目中,我正在做类似的事情:
import (
"golang.org/x/sys/windows"
)
var (
lib = windows.MustLoadDLL("dllname.dll")
init = lib.MustFindProc("Init")
)
func main() {
path := "some"
bytePath = []byte(path)
init.Call(
uintptr(unsafe.Pointer(&bytePath)),
uintptr(9)
)
}
Run Code Online (Sandbox Code Playgroud)
库被调用,有一条错误消息"路径不存在",但我认为我的路径类型不对.这就是图书馆无法看到文件夹的原因.
也许还有更好的方法吗?也许这是一个糟糕的Go使用案例,我应该找到一些包甚至语言?
我想在 Golang 中编写控制器逻辑并处理 json 和数据库,同时在 C 中使用我的数学处理模型。在我看来,调用 C 函数的开销必须尽可能低,就像设置寄存器 rcx、rdx、rsi、rdi 一样,做一些fastcall 并获得 rax 价值。但我听说cgo 的开销很大
说它我有常见的 fastcall x64 c 函数int64 f(int64 a,b,c,d){return a+b+c+d}我如何从 go 调用它,以获得 go testing.Bbenchmark 中最高的潜在基准分数?
PS 没有指针传递,没有技巧,只是对如何以最健壮的方式访问 C 接口感兴趣
我使用的 Go 版本是
go version
go version go1.15.6 darwin/amd64
Run Code Online (Sandbox Code Playgroud)
我go mod init example.com/m在我的文件夹下做了/***.com/m/
现在我想做的go mod init ***.com/m,它显示为
go.mod already exists
Run Code Online (Sandbox Code Playgroud)
我怎样才能清理go.mod不需要的东西?
下面显示的代码,我创建了一个结构类型并希望将其编码为二进制。但它显示binary.Write: invalid type main.Stu错误,我读过一些类似的代码,但我找不到为什么我的代码不起作用?
type Stu struct {
Name string
Age int
Id int
}
func main() {
s := &Stu{
Name: "Leo",
Age: 21,
Id: 1,
}
buf := new(bytes.Buffer)
err := binary.Write(buf, binary.BigEndian, s)
if err != nil{
fmt.Println(err)
}
fmt.Printf("%q\n", buf)
}
Run Code Online (Sandbox Code Playgroud) 我有一个 Go 应用程序,它接受 PowerShell 命令作为输入,创建一个新的 ps1 文件,将命令写入该文件,然后执行脚本文件。
如果该文件对用户不可见,那就太好了。
如果有某种方法将脚本文件创建为内存映射文件,然后执行该内存映射文件,那将是一个很好的解决方案。
使用 CGo,我可以从 Go 应用程序调用 C 或 C++。由于 PowerShell 可以使用 C# 对象,我想也许我们可以以某种方式调用 C# 代码(来自 C/C++ 或 Go)并创建一个 C# 内存映射文件对象,然后 PowerShell 可以使用该对象作为脚本执行。
诚然,我对如何从非托管代码调用托管代码的工作原理一无所知。
那么,是否有某种方法可以获取包含 PowerShell 命令的字符串并将其作为脚本执行,而无需创建磁盘文件?
我在使用 python pandas 时遇到了一个非常奇怪的错误:
import pandas as pd
df = pd.read_csv('C:\Temp\test.csv', index_col=None, comment='#', sep=',')
Run Code Online (Sandbox Code Playgroud)
test.csv 是在记事本中创建的一个非常简单的 CSV 文件:
aaa,bbb,date
hhhhh,wws,20220701
Run Code Online (Sandbox Code Playgroud)
现在我收到错误:
File "C:\test\untitled0.py", line 10, in <module>
df = pd.read_csv('C:\temp\test.csv', index_col=None, comment='#', sep=',')
File "C:\...\lib\site-packages\pandas\util\_decorators.py", line 311, in wrapper
return func(*args, **kwargs)
File "C:\...\lib\site-packages\pandas\io\parsers\readers.py", line 586, in read_csv
return _read(filepath_or_buffer, kwds)
File "C:\...\lib\site-packages\pandas\io\parsers\readers.py", line 482, in _read
parser = TextFileReader(filepath_or_buffer, **kwds)
File "C:\...\lib\site-packages\pandas\io\parsers\readers.py", line 811, in __init__
self._engine = self._make_engine(self.engine)
File "C:\...\lib\site-packages\pandas\io\parsers\readers.py", line 1040, in _make_engine
return mapping[engine](self.f, **self.options) # …Run Code Online (Sandbox Code Playgroud) 在C#我曾经有一个List可以通过索引引用元素,并有一个方法来添加元素.在Go中,我很难拥有这样的数据类型.如果我使用切片我不知道它size.在列表中,我无法直接访问元素.对于我的情况,什么是完美的数据类型:我想要一个列表,并在需要时我需要添加项目,并在需要时我应该能够直接选择单个项目.我要实现索引List吗?或者是否有任何等效的数据类型?
最近,我发现一些代码如下所示:
var m map[int]int
func writem() {
tmpm := make(map[int]int)
for i := 0; i < 4000000; i++ {
tmpm[i] = i + 10
}
m = tmpm
}
func readm() {
for k, v := range m {
_, _ = k, v
}
}
func main() {
writem()
go readm()
writem()
}
Run Code Online (Sandbox Code Playgroud)
该程序运行良好,但是我认为writem可以通过m = tmpm在for循环之前移动功能主体来重新排序,因为这不会更改此goroutine中的行为。而且这种重新排序将导致concurrent map read and map write问题。正如Go Memory Model所说:
仅当重新排序不会改变语言规范所定义的该goroutine中的行为时,编译器和处理器才可以对单个goroutine中执行的读写进行重新排序。
是的,还是这样编写代码安全吗?
我遵循有关在go中构建区块链的文章:https ://jeiwan.cc/posts/building-blockchain-in-go-part-2/
当我学习第2部分时,我无法在prepareDate函数中运行代码。它总是抛出一个错误:
未定义:IntToHex。
这是我的代码:
func (pow *ProofOfWork) prepareData(nonce int) []byte {
data := bytes.Join(
[][]byte{
pow.block.PrevBlockHash,
pow.block.Data,
IntToHex(pow.block.Timestamp),
IntToHex(int64(targetBits)),
IntToHex(int64(nonce)),
},
[]byte{},
)
return data
}
Run Code Online (Sandbox Code Playgroud) 我试图在Golang Web应用程序中使用mysqlstore后端程序包进行gorilla会话.我正在关注这个例子,我的代码是相同的.代码构建和运行正常,但当我去localhost:8080 /在我的浏览器中我收到此错误
运行时错误:无效的内存地址或无指针取消引用
这是我的代码:
package main
import (
"fmt"
"github.com/srinathgs/mysqlstore"
"net/http"
)
var store *mysqlstore.MySQLStore
func sessTest(w http.ResponseWriter, r *http.Request) {
session, err := store.Get(r, "foobar")
session.Values["bar"] = "baz"
session.Values["baz"] = "foo"
err = session.Save(r, w)
fmt.Printf("%#v\n", session)
fmt.Println(err)
}
func main() {
store, err := mysqlstore.NewMySQLStore("root:mypass@tcp(127.0.0.1:3306)/mydb?parseTime=true&loc=Local", "sessions", "/", 3600, []byte("<SecretKey>"))
if err != nil {
panic(err)
}
defer store.Close()
http.HandleFunc("/", sessTest)
http.ListenAndServe(":8080", nil)
}
Run Code Online (Sandbox Code Playgroud)
这是完整的错误消息:
2019/02/12 02:46:43 http:panic serving [:: 1]:63119:运行时错误:无效的内存地址或无指针取消引用goroutine 34 [运行]:net/http.(*conn).serve.func1 (0xc000112320)/usr/local/Cellar/go/1.11.5/libexec/src/net/http/server.go:1746 + 0xd0 …
我使用POP3包从我的邮箱中读取我所有的电子邮件。
我收到了一封来自 POP3下面示例中显示函数。(我省略了一些信息)
我正面临着从中提取信息的问题。
我使用邮件提取信息,但不幸的是,此包无法从原始电子邮件中提取信息。
是否有任何方法或软件包可以帮助我从原始电子邮件中提取信息?
// Retrieve all the email from your mailbox
msgs, _, error := connection.ListAll()
// Convert a chunk of integer to raw email
data, _ := connection.Retr(msgs[0])
// Extract Email Address
to, _ := mail.ParseAddress(data)
Run Code Online (Sandbox Code Playgroud)
panic: runtime error: invalid memory address or nil pointer dereference
[signal 0xc0000005 code=0x0 addr=0x0 pc=0x5819ed]
Run Code Online (Sandbox Code Playgroud)
From:
To:
Subject:
Thread-Topic:
Thread-Index: AdPgWzcFT3FjbSbUT1ycoU2ioB1bKAAAAHuA
X-MS-Exchange-MessageSentRepresentingType: 1
Date:
Message-ID:
Accept-Language: en-SG, en-US
Content-Language: …Run Code Online (Sandbox Code Playgroud) 我想知道是否可以将 Angular gui(index.html、javascript、css、图像等)嵌入到可执行的 go 应用程序中。
例如,Spring Boot (Java) 可以通过将编译后的 Angular 文件复制到 src/main/resources/static 文件夹中来实现这一点,然后将这些文件提供到根路径上(前提是具有 spring-boot-starter-web依赖性)。
Go 1.16(2021 年 2 月)的新功能 //go:embed 是否能够对整个文件夹执行此操作?