使用字符串定义的类型值作为字符串
Use string defined type value as string
我有一个定义的命名类型
type User string
现在我想使用 User
值作为实际字符串,就像这样
func SayHello(u User) string {
return "Hello " + user + "!"
}
但是我收到一个错误:
cannot use "Hello " + user + "!" (type User) as type string in return argument
如何使用命名类型作为其基础类型?
在这种情况下,您可以使用 return "Hello " + string(user) + "!"
您可以使用 fmt.Sprintf
而无需对您的参数进行任何额外的转换或对您的字符串部分进行连接:
func SayHello(u User) string {
return fmt.Sprintf("Hello %s!", u)
}
即使您将类型从 string
更改为 struct
,如果您实现方法 func (u *User) String() string
,您仍然可以使用 SayHello
。然而,这种方法也适用于 goofle
.
提供的常规 string
转换
A value x is assignable to a variable of type T ("x is assignable to
T") if:
- x's type is identical to T.
- x's type V and T have identical underlying types and at least one of V or T is not a defined type.
命名类型type User string
和未命名类型var user string
的变量是完全不同的。
我们可以检查使用反射来显示底层类型。
package main
import (
"fmt"
"reflect"
)
type User string
func main() {
var name User = "User"
var name2 string = "User"
//fmt.Print(name==name2) // mismatched types User and string
fmt.Println(reflect.TypeOf(name2))
fmt.Println(reflect.TypeOf(name))
}
因此检查变量的基础类型,然后将类型转换为原始类型以比较值。
package main
import (
"fmt"
)
type User string
func main() {
var u User
fmt.Print(SayHello(u))
}
func SayHello(u User) string {
change := string(u)
return "Hello " + change + "!"
}
继续查看
Go Playground
Two types are either identical or different.
A defined type is always different from any other type.
User 是定义的类型,因此不同于字符串类型。
由于 User 的底层类型是字符串,您可以简单地 convert from one type to the other:
"Hello " + string(user) + "!"
我有一个定义的命名类型
type User string
现在我想使用 User
值作为实际字符串,就像这样
func SayHello(u User) string {
return "Hello " + user + "!"
}
但是我收到一个错误:
cannot use "Hello " + user + "!" (type User) as type string in return argument
如何使用命名类型作为其基础类型?
在这种情况下,您可以使用 return "Hello " + string(user) + "!"
您可以使用 fmt.Sprintf
而无需对您的参数进行任何额外的转换或对您的字符串部分进行连接:
func SayHello(u User) string {
return fmt.Sprintf("Hello %s!", u)
}
即使您将类型从 string
更改为 struct
,如果您实现方法 func (u *User) String() string
,您仍然可以使用 SayHello
。然而,这种方法也适用于 goofle
.
string
转换
A value x is assignable to a variable of type T ("x is assignable to T") if:
- x's type is identical to T.
- x's type V and T have identical underlying types and at least one of V or T is not a defined type.
命名类型type User string
和未命名类型var user string
的变量是完全不同的。
我们可以检查使用反射来显示底层类型。
package main
import (
"fmt"
"reflect"
)
type User string
func main() {
var name User = "User"
var name2 string = "User"
//fmt.Print(name==name2) // mismatched types User and string
fmt.Println(reflect.TypeOf(name2))
fmt.Println(reflect.TypeOf(name))
}
因此检查变量的基础类型,然后将类型转换为原始类型以比较值。
package main
import (
"fmt"
)
type User string
func main() {
var u User
fmt.Print(SayHello(u))
}
func SayHello(u User) string {
change := string(u)
return "Hello " + change + "!"
}
继续查看 Go Playground
Two types are either identical or different.
A defined type is always different from any other type.
User 是定义的类型,因此不同于字符串类型。
由于 User 的底层类型是字符串,您可以简单地 convert from one type to the other:
"Hello " + string(user) + "!"