Golang Go语言中关于类型定义的问题
Golang Go语言中关于类型定义的问题
type Error byte
func (err Error) Error() string {
return "SOCKS error: " + strconv.Itoa(int(err))
}
func main() {
fmt.Println(Error(1))
}
=========
当我执行上述程序时,返回的结果是:
SOCKS error: 1
我认为应该返回的结果是:1
请各位大佬指点一下
func Error() string 实现了 error 接口,所以自动调用了 Error 函数作为字符串,就类似 Stringer
更多关于Golang Go语言中关于类型定义的问题的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
给 Error 打个断点看一下调用栈,或者在那里把 runtime.Stack()打印一下
用 println, fmt.Println 会做其他事情
在Golang(通常简称为Go)中,类型定义是编程语言的一个重要特性,它允许开发者创建新的类型,这些类型可以基于现有的类型但具有不同的行为和属性。Go语言提供了几种方式来定义新类型,主要包括使用type
关键字进行类型别名和定义新结构体、接口等复合类型。
-
类型别名:通过
type NewType OldType
的方式,可以创建一个OldType
的类型别名NewType
。这种类型别名在大多数情况下与原始类型互换,但在类型检查和某些反射操作中,它们被视为不同的类型。 -
结构体:结构体是Go语言中一种自定义的复合数据类型,可以包含多个不同类型的字段。使用
type StructName struct { ... }
定义,结构体类型非常适合表示具有多个属性的实体。 -
接口:接口是Go语言中另一种强大的类型定义方式,它定义了一组方法签名,而不实现它们。任何实现了接口中所有方法的类型都隐式地实现了该接口。接口非常适合于定义对象的行为,实现多态性。
-
其他类型:Go还支持通过类型组合(embedding)、类型断言、类型选择等高级特性来进一步扩展和操作类型系统。
总的来说,Go语言的类型系统既灵活又强大,允许开发者根据需要定义和操作类型,以构建出清晰、模块化和可扩展的代码。理解和善用Go的类型定义,对于编写高质量的Go程序至关重要。