-
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)
}