How to convert a 'string pointer' to a string in Golang?

huangapple go评论92阅读模式
英文:

How to convert a 'string pointer' to a string in Golang?

问题

从字符串指针获取字符串值是可能的。

我正在使用goopt包来处理标志解析,该包只返回*string类型。我想使用这些值来调用映射中的函数。

示例:

var strPointer = new(string)
*strPointer = "string"

functions := map[string]func() {
    "string": func(){
        fmt.Println("works")
    },
}  

// 做一些操作以获取字符串值

functions[strPointerValue]()

返回:

./prog.go:17:14: 无法将strPointer(类型为*string)作为映射索引中的string类型使用

示例链接

英文:

Is it possible to get the string value from a pointer to a string?

I am using the goopt package to handle flag parsing and the package returns *string only. I want to use these values to call a function in a map.

Example

var strPointer = new(string)
*strPointer = "string"

functions := map[string]func() {
    "string": func(){
        fmt.Println("works")
    },
}  

//Do something to get the string value

functions[strPointerValue]()

returns

./prog.go:17:14: cannot use strPointer (type *string) 
as type string in map index

答案1

得分: 148

解引用指针:

strPointerValue := *strPointer
英文:

Dereference the pointer:

strPointerValue := *strPointer

答案2

得分: 25

一个简单的函数,首先检查字符串指针是否为nil,可以防止运行时错误:

func DerefString(s *string) string {
	if s != nil {
		return *s
	}

	return ""
}
英文:

A simple function that first checks if the string pointer is nil would prevent runtime errors:

func DerefString(s *string) string {
	if s != nil {
		return *s
	}

	return ""
}

答案3

得分: 3

通用的翻译如下:

func SafeDeref[T any](p *T) T {
	if p == nil {
		var v T
		return v
	}
	return *p
}

这段代码是一个通用的函数,名为SafeDeref。它接受一个指向类型T的指针p作为参数,并返回类型T的值。

函数的作用是安全地解引用指针p。首先,它检查指针p是否为nil,如果是,则创建一个类型T的零值v并返回。如果指针p不为nil,则返回指针p所指向的值*p

这个函数的目的是避免在解引用指针之前进行空指针检查,以简化代码并提高安全性。

英文:

Generic https://stackoverflow.com/a/62790458/1079543 :

func SafeDeref[T any](p *T) T {
	if p == nil {
		var v T
		return v
	}
	return *p
}

</details>



huangapple
  • 本文由 发表于 2014年10月22日 02:41:13
  • 转载请务必保留本文链接:https://go.coder-hub.com/26493923.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定