Golang Struct 声明和使用
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 实例化的方法
- 点运算符
可以使用点运算符访问结构体中的数据值
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)
}
- 使用
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)
}
- 使用
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)
}
- 使用
&运算符
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 练习
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"}
- 内嵌的
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}
- 为
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 声明和使用的更多相关文章
- 【GoLang】GoLang struct 使用
代码示例: package main import "fmt" type Human struct { name string age int weight int } type ...
- golang struct的使用
Go struct tag深入理解 喜欢本站的朋友可以收藏本站,或者加入QQ群:172816590,我们大家一起来交流技术! 欢迎来到梁钟霖个人博客网站.本个人博客网站提供最新的站长新闻,各种互联网资 ...
- golang struct
ex1 /* https://golangbot.com/structs/ struct 结构 结构就是一组字段. */ package main import "fmt" // ...
- [Golang] struct Tag说明
在处理json格式字符串的时候,经常会看到声明struct结构的时候,属性的右侧还有小米点括起来的内容.形如 type User struct { UserId int `json:"use ...
- golang struct扩展函数参数命名警告
今天在使用VSCode编写golang代码时,定义一个struct,扩展几个方法,如下: package storage import ( "fmt" "github.c ...
- Golang struct结构
结构struct Go中的struct与C中的struct非常相似,并且Go没有class,代替了class的位置,但并没有代替class的功能 使用type struct{} 定义结构,名称遵循可见 ...
- golang struct tag
golang可以在struct中的每个字段,写上一个tag.这个tag可以通过反射的机制获取到,最常用的场景就是json序列化和反序列化 package main import ( "enc ...
- 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, ...
- golang struct 定义中json``解析说明
在代码学习过程中,发现struct定义中可以包含`json:"name"`的声明,所以在网上找了一些资料研究了一下 package main import ( "enco ...
随机推荐
- 对话框改变颜色 宽度沾满屏幕 Dialog
首先在style.xml中定义一个对话框样式,这里可以修改颜色: //对话框沾满整个屏幕的宽度 <style name="DialogShareTheme" parent=& ...
- python中的元组
在python中,元组是不可变类型 可通过以下案例说明: >>> c1 = ['1','2'] >>> c = (1,2,c1) >>> c (1 ...
- FortiGate外网IPSec链路及运维专线链路到个别网段不通
1.现状: 如图,用户网段有192.168.50.0/24.192.168.51.0/24和192.168.52.0/24.192.168.53.0/24.在防火墙上有静态路由到运维专线的10.160 ...
- [leetcode]256. Paint House粉刷房子(三色可选)
There are a row of n houses, each house can be painted with one of the three colors: red, blue or gr ...
- Go学习笔记:Win7+LiteIDE+Go+Beego 环境搭建
安装过程比较简单 1.安装go语言环境: 2.安装git: 3.git bash 安装beego,输入“go get github.com/astaxie/beego”,等待一会儿,在D盘的 ...
- 解决find命令报错: paths must precede expression(转)
原文地址:https://www.cnblogs.com/peter1994/p/7297656.html 在一天早上,想在服务器 /tmp 目录清除一些pdf文件,大概一万多个文件,在执行命令的时候 ...
- 贝叶斯---最大似然估计(高翔slam---第六讲 )
1.贝叶斯---最大似然估计 回顾一下第二讲的经典SLAM模型: 通过传感器(例如IMU)的运动参数u来估计运动(位姿x)[定位],通过相机的照片的观测参数z来估计物体的位置(地图y)[建图],都是有 ...
- 带标签的循环语句、switch
今天继续更新,控制流程的剩余部分内容,带标签的循环语句中的continue/break 的使用方法,以及switch关键字的使用方法.例1:带标签的continue/break.package com ...
- cmd输入appium-doctor,运行时提示'node'不是内部或外部的命令
一.提示'node'不是内部或外部命令,先按照下面步骤操作: 1.设置APPIUM_HOME系统变量,值为当前appium安装目录,例如:D:\software_install\Appium 2.设置 ...
- CentOS 6.x下wget 下载提示 Unable to locally verify the issuer’s authority 完美解决方案
CentOS 6.x下wget 下载提示 Unable to locally verify the issuer’s authority 完美解决方案 栏目:Linux 作者:小天 点击: 1,453 ...