-
Go语言中没有“类”的概念,Go语言的结构体与“类”都是复合结构体。
结构体定义
type Student struct {
Name string
Age int
}
结构体使用
package main
import "fmt"
type Student struct {
Name string
Age int
int
}
func main() {
s1 := new(Student) //第一种方式
s2 := Student{"james", 35, 100} //第二种方式
s3 := &Student{ //第三种方式
Name: "LeBron",
Age: 36,
}
//直接打印结构体
fmt.Println(s1)
fmt.Println(s2)
fmt.Println(s3)
//直接操作结构
s1.Name = "jack"
s1.Age = 35
//匿名字段
s1.int = 85
fmt.Println(s1)
}
- 方法与函数类似,只不过在方法定义时会在func和方法名之间增加一个参数。
package main
import "fmt"
type Person struct {
name string
}
func (p Person) GetName() string {
return p.name
}
func main() {
p := Person{
name: "james",
}
fmt.Println(p.GetName())
}
package main
import "fmt"
type Person struct {
name string
}
func (p Person) GetName() string {
return p.name
}
func (p Person) SetName(name string) {
p.name = name
}
func (p *Person) SetNameWithRef(name string) {
p.name = name
}
func main() {
p := &Person{
name: "james",
}
p.SetName("kobe")
fmt.Println(p.GetName())
p1 := Person{
name: "james",
}
p1.SetName("kobe")
fmt.Println(p1.GetName())
p2 := &Person{
name: "james",
}
p2.SetNameWithRef("kobe")
fmt.Println(p2.GetName())
p3 := Person{
name: "james",
}
p3.SetNameWithRef("kobe")
fmt.Println(p3.GetName())
}
- 接口 在go语言中不需要显示的去实现接口,只要一个类型实现了该接口中定义的所有方法就是默认实现了该接口,而且允许多个类型都实现该接口,也允许一个类型实现多个接口。
package main
import "fmt"
//定义一个动物接口
type Animal interface {
Eat()
}
//再定义鸟结构体
type Bird struct {
Name string
}
//实现吃接口
func (b Bird) Eat() {
fmt.Println(b.Name + "吃虫")
}
//再定义狗结构体
type Dog struct {
Name string
}
//实现吃接口
func (d Dog) Eat() {
fmt.Println(d.Name + "吃肉")
}
func EatWhat(a Animal) {
a.Eat()
}
func main() {
b := Bird{"鸟"}
d := Dog{"狗"}
EatWhat(b)
EatWhat(d)
}