Golang Struct 声明和使用

Go可以声明自定义的数据类型,组合一个或多个类型,可以包含内置类型和用户自定义的类型,可以像内置类型一样使用struct类型

Struct 声明

具体的语法

type identifier struct{
field1 data_type
field2 data_type
field3 data_type
}

例子

package main

import (
"fmt"
) type rectangle struct {
length float64
breadth float64
color string
} func main() {
fmt.Println(rectangle{10.4, 25.10, "red"})
}
struct 实例化的方法
  1. 点运算符

    可以使用点运算符访问结构体中的数据值
type rectangle struct {
length int
breadth int
color string geometry struct {
area int
perimeter int
}
} func main() {
var rec rectangle
rec.breadth = 19
rec.length = 23
rec.color = "Green" rec.geometry.area = rec.length * rec.breadth
rec.geometry.perimeter = 2 * (rec.length + rec.breadth)
fmt.Println(rec)
fmt.Println("Area:\t", rec.geometry.area)
fmt.Println("Perimeter:", rec.geometry.perimeter)
}
  1. 使用 var关键词和 :=运算符

    如果初始化时,指定了特定的名称,那么有些字段是可以省略的
type rectangle struct {
length int
breadth int
color string
} func main() {
var rect1 = rectangle{10, 20, "Red"}
fmt.Println(rect1) var rect2 = rectangle{length: 10, color: "Red"}
fmt.Println(rect2) rect3 := rectangle{10, 20, "Green"}
fmt.Println(rect3) rect4 := rectangle{length: 10, breadth: 20, color: "Green"}
fmt.Println(rect4) rect5 := rectangle{breadth: 20, color: "Green"}
fmt.Println(rect5)
}
  1. 使用 new 关键字
type rectangle struct {
length int
breadth int
color string
} func main() {
rect1 := new(rectangle)
rect1.length = 10
rect1.breadth = 20
rect1.color = "Green"
fmt.Println(rect1) rect2 := new(rectangle)
rect2.breadth = 20
rect2.color = "Red"
fmt.Println(rect2)
}
  1. 使用 & 运算符
type rectangle struct {
length int
breadth int
color string
} func main() {
var rect1 = &rectangle{10, 20, "Red"} //此时不能省略任何值
fmt.Println(rect1) var rect2 = &rectangle{}
rect2.length = 10
rect2.color = "Red"
fmt.Println(rect2) var rect3 = &rectangle{}
(*rect3).breadth = 20
(*rect3).color = "Blue"
fmt.Println(rect3)
}
struct 练习
  1. struct中的tag标签
type Employee struct {
FirstName string `json:"firstname"`
LastName string `json:"lastname"`
City string `json:"city"`
} func main() {
json_str := `
{
"firstname":"Kevin",
"lastname":"Woo",
"city":"Beijing"
}` emp1 := new(Employee)
err := json.Unmarshal([]byte(json_str), emp1)
if err != nil {
fmt.Println(err)
}
fmt.Println(emp1) emp2 := new(Employee)
emp2.FirstName = "John"
emp2.LastName = "Lee"
emp2.City = "Shanghai"
jsonStr, _ := json.Marshal(emp2)
fmt.Printf("%s", jsonStr)
}

输出结果

&{Kevin Woo Beijing}
{"firstname":"John","lastname":"Lee","city":"Shanghai"}
  1. 内嵌的 struct 类型
func main() {
type Salary struct {
Basic, HRA, TA float64
}
type Employee struct {
FirstName, LastName, Email string
Age int
MonthlySalary []Salary
} e := Employee{
FirstName: "Kevin",
LastName: "Woo",
Email: "test@mail.com",
Age: 12,
MonthlySalary: []Salary{
Salary{
Basic: 15000.00,
HRA: 5000.0,
TA: 2000.0,
},
Salary{
Basic: 16000.0,
HRA: 6000.0,
TA: 2100.0,
},
},
} fmt.Println(e.FirstName,e.LastName)
fmt.Println(e.Age)
fmt.Println(e.Email)
fmt.Println(e.MonthlySalary[0])
fmt.Println(e.MonthlySalary[1])
}

输出结果

Kevin Woo
12
test@mail.com
{15000 5000 2000}
{16000 6000 2100}
  1. struct 添加方法
type Salary struct {
Basic, HRA, TA float64
}
type Employee struct {
FirstName, LastName, Email string
Age int
MonthlySalary []Salary
} func (e Employee) EmpInfo() string {
fmt.Println(e.FirstName, e.LastName)
fmt.Println(e.Age)
fmt.Println(e.Email)
for _, info := range e.MonthlySalary {
fmt.Println("=================")
fmt.Println(info.Basic)
fmt.Println(info.HRA)
fmt.Println(info.TA)
}
return "-------------------"
} func main() { e := Employee{
FirstName: "Kevin",
LastName: "Woo",
Email: "test@mail.com",
Age: 12,
MonthlySalary: []Salary{
Salary{
Basic: 15000.00,
HRA: 5000.0,
TA: 2000.0,
},
Salary{
Basic: 16000.0,
HRA: 6000.0,
TA: 2100.0,
},
},
} fmt.Println(e.EmpInfo())
}

输出结果

Kevin Woo
12
test@mail.com
=================
15000
5000
2000
=================
16000
6000
2100
-------------------

Golang Struct 声明和使用的更多相关文章

  1. 【GoLang】GoLang struct 使用

    代码示例: package main import "fmt" type Human struct { name string age int weight int } type ...

  2. golang struct的使用

    Go struct tag深入理解 喜欢本站的朋友可以收藏本站,或者加入QQ群:172816590,我们大家一起来交流技术! 欢迎来到梁钟霖个人博客网站.本个人博客网站提供最新的站长新闻,各种互联网资 ...

  3. golang struct

    ex1 /* https://golangbot.com/structs/ struct 结构 结构就是一组字段. */ package main import "fmt" // ...

  4. [Golang] struct Tag说明

    在处理json格式字符串的时候,经常会看到声明struct结构的时候,属性的右侧还有小米点括起来的内容.形如 type User struct { UserId int `json:"use ...

  5. golang struct扩展函数参数命名警告

    今天在使用VSCode编写golang代码时,定义一个struct,扩展几个方法,如下: package storage import ( "fmt" "github.c ...

  6. Golang struct结构

    结构struct Go中的struct与C中的struct非常相似,并且Go没有class,代替了class的位置,但并没有代替class的功能 使用type struct{} 定义结构,名称遵循可见 ...

  7. golang struct tag

    golang可以在struct中的每个字段,写上一个tag.这个tag可以通过反射的机制获取到,最常用的场景就是json序列化和反序列化 package main import ( "enc ...

  8. golang变量声明

    func main() { var a1 int a1 = 1 var a = 1 b := 1 var c, d int c = 1 d = 1 var e, f = 1, 2 g, h := 1, ...

  9. golang struct 定义中json``解析说明

    在代码学习过程中,发现struct定义中可以包含`json:"name"`的声明,所以在网上找了一些资料研究了一下 package main import ( "enco ...

随机推荐

  1. Linux查看某个端口的连接数

    一.查看哪些IP连接本机 netstat -an 二.查看TCP连接数 1)统计80端口连接数 netstat -nat | grep -i "80" | wc -l 2)统计ht ...

  2. Linux shell 信号继承

    shell中,向进程发送信号多多通过ctrl键加上一些功能键来实现,这里是常见的Ctrl组合键及其意义: 组合键 信号类型 意义 Ctrl+C INT信号,即interrupt信号 停止运行当前的作业 ...

  3. SQL Server日志文件过大 大日志文件清理方法 不分离数据库

    SQL Server日志文件过大    大日志文件清理方法 ,网上提供了很多分离数据库——〉删除日志文件-〉附加数据库 的方法,此方法风险太大,过程也比较久,有时候也会出现分离不成功的现象.下面的方式 ...

  4. Rancher 2.0 简单使用 重要部分截取

    学习地址 : https://rancher.com/docs/rancher/v2.x/en/quick-start-guide/ Install Rancher sudo docker run - ...

  5. PHP开发——进制转换

    常用进制 l  10进制:有10个基本数,分别为0.1.2.3.4.5.6.7.8.9,运算规则”逢10进1”: l  8进制:有8个基本数,分别为0.1.2.3.4.5.6.7,运算规则”逢8进1” ...

  6. sql中with as测试实例

    一.使用场景 1.多处使用才有必要2.一方面减少代码数量便于理解维护3.一方面跟代码一样一次计算到处用 二.实例(本处示例仅为测试,实际用join比较好) 1.不使用with as 2.使用with ...

  7. Spring MVC中@JsonView的使用

    一.@JsonView注解的简介 @JsonView是jackson json中的一个注解,Spring webmvc也支持这个注解,它的作用就是控制输入输出后的json 二.@JsonView注解的 ...

  8. P1495 曹冲养猪(拓展欧几里得)

    题目描述 自从曹冲搞定了大象以后,曹操就开始捉摸让儿子干些事业,于是派他到中原养猪场养猪,可是曹冲满不高兴,于是在工作中马马虎虎,有一次曹操想知道母猪的数量,于是曹冲想狠狠耍曹操一把.举个例子,假如有 ...

  9. 《C#从现象到本质》读书笔记(五)第5章字符串第6章垃圾回收第7章异常与异常处理

    <C#从现象到本质>读书笔记(五)第5章字符串 字符串是引用类型,但如果在某方法中,将字符串传入另一方法,在另一方法内部修改,执行完之后,字符串的只并不会改变,而引用类型无论是按值传递还是 ...

  10. python_paramiko

    目录: paramiko模块介绍 paramiko模块安装 paramiko模块使用 一.paramiko模块介绍 paramiko是一个用于做远程控制的模块,使用该模块可以对远程服务器进行命令或文件 ...