Go基础及语法(四)


本文摘自网络,作者,侵删。

结构体,匿名结构体,构造函数,方法和接收者,结构体的值,结构体的嵌套和匿名字段,JSON序列化与反序列化



结构体

package main

import "fmt"

//定义结构体
type person struct {
	name string
	age  int
}

func main() {
	p1 := person{name: "a", age: 18} //初始化结构体
	fmt.Println(p1) //{a 18}
}

匿名结构体

package main

import "fmt"

func main() {
	//匿名结构体
	p2 := struct {
		name string
		age  int
	}{name: "b", age: 20}
	fmt.Println(p2.name, p2.age) //b 20
}

构造函数

package main

import "fmt"

type person struct {
	name string
	age  int
}

//构造函数
func newPerson(s string, i int) (p person) {
	p = person{
		name: s,
		age:  i,
	}
	return p
}

func main() {
	p3 := newPerson("c", 22) //初始化结构体
	fmt.Println(p3)          //{c 22}
}

方法和接收者

package main

import "fmt"

type person struct {
	name string
	age  int
}

func newPerson(s string, i int) (p person) {
	p = person{
		name: s,
		age:  i,
	}
	return p
}

/*
构造方法
func (接收者 类型) 方法名(){
	方法主体
}
 */
func (p person) method() {
	fmt.Println("person's method") //person's method
}

func main() {
	p4 := newPerson("d", 24) //初始化结构体
	p4.method() //调用方法
}

结构体的值

在Go语言中,函数之间参数的传递都是经过拷贝的,如果想在方法上修改结构体的值,需传入指针

package main

import "fmt"

type person struct {
	name string
	age  int
}

func newPerson(s string, i int) (p person) {
	p = person{
		name: s,
		age:  i,
	}
	return p
}

func (p person) method1() {
	p.age++
}

//*接收传递参数的指针
func (p *person) method2() {
	p.age++
}

func main() {
	p5 := newPerson("d", 24)
	p5.method1()
	fmt.Println(p5.age) //24
	p5.method2()
	fmt.Println(p5.age) //25
}

结构体的嵌套和匿名字段

package main

import "fmt"

type person struct {
	name string
	age  int
}

type school struct {
	class  string
	person //结构体的匿名字段
}

func main() {
	s := school{
		class: "A",
		person: person{
			name: "a",
			age:  18,
		},
	}
	fmt.Println(s) //{A {a 18}}
}

JSON序列化与反序列化

package main

import (
	"encoding/json"
	"fmt"
)

type Person struct {
	Name string
	Age  int
}

type school2 struct {
	Class  string
	Person Person
}

func main() {
	s := school2{
		Class: "A",
		Person: Person{
			Name: "a",
			Age:  18,
		},
	}
	k, v := json.Marshal(s) //JSON序列化
	if v != nil {
		fmt.Println("JSON反有误")
	}
	fmt.Println(string(k)) //{"Class":"A","Person":{"Name":"a","Age":18}}
}

匿名结构体

package main

import (
	"encoding/json"
	"fmt"
)

type Person struct {
	Name string
	Age  int
}

type school struct {
	Class  string
	Person
}

func main() {
	s := school{
		Class: "A",
		Person: Person{
			Name: "a",
			Age:  18,
		},
	}
	k, v := json.Marshal(s) //序列化
	if v != nil {
		fmt.Println("JSON反有误")
	}
	fmt.Println(string(k)) //{"Class":"A","Name":"a","Age":18}
	var s2 school
	json.Unmarshal([]byte(string(k)), &s2) //反序列化
	fmt.Println(s2) //{A {a 18}}
}


本文来自:51CTO博客

感谢作者:mb6004f83c7725c

查看原文:Go基础及语法(四)

相关阅读 >>

2021-03-06:Go中,公共变量是协程安全吗?赋值操作是原子的吗?为什么?

聊聊nacos-coredns-plugin的udpserver

Golang cond基本用法

python中的数据类型

09 Golang sort排序

聊聊Golang的ddd项目结构

Golang有什么用途?

Go之http包的服务端介绍

Golang指针传递和值传递的区别是什么?

Go-zero 如何扛住流量冲击(二)

更多相关阅读请进入《Go》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...