小编kos*_*tix的帖子

在Windows Go中使用DLL

我正在尝试在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使用案例,我应该找到一些包甚至语言?

dll winapi go

0
推荐指数
1
解决办法
238
查看次数

从 Golang 调用 C 函数

我想在 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 接口感兴趣

c performance ffi go cgo

0
推荐指数
1
解决办法
1121
查看次数

如何撤消“go mod init”

我使用的 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不需要的东西?

go

0
推荐指数
1
解决办法
1295
查看次数

错误“binary.Write:无效类型”是什么意思?

下面显示的代码,我创建了一个结构类型并希望将其编码为二进制。但它显示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

0
推荐指数
1
解决办法
761
查看次数

是否可以执行内存映射的 PowerShell 脚本文件?

我有一个 Go 应用程序,它接受 PowerShell 命令作为输入,创建一个新的 ps1 文件,将命令写入该文件,然后执行脚本文件。

如果该文件对用户不可见,那就太好了。

如果有某种方法将脚本文件创建为内存映射文件,然后执行该内存映射文件,那将是一个很好的解决方案。

使用 CGo,我可以从 Go 应用程序调用 C 或 C++。由于 PowerShell 可以使用 C# 对象,我想也许我们可以以某种方式调用 C# 代码(来自 C/C++ 或 Go)并创建一个 C# 内存映射文件对象,然后 PowerShell 可以使用该对象作为脚本执行。

诚然,我对如何从非托管代码调用托管代码的工作原理一无所知。

那么,是否有某种方法可以获取包含 PowerShell 命令的字符串并将其作为脚本执行,而无需创建磁盘文件?

powershell ipc go

0
推荐指数
1
解决办法
809
查看次数

加载纯 CSV 文件时 pandas read_csv 错误

我在使用 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)

python windows path

0
推荐指数
1
解决办法
1036
查看次数

什么相当于C#的`List`

C#我曾经有一个List可以通过索引引用元素,并有一个方法来添加元素.在Go中,我很难拥有这样的数据类型.如果我使用切片我不知道它size.在列表中,我无法直接访问元素.对于我的情况,什么是完美的数据类型:我想要一个列表,并在需要时我需要添加项目,并在需要时我应该能够直接选择单个项目.我要实现索引List吗?或者是否有任何等效的数据类型?

go

-1
推荐指数
1
解决办法
192
查看次数

go编译器可以重新排序以下代码吗?

最近,我发现一些代码如下所示:

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中执行的读写进行重新排序。

是的,还是这样编写代码安全吗?

concurrency go happens-before data-race

-1
推荐指数
1
解决办法
72
查看次数

如何将int转换为十六进制

我遵循有关在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)

go

-2
推荐指数
1
解决办法
4221
查看次数

运行时错误:无效的内存地址或无指针取消引用

我试图在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 …

go

-2
推荐指数
1
解决办法
483
查看次数

如何从原始电子邮件中提取信息

到目前为止我所做的

我使用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)

mime go email-parsing

-2
推荐指数
1
解决办法
2134
查看次数

是否可以将 Angular 嵌入到 Golang 应用程序中?

我想知道是否可以将 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 是否能够对整个文件夹执行此操作?

assets go embedded-resource angular

-2
推荐指数
1
解决办法
813
查看次数

-8
推荐指数
1
解决办法
227
查看次数