Go从0开发(5)_递归与结构体

递归函数

func sum(x int) int {
z:= x * 3
if(z < 100){
return sum(z)
}
return z
}

func main() {
fmt.Println(sum(5))
}

类型别名/自定义类型

//自定义类型
type int64 int
//类型别名
type int128 = int
func main() {
var a int64 = 65
fmt.Println(a)
fmt.Printf("%T \n",a)

var b int128 = 65
fmt.Println(b)
fmt.Printf("%T \n",b)

var c rune
c = 12
fmt.Println(c)
fmt.Printf("%T \n",c)
}

 结构体


type person struct {
name string
age int
gender string
hobby []string
}

func main() {
var p person
p.name = ""
p.age = 12
p.hobby = []string{}

fmt.Printf("%#v\n",p)

//匿名结构体
var s struct{
x int
y string
}
s.x = 1
fmt.Printf("%#v\n",s)

}

结构体操作

type dog struct {
name string
}

func (d dog) dogs() {
fmt.Println(d.name)
}

type myint int

func (i myint) mynum() {
fmt.Println(i)
}

func main() {
d := dog{name:"狗"}
d.dogs()

i := myint(123)
i = 789
i.mynum()
}

嵌套

//嵌套
type A struct {
name string
}

type B struct {
age int
}

type C struct {
names A
B
}


func main() {

var p C
p.names.name = "ads"
p.age = 12

fmt.Printf("%v\n", p)
fmt.Printf("%#v\n", p)

d := C{names:A{name:"asd"},B:B{age:111}}
fmt.Printf("%v\n", d)
fmt.Printf("%#v\n", d)

}

结构体继承


type animal struct {
name string
}

func (a animal) move() {
fmt.Printf("%s 会动 \n",a.name)
}

type dog struct {
feet uint8
animal
}

func (d dog) wang() {
fmt.Printf("%s 会 汪汪汪~~~ \n",d.name)
}

func main() {
gou := dog{feet:111,animal:animal{name:"大狗"}}
gou.move()
gou.wang()
}

结构体与json


//结构体与json
//1. 序列化 结构体转为json
//2. 反序列化 json转go的结构体

type status struct {
Name string `json:"name"`
Age int `json:"age"`
Money float64 `json:"money"`
}

func main() {
j := status{
Name: "张三",
Age: 0,
Money: 0,
}


//返回的是字节
js,err := json.Marshal(j) ;if err!=nil{
fmt.Println("报错了")
}
//需要转一下
jsons :=string(js)
fmt.Println("json: ",jsons)

//反序列化
var p status
json.Unmarshal([]byte(jsons),&p)
fmt.Printf("%#v \n",p)
}

练习操作

package main

import "fmt"

type class struct {
id int
title string
}

type school struct {
cls map[int]class
}

func (sch *school) addclass(id int,title string) {
c := class{
id: id,
title: title,
}
if sch.cls == nil {
sch.cls = make(map[int]class)
}
key := len(sch.cls)+1
sch.cls[key] = c
}

func main() {

var sch school
sch.addclass(1001,"高二三班")
sch.addclass(1002,"高二四班")
sch.addclass(1003,"高二一班")
sch.addclass(1004,"高二二班")


fmt.Println(sch)
}


伍先生
  • 职业: 程序员,产品
  • 码龄: 8.7
  • 技能: PHP Go 前端
  • 微信: JwCode
  • 公众号/小程序: 渐悟分享