一个例子总结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