定义

go 语言中的struct与c的很相似,此外,go没有Class,也没有继承。

stuct的格式为:type <name> struct{}

package main

import (
"fmt"
) type person struct {
Name string
Age int
} func main() {
p := person{
Name: "Tony",
Age: ,
}
fmt.Println(p)
}
//output
{Tony 23}

Struct是值类型

package main

import (
"fmt"
) type person struct {
Name string
Age int
} func ChangeAge(per person) {
per.Age =
fmt.Printf("Call 'Change Age' function, new age is %d \n", per.Age)
} func main() {
p := person{
Name: "Tony",
Age: ,
}
fmt.Println(p)
ChangeAge(p)
fmt.Println(p)
} //output
{Tony }
Call 'Change Age' function, new age is
{Tony }

我们可以看到,age属性只在func内部被修改,因此可以确定struct是值类型(传递给函数的参数为值的一个copy)

如何传递引用?

我们可以将函数的参数类型定义称为“一个指针”,即可

package main

import (
"fmt"
) type person struct {
Name string
Age int
} func ChangeAge(per *person) {
per.Age =
fmt.Printf("Call 'Change Age' function, new age is %d \n", per.Age)
} func main() {
p := person{
Name: "Tony",
Age: ,
}
fmt.Println(p)
ChangeAge(&p)
fmt.Println(p)
} //output
{Tony }
Call 'Change Age' function, new age is
{Tony }

struct中的匿名字段

go 语言中,支持在struct中省略字段的名称,只保留其类型(匿名字段)

package main

import (
"fmt"
) type person struct {
string
int
} func main() {
p := person{
"Bob",
,
}
fmt.Println(p)
} // output
{Bob }

匿名结构

go语言中,也支持定义匿名结构。

package main

import (
"fmt"
) func main() {
p := struct {
Name string
Age int
Sex string
}{
Name: "Joe",
Age: ,
Sex: "female",
}
fmt.Println(p)
} //output
{Joe female}

使用嵌入字段来“模拟”继承关系

package main

import (
"fmt"
) type person struct {
Sex string
} type teacher struct {
person
Name string
Age int
} func main() {
t := teacher{
person: person{Sex: "feamle"},
Name: "Jill",
Age: ,
}
fmt.Println(t) t.Age =
t.Name = "Criss"
t.person.Sex = "male"
fmt.Println(t)
} //output
{{feamle} Jill }
{{male} Criss }

Go - Struct的更多相关文章

  1. 使用struct处理二进制

    有的时候需要用python处理二进制数据,比如,存取文件.socket操作时.这时候,可以使用python的struct模块来完成. struct模块中最重要的三个函数是pack(), unpack( ...

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

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

  3. go-使用 unsafe 修改 struct 中的 field 的值

    以下是方法,不要纠结原理,等东西积累多了,你才有能力纠结原理: 首先,你需要有一个这样的函数,这是在 nsq 的源码里直接抄过来的: func unsafeValueOf(val reflect.Va ...

  4. C语言中struct位域的定义和使用

    位域的定义和使用 有些信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位.例如在存放一个开关量时,只有0和1 两种状态, 用一位二进位即可.为了节省存储空间,并使处理简便,C语言又 ...

  5. C# Struct结构体里数组长度的指定

    typedef struct Point{ unsigned short x; unsigned short y; }mPoint;//点坐标 typedef struct Line{ mPoint ...

  6. C 语言Struct 实现运行类型识别 RTTI

    通过RTTI,能够通过基类的指针或引用来检索其所指对象的实际类型.c++通过下面两个操作符提供RTTI. (1)typeid:返回指针或引用所指对象的实际类型.    (2)dynamic_cast: ...

  7. VC++ : error LNK2001: unresolved external symbol "__declspec(dllimport) public: __thiscall std::basic_string<wchar_t,struct std::char_traits<wchar_t>

    最近学习Google Breakpad,将其用在了自己的项目中,编译的版本为VS2010,没有什么问题.但是为了和之前的程序兼容,需要使用VS2008版本的程序,于是又编译了VS2008版本的代码,但 ...

  8. 字节流与数据类型的相互转换---使用struct模块

    字节流与数据类型的相互转换---使用struct模块 http://blog.csdn.net/Sunboy_2050/article/details/5974029 Python是一门非常简洁的语言 ...

  9. 窥探Swift之别具一格的Struct和Class

    说到结构体和类,还是那句话,只要是接触过编程的小伙伴们对这两者并不陌生.但在Swift中的Struct和Class也有着令人眼前一亮的特性.Struct的功能变得更为强大,Class变的更为灵活.St ...

  10. struct 大小计算

    结构体是一种复合数据类型,通常编译器会自动的进行其成员变量的对齐,已提高数据存取的效率.在默认情况下,编译器为结构体的成员按照自然对齐(natural alignment)条方式分配存储空间,各个成员 ...

随机推荐

  1. vagrant up 失败解决办法

    前几天在自己电脑搭建vagrant环境报错:"There was an error while executing `VBoxManage`, a CLI used by Vagrant f ...

  2. 手机自动化测试:appium源码分析之bootstrap十一

    手机自动化测试:appium源码分析之bootstrap十一   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣 ...

  3. 移动开发必须要弄明白的问题】详解Eclipse转Android Studio

    2015-12-09 13:01:244264浏览3评论 AS出来一年多了,最近才从Eclipse转到AS,但我并不觉得使用Eclipse有多落后,它们都只是一个工具而已,哪个顺手就用哪个,用得好都能 ...

  4. 4.Maven仓库

    1. 何为Maven仓库 Maven仓库就是统一存放所有依赖的地方,其他所有项目都可以在仓库里通过坐标找到所需要的依赖. 2. 仓库的布局 任何一个构件都有其唯一的坐标,根据这个坐标可以定义其在仓库中 ...

  5. !function 笔记

    一般看JQuery插件里的写法是这样的 (function($) { //... })(jQuery); 今天看到bootstrap的javascript组件是这样写的 !function( $ ){ ...

  6. HNOI2017前被虐记及感悟

    本文所记录的时间以HNOI2017第一天考试时间为DAY1,前一天为DAY0,以此类推. 本文记载了博主从HNOI2017开始前一周进行全真模拟考试的被虐过程和结果.文章内可能包含博主的不良情绪,如果 ...

  7. Java面试题04-final关键字详解

    Java面试题04-final关键字详解 本篇博客将会讨论java中final关键字的含义,以及final用在什么地方,感觉看书总会有一些模糊,而且解释的不是很清楚,在此做个总结,以备准备面试的时候查 ...

  8. windows下nginx的安装及使用方法入门

    nginx功能之一可以启动一个本地服务器,通过配置server_name和root目录等来访问目标文件 一. 下载 http://nginx.org/   下载后解压   二. 修改配置文件 ngin ...

  9. 5 安装Alloc服务

    cnblogs-DOC 1.服务器环境 2.安装Redis3.安装Zookeeper4.安装MPush5.安装Alloc服务6.完整测试7.常见问题 一.Linux安装Mpush-Alloc [roo ...

  10. glup/grunt,browserify / webpack等的比较

    gulp/grunt的比较: Gulp / Grunt 是一种工具,能够优化前端工作流程.比如自动刷新页面.combo.压缩css.js.编译less等等.简单来说,就是使用Gulp/Grunt,然后 ...