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. Java 运行时常量池

    运行时常量池是方法区的一部分.class中除了有类的版本,字段,方法,接口等描述信息外,还有一项信息是常量池,用于存放编译期生成的各种字面量和符号引用,这部分内容将在类加载后存放在方法区的运行时常量池 ...

  2. 你不知道的JavaScript中,读书笔记

    七种内置类型 null, undefined, boolean, number, string, object, symbol typeof null === 'object' // true nul ...

  3. groupby一个as_index参数解释

  4. Django实现微信消息推送

    一 所需准备条件 微信公众号的分类 微信消息推送 公众号 已认证公众号 服务号 已认证服务号 企业号 基于:微信认证服务号 主动推送微信消息.前提:关注服务号环境:沙箱环境 沙箱环境地址: https ...

  5. flask 未完待续

    Flask - 一个短小精悍.可扩展的一个Web框架很多可用的第三方组件:http://flask.pocoo.org/extensions/blogs:https://www.cnblogs.com ...

  6. c#mysql批量更新的两种方法

    总体而言update 更新上传速度还是慢. 1:  简单的insert  速度稍稍比MySqlDataAdapter慢一点 配合dapper 配置文件 <?xml version="1 ...

  7. mysql 在update中实现子查询的方式

    当使用mysql条件更新时--最先让人想到的写法 UPDATE buyer SET is_seller=1 WHERE uid IN (SELECT uid FROM seller) 此语句是错误的, ...

  8. java框架学习_mybaties

    Mybatis第一天   框架课程 1. 课程计划 第一天: 1.Mybatis的介绍 2.Mybatis的入门 a) 使用jdbc操作数据库存在的问题 b) Mybatis的架构 c) Mybati ...

  9. Linux下nautilus的右键快捷菜单项设置

    某一天我的Linux更新完后, 我照常在文件夹下点击右键想打开终端, 却发现右键快捷菜单没有Open in terminal的菜单项了. 在网上查找了一下, 结合自己系统的情况发现了解决办法. 由于我 ...

  10. Number of subarrays having sum exactly equal to k(explanation for 437. Path Sum III of leetcode)

    https://www.geeksforgeeks.org/number-subarrays-sum-exactly-equal-k/ 讲解的详细 看这道题是为了解决https://leetcode. ...