在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()?
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) 给出以下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)
如何获取参数的名称?
在 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) 假设我有一个结构
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?
我正在实现一个加载 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) go ×6
reflection ×2
compilation ×1
function ×1
methods ×1
parameters ×1
return-value ×1
struct ×1
type-alias ×1
variables ×1