所以基本上我想知道在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)
}
最佳答案
您需要将test
放在方括号中,即首先取消引用指针,然后对其进行 slice 。
然后,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
关于pointers - 在Go中是否可以传递字符串指针并使其成为字符串 slice ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62344506/