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. Spring MVC 自动为对象注入枚举类型

    原文地址:http://1358440610-qq-com.iteye.com/blog/2079048 如果一个对象里面有枚举类型的话,则Spring MVC是不能够直接进行注入的,因为它只实现了一 ...

  2. php利用simple_html_dom类,获取页面内容,充当爬虫角色

    PHP脚本扮演爬虫的角色,可能大家第一时间想到可能会是会正则,个人对正则的规则老是记不住,表示比较难下手,今天工作中有个需求需要爬取某个网站上的一些门店信息 无意间在网上看到一个比较好的类库叫:sim ...

  3. 连续子数组最大和(python)

    题目描述 HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学.今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决.但是,如果向量 ...

  4. CentOS7 firewalld防火墙配置

    [root@ecs ~]# firewall-cmd --version       //查看版本0.3.9 [root@ecs ~]# firewall-cmd --state        //查 ...

  5. 手动添加jar包到本地maven仓库

    我们都知道使用maven管理jar包的时候,我们需要到远程仓库下载相关的jar包到本地仓库,但是如果远程仓库没有这个jar包呢?这时候我们就需要手动将jar包添加到本地仓库. 起因是我想用百度的富文本 ...

  6. iview表格高度自适应只需要三步即可

    1. 需要增加到table表格里的 highlight-row :height="tableHeight" ref="table" 2.在return 定义一个 ...

  7. Thinkphp5 表单提交额外参数和页面跳转参数传递url

    1. 表单提交 <input type="hidden" name="project_name" value="$project_name&qu ...

  8. angular模拟web API

    现象:angular Cannot find module 'angular-in-memory-web-api'报错找不动“angular-in-memory-web-api”模块 解决:1.控制台 ...

  9. [Machine Learning][The Analytics Edge][Predicting Earnings from Census Data]

    census = read.csv("census.csv")library(caTools)set.seed(2000)spl = sample.split(census$ove ...

  10. C#中读写INI文件

    C#中读写INI文件 c#的类没有直接提供对ini文件的操作支持,可以自己包装win api的WritePrivateProfileString和GetPrivateProfileString函数实现 ...