为了账号安全,请及时绑定邮箱和手机立即绑定

您可以将多个值中的部分或全部作为函数的指针返回吗?

您可以将多个值中的部分或全部作为函数的指针返回吗?

Go
Cats萌萌 2023-05-08 17:45:41
在使用 Go 时,我遇到了各种错误,试图在返回另一个值的同时返回一个字符串作为指针。像这样的东西(请原谅这不是运行代码,我只是写它来了解我想做什么,因为我不知道如何让它工作):func A (s string) *string, int {  // Stuff  return &a, b}*c, d := A("Hi there.")当我尝试各种组合说,返回字符串 (var. a) 作为指针时,我遇到了各种错误。这很简单,有许多返回单个变量的示例,但我不确定是否可以使用多个返回值。抱歉,如果这看起来是一个非常基本的问题,我仍然在思考 Go。
查看完整描述

3 回答

?
幕布斯7119047

TA贡献1794条经验 获得超8个赞

正如 golang 规范中所说你在这部分是错误的:


func A (s string) (*string, int) {
    //stuff
    }

是可编译代码



查看完整回答
反对 回复 2023-05-08
?
qq_遁去的一_1

TA贡献1725条经验 获得超7个赞

您可以从一个函数返回多个变量:


func A (s string) (string, int) {

  a := "hello world"

  b := 99


  return a, b

}


c, d := A("Hi there.")

我想指出的一件事是,在 Go 中,字符串不是指针。在像 C 这样的语言中,您习惯于将 a 视为stringa char*,但是在 Go 中,astring被视为原始类型,就像您将 an 一样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


查看完整回答
反对 回复 2023-05-08
?
慕容森

TA贡献1853条经验 获得超18个赞

我把你的代码放在操场上并设法让它工作。我不确定问题出在哪里,为什么它对我不起作用,但可能还有其他原因。无论如何,稍加按摩就可以了:


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)

}


查看完整回答
反对 回复 2023-05-08
  • 3 回答
  • 0 关注
  • 111 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信