一个例子总结go语言基本语法 demo.go package main import ( “fmt”) //结构体type PersonD struct { id int name string} //1.函数 //接收值类型参数的函数func valueIntTest(a int) int{ return a+10} //接收指针类型参数的函数func pointIntTest(a *int) int{ return *a+10} //2.方法 //接收者为值类型func (p PersonD) valueShowName() { fmt.Println(p.name)} //接收者为指针类型func (p *PersonD) pointShowName() { fmt.Println(p.name)} func main() { //1.函数测试 //接收值类型参数的函数 测试 a := 2 fmt.Println(“valueIntTest:”,valueIntTest(a)) //函数的参数为值类型,不能将指针作为参数传递 //fmt.Println(“valueIntTest:”, valueIntTest(&a)) //cannot use &a (type *int) as type int in argument to valueIntTest //接收指针类型参数的函数 测试 b := 5 fmt.Println(“pointIntTest:”, pointIntTest(&b)) // 当函数的参数为指针类型时,也不能直接将值类型作为参数传递 //fmt.Println(“pointIntTest:”, pointIntTest(b)) //cannot use b (type int) as type *int in argument to pointIntTest //2.方法测试 //接收者是值类型的方法 测试 personValue := PersonD{101, “hongtao wang”} personValue.valueShowName() //可以用值类型对象调用指针类型方法 personValue.pointShowName() //接收者是指针类型的方法 测试 personPointer := &PersonD{102, “wanghongtao”} personPointer.pointShowName() //可用指针类型的对象调用值类型方法 personPointer.valueShowName() /* 总结: go语言函数和方法的不同 1.定义上的不同(在函数名前面加上接收者就变成方法了) 函数的定义 func function_name( [parameter list] ) [return_types] { 函数体 } 方法的定义 func <接收者> function_name( [parameter list] ) [return_types] { 方法体 } 2.调用的区别 1)如果函数的参数是值类型,调用的时候不能将指针类型的值传入;同样如果函数的参数是指针类型,调用的不能将值类型的值传入 2)如果方法的接收者是值类型,既可以用值类型的对象调用也可以用指针类型的对象调用;通过如果方法的接收者是指针类型,既可以用指针类型的对象调用也可以用值类型的对象调用 go语言定义变量的几种方式 1) a := 2 最好用的方式 2) var a int = 2 3) var a int a = 2 go语言定义指针 & 取出变量在内存中的存储地址(内存地址) * 定义指针(第一次使用的时候定义指针,第二次使用取出指针指向内存地址中的值) 1) a := 2 定义变量 var p *int 定义指针 p = &a 把指针p指向变量a的内存地址 fmt.Println(*p) 取出指针指向内存地址中的值 go语言结构体定义 type PersonD struct { id int name string } 1)结构体对象初始化 personValue := PersonD{101, “hongtao wang”} 2)结构体指针对象初始化 personPointer := &PersonD{102, “wanghongtao”} */ } 运行语言文件 go run demo.go
valueIntTest: 12
pointIntTest: 15
hongtao wang
hongtao wang
wanghongtao
wanghongtao