登录
首页 >  Golang >  Go问答

关于对fmt String重载的疑问

来源:SegmentFault

时间:2023-02-17 11:16:27 181浏览 收藏

对于一个Golang开发者来说,牢固扎实的基础是十分重要的,golang学习网就来带大家一点点的掌握基础知识点。今天本篇文章带大家了解《关于对fmt String重载的疑问》,主要介绍了go,希望对大家的知识积累有所帮助,快点收藏起来吧,否则需要时就找不到了!

问题内容

package main

import (
     "fmt"
     //"testpkg"
     "strconv"
)

type Human struct {
     name string
     age  int
}

func (h *Human) String() string {  //此处如果修改为 Human则可以重载,如果*Human则不行
     fmt.Println("is run")
     return h.name + "-" + strconv.Itoa(h.age)
}

func main() {
     jek := Human{"jek", 25}
     fmt.Println(jek)   //但是如果此处修改为 &jek就可以

}

在看书的时候写到这个例子,一开始以为是我写错,后来发现我比书上多了一个* func(h *Human),不太理解这里,求解答

正确答案

如果按照下面写, 会提示prog.go:18: method redeclared: Human.String

func (h *Human) String() string { 
     fmt.Println("is run")
     return h.name + "-" + strconv.Itoa(h.age)
}
func (h Human) String() string { 
     fmt.Println("is run")
     return h.name + "-" + strconv.Itoa(h.age)
}

而实际上
fmt.Println(jek)
fmt.Println(&jek)
这两个调用只会调用对应版本的String(), 编译器将 h *Human 和 h Human 视为同一类型, 但是调用的时候又分开了 h *Human 和 h Human 来调用

文中关于golang的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《关于对fmt String重载的疑问》文章吧,也可关注golang学习网公众号了解相关技术文章。

声明:本文转载于:SegmentFault 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>