小编icz*_*cza的帖子

单值上下文中的多值strconv.ParseInt()

我有以下代码:

var i2 uint64;
var err error;
i2, err = uint64(strconv.ParseInt(scanner.Text(), 64, 64));
Run Code Online (Sandbox Code Playgroud)

我收到了错误:

multiple-value strconv.ParseInt() in single-value context
Run Code Online (Sandbox Code Playgroud)

根据我在互联网上找到的所有内容,这意味着我忽略了ParseInt返回的两个参数,但我使用的是错误的.我知道也许错误是非常愚蠢的,但我刚开始学习Go,这让我很困惑.

parsing type-conversion go

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

使用自定义类型实现接口而不导入包

假设有一个第三方软件包使接口可用:

package giantpackage

type UselessInfo struct {
    wontUse     string
    alsoWontUse string
}

type CoolInterface interface {
    DoSomethingAwesome(ui UselessInfo) (string, error)
}
Run Code Online (Sandbox Code Playgroud)

这样做似乎很容易实现:

package main

import giantpackage

type Jedi struct {
    name string
    age  int
}

func (j Jedi) DoSomethingAwesome(ui giantpackage.UselessInfo) (string, error)
    return "Hello world.", nil
}
Run Code Online (Sandbox Code Playgroud)

假设:
1)我实际上并没有在DoSomethingAwesome函数中使用UselessInfo结构.
2)我必须导入的包是巨大的.
3)我必须导入的包不再维护,不能修改.

我的问题:
有没有办法在不导入Giantpackage的情况下实现CoolInterface?

types interface go

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

Go,将数据传递到通道

我有一个问题。这是示例:https: //play.golang.org/p/QSWY2INQuSE

func Avg(c chan string, wg *sync.WaitGroup) {
    defer wg.Done()
    c <- "test"
}

func main() {
    var wg sync.WaitGroup
    c := make(chan string)

    timer1 := time.NewTicker(5 * time.Second)

    for {
        select {
        case <-timer1.C:
            wg.Add(1)
            go Avg(c, &wg)
            wg.Wait()
        }
    }
    fmt.Println(<-c)
}
Run Code Online (Sandbox Code Playgroud)

为什么数据达不到fmt.Println(<-c)

谢谢你!

concurrency channel go goroutine

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

在Go中包装多个实现

我有一个应用程序,该应用程序具有相同API的多个并发实现(例如,一个由SQL数据库支持,另一个由XML文件中存储的数据集支持)。我真正想做的是为API中的每种事物定义一个父类型

  1. 持有所有实现共有的成员变量,并且

  2. 定义所有实现必须具有的方法。

因此,在(无效)Go中,我想做类似的事情:

type Person interface {
    Name string
    Title string
    Position string
    Boss() *Person
}

type Person_XML struct {
    Person
}

func (p *Person_XML) Boss() (*Person, error) {
    // Poke around an XML document and answer the question
    return boss, nil
}

type Person_SQL {
    Person
}

func (p *Person_SQL) Boss() (*Person, error) {
    // Do a DB query and construct the record for the boss
    return boss, nil
}
Run Code Online (Sandbox Code Playgroud)

但是,这当然是不合法的,因为只有结构具有成员变量,只有接口具有成员函数。我可以只使用如下接口:

type Person interface {
    Name() string
    Title() …
Run Code Online (Sandbox Code Playgroud)

struct interface dry embedding go

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

键入断言接口,内部发生的事情

我很好奇当Go执行类型断言而另一个接口是其目标时,内部会发生什么.仅举例来说,请考虑Dave Cheney的博客中的这个例子:

type temporary interface {
    Temporary() bool
}

// IsTemporary returns true if err is temporary.
func IsTemporary(err error) bool {
        te, ok := err.(temporary)
        return ok && te.Temporary()
}
Run Code Online (Sandbox Code Playgroud)

我希望在这里发生很多运行时开销,因为它必须检查类型err并找出它是否具有所有方法.是这样,还是有一些聪明的魔法在下面发生?

methods interface go type-assertion

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

是否可以在 Go 中“按原样”添加嵌套的 json?

这是“按原样”添加嵌套 json 的可能方法吗?嵌套的 json 没有任何结构,可能会有所不同。我需要将嵌套的json数据直接放到根节点。

https://play.golang.org/p/MzBt7DLQEpD

type RootJson struct {
    NestedJson []byte
    AdditionalField string
}

func main() {
    nestedJson := []byte("{\"number\": 1, \"string\": \"string\", \"float\": 6.56}")

    rootJson := RootJson{nestedJson, "additionalField"}
    payload, _ := json.Marshal(&rootJson)

    fmt.Println(string(payload))

}
Run Code Online (Sandbox Code Playgroud)

string json marshalling go

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

JSON将地图的映射应用于对象

我正在为模型上的Update操作编写REST端点.所述映射是简单地将请求的身体的转发作为[]bytejson.Unmarshal.但是,我现在正试图过滤掉uuid所述模型上的属性.因此,而不是解组到模型我现在做给一个map[string]interface{},然后运行delete(m, "uuid").

在这一点上我有地图的数据,但我怎么能养活它放入json到其映射,因为它通常会调用时UnmarshalDecode?有没有比编组更好的选择[]byte,然后在模型上解组?

json struct dictionary http go

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

发生中断时覆盖 golang 配置文件停止

当我kill -SIGINT pid使用 Golang 服务时,我会正常关闭调用profile.Stop,但在调用它之前,我收到了以下消息:profile: caught interrupt, stopping profiles

我什至无法调用 profile.Stop 因为它触发得更快,但是 grpc 侦听和 couchbase 连接关闭正常工作。

无论如何我可以覆盖这个故障的配置文件停止吗?

profiling interrupt go sigint

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

Golang trimPrefix 来自字符串“\”

我已经看到 golang 有函数func TrimPrefix(s, prefix string) string返回 s 没有提供的前导前缀字符串。

我的问题是我有一个以字符“\”开头的字符串(例如“\foo”)。当我尝试使用 TrimPrefix 时出现错误。

高朗代码:

var s = "\foo"
    s = strings.TrimPrefix(s, "\")
    fmt.Print(s)
Run Code Online (Sandbox Code Playgroud)

错误:

./prog.go:10:32: newline in string
./prog.go:10:32: syntax error: unexpected newline, expecting comma or )
Run Code Online (Sandbox Code Playgroud)

我已经看到这是由于 golang understang "\" 作为 scape 字符。你知道我是否可以使用任何 golang 选项来让 golang 明白我不想使用“\”作为转义字符?

string go

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

根据我之前是否打印出切片,计算 sha256 会在附加切片后给出不同的结果

我正在从多个字符串计算 sha256。我以特定方式将它们转换为字节切片并将它们全部附加在一起,然后使用内置库计算散列。但是,根据我是否在计算 sha256 之前打印出切片,我会得到不同的结果。在操场上测试时,我无法重现它。

可以在https://play.golang.org/p/z8XKx-p9huG上查看并运行经过测试的代码,在这两种情况下,它实际上给出了相同的结果。

func getHash(input1 string, input2hex string, input3hex string, input4 string) (string, error) {
    input1bytes := []byte(input1)
    firstHalfinput1Bytes := input1bytes[:8]
    secondHalfinput1Bytes := input1bytes[8:16]

    input4Bytes := []byte(input4)

    input3Bytes, err := hex.DecodeString(input3hex)
    if err != nil {
        fmt.Println("err " + err.Error())
    }

    input2Bytes, err := hex.DecodeString(input2hex)
    if err != nil {
        fmt.Println("err " + err.Error())
    }

    fullHashInputBytes := append(firstHalfinput1Bytes, input2Bytes...)
    // THIS IS THE OPTIONAL PRINT WHICH CHANGES OUTPUT LOCALLY:
    fmt.Println("fullHashInputBytes", fullHashInputBytes)
    fullHashInputBytes = append(fullHashInputBytes, secondHalfinput1Bytes...)
    fullHashInputBytes …
Run Code Online (Sandbox Code Playgroud)

sha256 go slice

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