函数
返回值
func add(numList ...int) (int, string) {
var a int = 0
for _, value := range numList {
a += value
}
return a, "计算成功"
}返回类型就写在参数后面(类型,类型)
fmt.Println(add(1, 2, 3, 4, 5))
上面是未定义需要写在return后方,下面就是定义写法,直接return
func info(age int, name string) (Age int, Name string) {
Age = age
Name = name
return
}
fmt.Println(info(18, "张三"))

匿名函数
函数里面不能直接定义函数
但是可以通过定义变量未函数调用
var printName = func(name string) {
fmt.Println(name)
}
printName("我是一个人")结构体
package main
import "fmt"
type Student struct {
Teacher //继承
Name string
Age int
}
type Teacher struct {
Name string
Age int
}
func (s *Student) SetName(Name string) {
s.Name = Name
}
func main() {
t1 := Teacher{
Name: "王老师",
Age: 34,
}
s1 := Student{
Teacher: t1,
Name: "小明",
Age: 18,
}
s1.SetName("小白兔")
fmt.Println(s1.Teacher.Name)
fmt.Println(s1.Name)
}



传递的时候使用指针即可修改
tag
package main
import (
"encoding/json"
"fmt"
)
type Fruit struct {
Name string `json:"name"`
Color string `json:"color"`
Price int `json:"price"`
Else string `json:"else"`
}
func main() {
fruit := Fruit{Name: "苹果", Color: "红色"}
byteData, _ := json.Marshal(fruit)
fmt.Println(string(byteData))
}

忽略字段(直接忽略)
直接使用 "-" 定义
为空忽略(当原来的数据为空即忽略)
使用omitempty
但是如果的原来不是空,而是这个类型的初始值,也会忽略
常见的零值


注意bool为false会忽略
接口

type People interface {
eat()
getName() string
}
type Teacher struct{ Name string }
type Student struct{ Name string }
type Worker struct{ Name string }
func (T Teacher) eat() { fmt.Println(T.Name, "在吃东西") }
func (T Teacher) getName() string {
return T.Name
}
func (S Student) eat() { fmt.Println(S.Name, "在吃东西") }
func (S Student) getName() string {
return S.Name
}
func (W Worker) getName() { fmt.Println("不带返回类型,识别不到") }
func eat(P People) { P.eat() }
func main() {
T := Teacher{Name: "王老师"}
eat(T)
S := Student{Name: "小明"}
eat(S)
}
统一func eat(P People) { P.eat() }来取代调用
类型断言
上面的取代方法func eat(P People)
我们只想给老师吃东西,那么就先判断类型






评论已关闭