【问题标题】:Is it possible in Go to pass pointer of string and make it slice of string?是否可以在 Go 中传递字符串指针并使其成为字符串切片?
【发布时间】:2020-10-02 06:49:48
【问题描述】:

所以基本上我想知道在 GO 中是否可能,因为我在玩 Dereference

例如在下面显示的代码中。指针被传递给函数,我试图返回传递的指针字符串的一个字母,在给定的示例中是 H,但是 slice 只能与字符串一起使用。我想知道是否可以使用指针取消引用来做到这一点。

代码示例:

func Test(test *string) {
    if len(*test) > 0 {
        *test = *test[:1]
    }
    strings.ToUpper(*test)
}

func main() {
  str := "hello"
    Test(&str)
  fmt.Print( str)
}

【问题讨论】:

    标签: pointers go slice dereference


    【解决方案1】:

    您需要将test 放在括号中,即先取消引用指针,然后再对其进行切片。

    那么Test 函数仍然不会返回大写H,因为ToUpper 接受并返回一个值。因此,您还需要将ToUpper 的输出重新分配给*test

    func Test(test *string) {
        if len(*test) > 0 {
            *test = (*test)[:1] // bracketed `test`
        }
        *test = strings.ToUpper(*test) // reassign to `test`
    }
    
    func main() {
      str := "hello"
        Test(&str)
      fmt.Print(str) // Prints 'H'
    }
    

    Go Play example

    【讨论】:

      【解决方案2】:

      Go 中是否可以传递字符串的指针并使其成为字符串的切片?

      是的:func (ps *string) []string { return []string{*ps} }

      【讨论】:

      • 所以基本上没有使用return语句就没有办法做到吗?我很好奇它是否只能通过指针取消引用来完成
      • 其实我不知道你到底想做什么。你的问题很不清楚。
      • 好吧,我将字符串指针传递给函数,然后如果字符串不为空,我将使用切片获取字符串的一个字母。仅使用字符串:func (str string) string {},但我想通过指针取消引用来做到这一点
      • @TiPSY 真的不知道你在说什么。 *test[:1] 不是切片,它是字符串上的索引表达式,它产生字符串而不是切片。传递字符串还是字符串指针都没有关系。请澄清问题。
      猜你喜欢
      • 2019-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-27
      • 2017-01-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多