分享
Go基础(复杂类型):结构体
wd2014610 · · 1912 次点击 · · 开始浏览这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wd2014610/article/details/80403044
结构体
一个结构体(struct)就是一个字段的集合。
(而 type 的含义跟其字面意思相符。)
下面来写一个简单的例子:
package main
import "fmt"
/**
* 一个结构体就是一个字段的集合
*/
type Vertex struct {
X int
Y float64
}
func main() {
fmt.Println(Vertex{1,2.31231})
}
输出结果:
{1 2.31231}
一、结构体字段
结构体字段使用点号来访问。
package main
import "fmt"
type Vertex2 struct {
X int
Y int
}
func main() {
//在这里给结构体赋值,x=6,y=3
v := Vertex2{6, 3}
//这边输出的结果是6,3
fmt.Println(v.X, v.Y)
//这边从新给结构体中的X赋值,X=7
v.X = 7
//输出X=7
fmt.Println(v.X)
}
二、结构体指针
结构体字段可以通过结构体指针来访问。
如果我们有一个指向结构体的指针 p,那么可以通过 (*p).X 来访问其字段 X。不过这么写太啰嗦了,所以语言也允许我们使用隐式间接引用,直接写 p.X 就可以。
package main
import "fmt"
type Vertex3 struct {
X int
Y int
}
func main() {
//给结构体赋值,X=1,Y=3
v := Vertex3{1, 3}
//这个是输出实际的结构体的值,所以{1 3}
fmt.Println(v)
//将结构体给p做引用,p是一个指向结构体的指针
p := &v
//输出结果有引用的结果,有一个&,&{1 3}
fmt.Println(p)
//给结构体中的X赋值为1e9,这个表示1后面跟着9个0
p.X = 1e9
//输出结果{1000000000 3}
fmt.Println(v)
}
输出结果:
{1 3}
&{1 3}
{1000000000 3}
三、结构体文法
结构体文法通过直接列出字段的值来新分配一个结构体。
使用 Name: 语法可以仅列出部分字段。(字段名的顺序无关。)
特殊的前缀 & 返回一个指向结构体的指针。
package main
import "fmt"
//定义一个结构体
type Vertex4 struct {
//在结构体中定义两个变量
X, Y int
}
var (
//给X、Y都赋值
v1 = Vertex4{1, 2} // has type Vertex
//给X赋值为1,Y未赋值,默认为0
v2 = Vertex4{X: 1} // Y:0 is implicit
//X、Y都不赋值,默认都为0
v3 = Vertex4{} // X:0 and Y:0
//指针的方式去赋值
p = &Vertex4{1, 2} // has type *Vertex
)
func main() {
fmt.Println(v1, v2, v3, p)
}
好了,这一次的结构体文法就是这样子了。
有疑问加站长微信联系(非本文作者)
入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889
关注微信1912 次点击
添加一条新回复
(您需要 后才能回复 没有账号 ?)
- 请尽量让自己的回复能够对别人有帮助
- 支持 Markdown 格式, **粗体**、~~删除线~~、
`单行代码` - 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
- 图片支持拖拽、截图粘贴等方式上传
收入到我管理的专栏 新建专栏
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wd2014610/article/details/80403044
结构体
一个结构体(struct)就是一个字段的集合。
(而 type 的含义跟其字面意思相符。)
下面来写一个简单的例子:
package main
import "fmt"
/**
* 一个结构体就是一个字段的集合
*/
type Vertex struct {
X int
Y float64
}
func main() {
fmt.Println(Vertex{1,2.31231})
}
输出结果:
{1 2.31231}
一、结构体字段
结构体字段使用点号来访问。
package main
import "fmt"
type Vertex2 struct {
X int
Y int
}
func main() {
//在这里给结构体赋值,x=6,y=3
v := Vertex2{6, 3}
//这边输出的结果是6,3
fmt.Println(v.X, v.Y)
//这边从新给结构体中的X赋值,X=7
v.X = 7
//输出X=7
fmt.Println(v.X)
}
二、结构体指针
结构体字段可以通过结构体指针来访问。
如果我们有一个指向结构体的指针 p,那么可以通过 (*p).X 来访问其字段 X。不过这么写太啰嗦了,所以语言也允许我们使用隐式间接引用,直接写 p.X 就可以。
package main
import "fmt"
type Vertex3 struct {
X int
Y int
}
func main() {
//给结构体赋值,X=1,Y=3
v := Vertex3{1, 3}
//这个是输出实际的结构体的值,所以{1 3}
fmt.Println(v)
//将结构体给p做引用,p是一个指向结构体的指针
p := &v
//输出结果有引用的结果,有一个&,&{1 3}
fmt.Println(p)
//给结构体中的X赋值为1e9,这个表示1后面跟着9个0
p.X = 1e9
//输出结果{1000000000 3}
fmt.Println(v)
}
输出结果:
{1 3}
&{1 3}
{1000000000 3}
三、结构体文法
结构体文法通过直接列出字段的值来新分配一个结构体。
使用 Name: 语法可以仅列出部分字段。(字段名的顺序无关。)
特殊的前缀 & 返回一个指向结构体的指针。
package main
import "fmt"
//定义一个结构体
type Vertex4 struct {
//在结构体中定义两个变量
X, Y int
}
var (
//给X、Y都赋值
v1 = Vertex4{1, 2} // has type Vertex
//给X赋值为1,Y未赋值,默认为0
v2 = Vertex4{X: 1} // Y:0 is implicit
//X、Y都不赋值,默认都为0
v3 = Vertex4{} // X:0 and Y:0
//指针的方式去赋值
p = &Vertex4{1, 2} // has type *Vertex
)
func main() {
fmt.Println(v1, v2, v3, p)
}
好了,这一次的结构体文法就是这样子了。