go基础篇之三

一、结构体

Go语言中没有“类”的概念,也不支持“类”的继承等面向对象的概念。Go语言中通过结构体的内嵌再配合接口比面向对象具有更高的扩展性和灵活性。但是它相当于java中的实体类。

Go语言提供了一种自定义数据类型,可以封装多个基本数据类型,这种数据类型叫结构体,英文名称struct。 也就是我们可以通过struct来定义自己的类型了。

Go语言中通过struct来实现面向对象。

在Go语言中有一些基本的数据类型,如string整型浮点型布尔等数据类型, Go语言中可以使用type关键字来定义自定义类型。比如下面的Person结构体:

// Person 结构体
type Person struct {
	name string
	age  int
}

什么是结构体中的tag呢?

tag是结构体的元信息,可以在运行的时候通过反射的机制读取出来。 Tag在结构体字段的后方定义,由一对反引号包裹起来,具体的格式如下:

type Person struct {
	ID   int `json:"id"` //通过指定tag实现json序列化该字段时的key
	Name string
	Age  int
}

二、结构体实战

package main

import "fmt"

/**
struct  结构体
结构体是将零个或者多个类型的变量,组合在一起的聚合数据变量。也可以当做是数据的集合。

*/
func main() {

	var p1 Person
	p1.age = 10
	p1.name = "钟渊"

	fmt.Println(p1)

	var p2 = Person{age: 20, name: "zhangsan"}

	fmt.Println(p2)

	p3 := Person{age: 30, name: "xiaozhang"}

	fmt.Println(p3)

	//匿名结构体

	p4 := struct {
		name string
		age  int
	}{
		name: "wangsi",
		age:  33,
	}

	fmt.Println(p4)

}

// Person 结构体
type Person struct {
	name string
	age  int
}

三、结构体的序列化

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。JSON键值对是用来保存JS对象的一种方式,键/值对组合中的键名写在前面并用双引号""包裹,使用冒号:分隔,然后紧接着值;多个键值之间使用英文,分隔。

package main

import (
	"encoding/json"
	"fmt"
)

type Result struct {
	Code int `json:"code"`

	Msg string `json:"msg"`
}

// 结构体的序列化
func main() {
	var r Result
	r.Code = 200
	r.Msg = "success"

	// 序列化 需要序列化的结构体中的字段首字母必须大写
	jsons, errs := json.Marshal(r)

	if errs != nil {
		fmt.Println("jsons error", errs)
	}

	fmt.Println("json data=", string(jsons))

	fmt.Println("r data=", r)

	var r2 Result

	// 反序列化
	errs = json.Unmarshal(jsons, &r2)

	if errs != nil {
		fmt.Println(" error ", errs)
	}

	fmt.Println("r2=", r2)

	toJson(&r)

	setData(&r)

	toJson(&r)

}

func toJson(res *Result) {
	jsons, errs := json.Marshal(res)
	if errs != nil {
		fmt.Println("res marshal error", errs)
	}
	fmt.Println("data", string(jsons))

}

func setData(res *Result) {
	res.Code = 500
	res.Msg = "服务器错误"
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值