标签:完成 res 类型 strong man 数据类型 关键字 基本 通过
@
type A struct {
Name string
}
type B struct {
Name string
}
func main(){
a := A{}
a.Print()
b := B{}
b.Print()
}
func (a A) Print(){
fmt.Println("A")
}
func (b B) Print(){
fmt.Println("B")
}
//就像重载一样,但是不是(a A)(b B)就是receiver
/*
> Output:
command-line-arguments
A
B
*/
func (a A) Print(){
fmt.Println("A")
}
func (a A) Print(b int){
fmt.Println("A")
}
type A struct {
Name string
}
type B struct {
Name string
}
func main(){
a := A{}
a.Print()
fmt.Println(a.Name)
b := B{}
b.Print()
fmt.Println(b.Name)
}
//指针传递
func (a *A) Print(){
a.Name="AA"
fmt.Println("A")
}
//值传递
func (b B) Print(){
b.Name="BB"
fmt.Println("B")
}
/*
> Output:
command-line-arguments
A
AA
B
<空格>
> Elapsed: 6.294s
*/
a.Print()
编译器会自动完成转换type TZ int
func main(){
var a TZ
a.Print()
}
func (a *TZ) Print(){
fmt.Println("TZ")
}
/*
> Output:
command-line-arguments
TZ
*/
//method value
a.Print()
//method expression
(*TZ).Print(&a)
二者输出结果一样
type A struct{
name string
}
func main(){
a := A{}
a.Print()
fmt.Println(a.name)
}
func (a *A) Print(){
a.name="123"
fmt.Println(a.name)
}
/*
> Output:
command-line-arguments
123
123
*/
例子
type A int
func (a *A) Increase(){
*a += 100
}
func (a *A)Increase2(num A) {
*a += num
}
func main(){
//显示类型声明,不要用a := 0,这样就是int了
var a A
a=0
a.Increase()
fmt.Println(a)
a.Increase2(100)
fmt.Println(a)
}
/*
> Output:
command-line-arguments
100
200
*/
方法:func (a A) add(num int) int {}
函数:func add(num1 int,num2 int) int {}
方法和函数的区别,方法在func关键字后是接收者而不是函数名,接收者可以是自己定义的一个类型,这个类型可以是struct,interface,甚至我们可以重定义基本数据类型。
标签:完成 res 类型 strong man 数据类型 关键字 基本 通过
原文地址:https://www.cnblogs.com/leafs99/p/golang_basic_08.html