Golang----语法(二)

结构体

结构体构造函数

结构体构造函数返回函数指针,节省内存拷贝开销

type person struct {
	name string
	age  int
}

func newPerson(name string, age int) *person {
	return &person{
		name: name,
		age:  age,
	}
}

func main() {
	Jc := newPerson("Jc", 18)
	fmt.Printf("%T\n", Jc)
	fmt.Println(Jc.age, Jc.name)
}

方法和接收者

type person struct {
	name string
	age  int
}

func newPerson(name string, age int) *person {
	return &person{
		name: name,
		age:  age,
	}
}

// 方法是作用于特殊类型的函数
func (aPerson person) sing() {
	fmt.Println(aPerson.name, "is sing")
}

func main() {
	Jc := newPerson("Jc", 18)
	Jc.sing()
	fmt.Printf("%T\n", Jc)
	fmt.Println(Jc.age, Jc.name)
}

标识符大写

Go语言中标识符如果是大写的,说明是包中的公有成员,对外部包可见、暴露的。
Go语言中要求对大写标识符写上注释。如:

// Person 是人类
type Person struct {
	name string
	age  int
}

方法的接收者传递方式

方法的接收者是以拷贝的形式传递的,如果想修改接收者的成员,需要传递指针。

func (aPerson *person) growing() {
	aPerson.age++
}

func main() {
	Jc := newPerson("Jc", 18)
	fmt.Println(Jc.age, Jc.name)
	Jc.growing()
	fmt.Println(Jc.age, Jc.name)
}

给自定义类型定义方法

package main

import "fmt"

// 给自定义类型 定义方法
type myString string

func (ms myString) myStringFunc() {
	fmt.Printf("myString func\n")
}

func main() {
	var myString myString = "abc"
	fmt.Printf("%s\n", myString)
	myString.myStringFunc()
}

匿名结构体实现继承

type animal struct {
	name string
}

func (a animal) run() {
	fmt.Println(a.name, "is run")
}

type cat struct {
	animal // 匿名结构体实现继承
	age    int
}

func main() {
	huahua := cat{
		animal: animal{"huahua"},
		age:    2,
	}
	huahua.run()
}

json

// 结构体与json

// 序列化:  把Go中结构体转化为json字符串
// 反序列化:把json字符串,转为Go语言结构体
// 大写!才可以被外部访问,也可以用tag
type person struct {
	Name string `json:"name" db:"name" init:"name"`
	Age  int    `json:"age"`
}

func main() {
	ap := person{
		"Jc",
		23,
	}
	byte, err := json.Marshal(ap)
	if err != nil {
		fmt.Println("err")
	}
	fmt.Println(string(byte))
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值