What does wrapping a type in () do and when should I use it? Golang

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

What does wrapping a type in () do and when should I use it? Golang

问题

将类型包裹在括号中的作用是将其转换为指针类型。在Go语言中,使用(*T)的形式可以将类型T转换为指向T类型的指针。这种转换通常用于在函数调用或表达式中传递指针类型的参数。

例如,blah.(*int)表示将blah转换为指向int类型的指针。这种转换在需要传递指针类型参数的情况下非常有用,例如在函数调用中传递指针参数或者在某些表达式中使用指针类型。

需要注意的是,这种转换只适用于具有指针类型的类型。如果尝试将非指针类型转换为指针类型,将会导致编译错误。

英文:

What exactly does wrapping a type in () do exactly and when should I use it? E.g. blah.(*int)

答案1

得分: 4

这是一个type assertion。类型断言用于将接口类型中的值提取为其他类型。

表达式blah.(*int)断言blah中的值的类型为*int。如果断言成立,则表达式的值是作为*int存储在blah中的值。如果断言不成立,则表达式会引发 panic。

在赋值语句中,可以使用一种特殊形式的类型断言来测试断言:

ip, ok := blah.(*int)

如果blah中的值是*int类型,则该值存储在ip中,并将ok设置为true。否则,ip被设置为零值,ok为false。

英文:

It's a type assertion. Type assertions are used to extract the value in an interface type as some other type.

The expression blah.(*int) asserts that the type of the value in blah is *int. If the assertion holds, then the value of the expression is the value stored in blah as a *int. If the assertion does not hold, then the expression panics.

A special form of a type assertion can be used in an assignment to test the assertion:

 ip, ok := blah.(*int)

If the value in blah is of *int, then the value is stored in ip and ok is set to true. Otherwise, ip is set to the zero value and ok is false.

huangapple
  • 本文由 发表于 2015年9月6日 13:24:17
  • 转载请务必保留本文链接:https://go.coder-hub.com/32420339.html
匿名

发表评论

匿名网友

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

确定