相关疑难解决方法(0)

在普通函数中返回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
查看次数

为什么Go允许编译未使用的函数参数?

Go来自C的一个比较值得注意的方面是,如果在其中声明了未使用的变量,编译器将不会构建您的程序.那么,如果在函数中声明了未使用的参数,那么为什么要构建这个程序呢?

func main() {
    print(computron(3, -3));
}


func computron(param_a int, param_b int) int {
    return 3 * param_a;
}
Run Code Online (Sandbox Code Playgroud)

variables parameters compilation go

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

在Golang中获取方法参数名称

给出以下Go方法:

func (t *T) TMethod(data *testData) (interface{}, *error) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

我想反映参数的名称(data在这里).

我尝试了以下,但它返回结构名称(testData在这里):

reflect.ValueOf(T).MethodByName("TMethod").Type().In(0).Elem().Name()
Run Code Online (Sandbox Code Playgroud)

如何获取参数的名称?

reflection go

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

在 Golang 中使用类型别名声明函数

在 Golang 中可以做这样的事情吗?

package main

import "fmt"

type myFunType func(x int) int

var myFun myFunType = myFunType { return x }  // (1) 

func doSomething(f myFunType) {
    fmt.Println(f(10))
}

func main() {
    doSomething(myFun)
}
Run Code Online (Sandbox Code Playgroud)

换句话说,是否可以使用函数类型别名声明函数类型变量而不重复签名?或者,有没有办法在创建函数类型的变量时不总是重新输入整个函数签名

上面的代码示例,我希望它等同于下面的代码示例(用 line 替换(1)line (2)),导致编译错误syntax error: unexpected return, expecting expression

package main

import "fmt"

type myFunType func(x int) int 

var myFun myFunType = func(x int) int { return 2 * x } // (2)

func doSomething(f myFunType) …
Run Code Online (Sandbox Code Playgroud)

function go type-alias

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

为什么在向Golang中的结构添加方法时必须声明变量名?

假设我有一个结构

type Rectangle struct {
    length, width int
}
Run Code Online (Sandbox Code Playgroud)

我想为它添加一个方法:

func (r Rectangle) Area() int {
    return r.length * r.width
}
Run Code Online (Sandbox Code Playgroud)

为什么我必须在这里给它一个变量名r

methods struct go

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

如何在go中以字符串形式获取函数的签名

我正在实现一个加载 go 插件的 go 模块。

我假设主包上存在具有特定名称和特定签名的函数,并且希望在找不到或与预期签名不匹配的情况下有一个很好的错误消息。

给定一个具有函数类型的变量,如何获得该函数的底层签名?

以下仅打印类型的名称(例如main.ModuleInitFunc)而不是完整签名。

package main

import "fmt"

type ModuleInitFunc func(someInt int) error

func main() {
    var myFunc ModuleInitFunc = nil

    fmt.Printf("%T", lol)
}
Run Code Online (Sandbox Code Playgroud)

reflection go

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