使用Go,在尝试返回字符串作为指针,同时还返回另一个值时,我遇到各种错误。这样的事情(请谅解,因为这不是正在运行的代码,我写了它只是为了让我感觉要做什么,因为我不知道如何使其完全正常工作):
func A (s string) *string, int {
// Stuff
return &a, b
}
*c, d := A("Hi there.")
当我尝试各种组合来说时,将字符串(变量a
)作为指针返回时会遇到各种错误。这很容易,并且有许多示例返回了单个变量,但是我不确定是否可以使用多个返回值。
很抱歉,如果这似乎是一个非常基本的问题,我仍然在围着Go前进。
答案 0 :(得分:2)
答案 1 :(得分:0)
您可以从一个函数返回多个变量:
func A (s string) (string, int) {
a := "hello world"
b := 99
return a, b
}
c, d := A("Hi there.")
我想指出的一件事是,在Go中,字符串不是指针。在像C这样的语言中,您习惯于将string
视为char*
,但是在Go语言中,string
被视为原语,就像int
一样。
这似乎会时不时地绊倒人们,但是实际上它非常不错,因为您不必担心带有字符串的指针。
如果您发现自己想返回一个nil
字符串(由于它不是指针而无法执行),那么您将返回一个空字符串(""
)
指针:如果您真的想做指针...
func A (s string) (*string, int) {
a := "hello world"
b := 99
// NOTE: you have to have a variable hold the string.
// return a, &"hello world" // <- Invalid
return a, &b
}
// 'd' is of type *string
c, d := A("Hi there.")
var sPtr *string = d
var s string = *d // Use the * to dereference the pointer
答案 2 :(得分:0)
@poy:我拿了你的代码,放在操场上,设法使其正常工作。我不知道问题是什么,为什么它对我不起作用,但可能还有其他情况。无论如何,一点点按摩就可以了:
package main
import (
"fmt"
)
func A (s *string) (*string, int) {
b := 99
return s, b
}
func main() {
r := "Hi there."
var s *string = &r
c, d := A(s)
fmt.Println(*c, d)
}