小编kos*_*tix的帖子

为什么map [time.Time]字符串有时不起作用?

这是一个示例,表示map [time.Time]字符串"不起作用".

package main

import (
    "fmt"
    "time"
)

type MyDate time.Time

func NewMyDate(year, month, day int, tz time.Location) (MyDate, error) {
    return MyDate(time.Date(year, time.Month(month), day, 0, 0, 0, 0, &tz)), nil
}

func (md MyDate)ToTime() time.Time {
    return time.Time(md)
}

func main()  {
    timeMap := make(map[time.Time]string)

    md1, _ := NewMyDate(2019, 1, 1, *time.UTC)
    md2, _ := NewMyDate(2019, 1, 1, *time.UTC)

    timeMap[md1.ToTime()] = "1"
    timeMap[md2.ToTime()] = "2"

    for k, v := range timeMap {
        fmt.Println(k, v)
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

2019-01-01 …

datetime associative-array go

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

Golang将JSON从S3读取到内存中的结构中

我在 S3 中有一个 JSON 文件,采用以下结构的格式:

type StockInfo []struct {
    Ticker         string `json:"ticker"`
    BoughtPrice    string `json:"boughtPrice"`
    NumberOfShares string `json:"numberOfShares"`
}
Run Code Online (Sandbox Code Playgroud)

我想将其读入 S3 中的结构值。在 python 中,代码看起来像这样:

import boto3
import json

s3 = boto3.client('s3', 'us-east-1')
obj = s3.get_object(Bucket=os.environ["BucketName"], Key=os.environ["Key"])
fileContents = obj['Body'].read().decode('utf-8')
json_content = json.loads(fileContents)
Run Code Online (Sandbox Code Playgroud)

然而我有点困惑如何在 Go 中实现这一点。我已经走到这一步了:

package main

import (
    "archive/tar"
    "bytes"
    "fmt"
    "log"
    "os"

    "github.com/aws/aws-sdk-go/aws"
    "github.com/aws/aws-sdk-go/aws/session"
    "github.com/aws/aws-sdk-go/service/s3"
    "github.com/aws/aws-sdk-go/service/s3/s3manager"
    "github.com/joho/godotenv"
)

type StockInfo []struct {
    Ticker         string `json:"ticker"`
    BoughtPrice    string `json:"boughtPrice"`
    NumberOfShares string `json:"numberOfShares"`
}

func init() {
    // loads values …
Run Code Online (Sandbox Code Playgroud)

json amazon-s3 go unmarshalling amazon-web-services

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

包中的类型' - '无效?

注意:顺便说一句,我正在使用Perl 5上的Perl/Tk编写GUI.

我试图执行我的代码,但要找到此错误消息:

COUNT 0
Invalid type '-' in pack at pack2.pl line 62.
Run Code Online (Sandbox Code Playgroud)

这是我的应用程序中的第62行:

my $be = $f1->BrowseEntry(-label => "Widget $count:",
        -choices => ["right", "left", "top", "bottom"],
        -variable => \$packdirs[$count], -browsecmd => \&repack)
        -pack(-ipady => 5, -side => 'left');
Run Code Online (Sandbox Code Playgroud)

我的代码中没有任何问题,有人可以帮助我吗?

perl user-interface arguments tk-toolkit

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

如何在我暂存更改时让Git自动忽略某些文件?

我的Git目录中有一个文件夹,用于存储程序运行时的信息,我不希望这些信息继续添加到repo中.

目前我只是避免在git gui中选择此文件夹中的文件.这可能非常麻烦,因为它们通常很多.使用gui或命令行执行此操作的最佳方法是什么?

git staging

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

git-pull调用中不同refspec之间的差异

使用以下git命令有什么区别

git pull origin master
git pull origin master:master

一些观察

1)第一个告诉我是否有任何冲突,但另一个简单地说“拒绝-非快进”

2)第二个不会更新我的远程指针,即源/主控,如果它失败

git git-pull

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

Go:有效处理通过TCP接收的碎片数据

我正在编写一个小型tcp服务器,它只能读取数据,解析接收数据(动态长度帧)并处理这些帧.请考虑以下代码:

func ClientHandler(conn net.Conn) {
    buf := make([]byte, 4096)
    n, err := conn.Read(buf)
    if err != nil {
        fmt.Println("Error reading:", err.Error())
        return
    }
    fmt.Println("received ", n, " bytes of data =", string(buf))
    handleData(buf)
Run Code Online (Sandbox Code Playgroud)

这几乎就是我的代码的本质.我将X字节读入空缓冲区然后处理数据.

问题发生在:

  1. 一帧数据大于它试图从tcp连接读入的缓冲区.在这种情况下,我无法处理数据,直到我收到其余的数据(但接收缓冲区已经被先前的数据占用).
  2. 当缓冲区包含一个半帧的数据时,我需要处理第一帧,同时保留不完整的帧以供以后使用......在这种情况下,我需要从缓冲区中删除处理过的部分,然后将不完整的部分移动到这个框架的剩余部分还有空间.

这两种情况都可能需要重新分配和复制数据,这可能是一项代价高昂的操作?此外,除了扩展缓冲区之外,我对如何处理大于缓冲区的帧没有任何想法......但是,不断增加的缓冲区可能会导致性能问题和拒绝服务.最后,但并非最不重要的是,我不知道Golang的标准库是否足以知道是否有任何明确构建的包用于处理这些情况.

所以我的问题是:

  1. 有没有处理这些情况的最佳做法?
  2. 是否有任何golang软件包可以为我做一些或大部分的事情?

谢谢.

buffer tcp go

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

获取ASCII字符串字节的base-16(十六进制)呈现字符串

例如

input := "Office"
want := "4f6666696365" // Note: this is a string!!
Run Code Online (Sandbox Code Playgroud)

我知道字符串文字已经存储在UTF-8中了.在UTF-8表示中将此转换为字符串的最简单方法是什么?

调用EncodeRune每个角色似乎太麻烦了.

go

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

从 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
查看次数

错误“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
查看次数