相关疑难解决方法(0)

单值上下文中的多个值

由于Go中的错误处理,我经常最终得到多个值函数.到目前为止,我管理它的方式非常混乱,我正在寻找编写更清晰代码的最佳实践.

假设我有以下功能:

type Item struct {
   Value int
   Name string
}

func Get(value int) (Item, error) {
  // some code

  return item, nil
}
Run Code Online (Sandbox Code Playgroud)

如何item.Value优雅地分配新变量.在介绍错误处理之前,我的函数刚刚返回item,我可以简单地执行此操作:

val := Get(1).Value
Run Code Online (Sandbox Code Playgroud)

现在我这样做:

item, _ := Get(1)
val := item.Value
Run Code Online (Sandbox Code Playgroud)

有没有办法直接访问第一个返回的变量?

error-handling return-value go multiple-return-values

97
推荐指数
4
解决办法
9万
查看次数

如何在Go中使用文字*int64?

我有一个带*int64字段的结构类型.

type SomeType struct {
    SomeField *int64
}
Run Code Online (Sandbox Code Playgroud)

在我的代码中的某个时刻,我想声明一个这样的文字(比如,当我知道所述值应为0,或者指向0时,你知道我的意思)

instance := SomeType{
    SomeField: &0,
}
Run Code Online (Sandbox Code Playgroud)

...除了这不起作用

./main.go:xx: cannot use &0 (type *int) as type *int64 in field value
Run Code Online (Sandbox Code Playgroud)

所以我试试这个

instance := SomeType{
    SomeField: &int64(0),
}
Run Code Online (Sandbox Code Playgroud)

......但这也行不通

./main.go:xx: cannot take the address of int64(0)
Run Code Online (Sandbox Code Playgroud)

我该怎么做呢?我能想出的唯一解决方案是使用占位符变量

var placeholder int64
placeholder = 0

instance := SomeType{
    SomeField: &placeholder,
}
Run Code Online (Sandbox Code Playgroud)

注意:当它是*int而不是a时,&0语法工作正常*int64.编辑:不,不.为此表示歉意.

编辑:

显然,我的问题含糊不清.我正在寻找一种方法来说明一个*int64.这可以在构造函数中使用,或者用于表示文字结构值,或者甚至作为其他函数的参数.但帮助函数或使用不同的类型不是我正在寻找的解决方案.

struct pointers literals go

79
推荐指数
3
解决办法
4万
查看次数

在普通函数中返回Golang中的'ok'映射

在Go中,以下工作(注意一个地图的使用有一个返回,另一个有两个返回)

package main

import "fmt"

var someMap = map[string]string { "some key": "hello" }

func main() {
    if value, ok := someMap["some key"]; ok {
        fmt.Println(value)
    }

    value := someMap["some key"]
    fmt.Println(value)
}
Run Code Online (Sandbox Code Playgroud)

但是,我不知道如何用自己的功能做同样的事情.是否有可能与可选的返回类似的行为map

例如:

package main

import "fmt"

func Hello() (string, bool) {
    return "hello", true
}

func main() {
    if value, ok := Hello(); ok {
        fmt.Println(value)
    }

    value := Hello()
    fmt.Println(value)
}
Run Code Online (Sandbox Code Playgroud)

不会编译(由于错误multiple-value Hello() in single-value context)...有没有办法使这个语法适用于该函数Hello()

return-value go multiple-return-values

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