当前位置: 首页 > 编程日记 > 正文

GO语言编程基础-复合类型结构体

链客,专为开发者而生,有问必答!

此文章来自区块链技术社区,未经允许拒绝转载。

在这里插入图片描述
1 结构体类型

有时我们需要将不同类型的数据组合成一个有机的整体,如:一个学生有学号/姓名/性别/年龄/地址等属性。显然单独定义以上变量比较繁琐,数据不便于管理。

结构体是一种聚合的数据类型,它是由一系列具有相同类型或不同类型的数据构成的数据集合。每个数据称为结构体的成员。

2 结构体初始化

2.1 普通变量

type Student struct {

id   intname stringsex  byteage  intaddr string

}

func main() {

//1、顺序初始化,必须每个成员都初始化var s1 Student = Student{1, "mike", 'm', 18, "sz"}s2 := Student{2, "yoyo", 'f', 20, "sz"}//s3 := Student{2, "tom", 'm', 20} //err, too few values in struct initializer//2、指定初始化某个成员,没有初始化的成员为零值s4 := Student{id: 2, name: "lily"}

}

2.2 指针变量

type Student struct {

id   intname stringsex  byteage  intaddr string

}

func main() {

var s5 *Student = &Student{3, "xiaoming", 'm', 16, "bj"}s6 := &Student{4, "rocco", 'm', 3, "sh"}

}

3 结构体成员的使用

3.1 普通变量

//===============结构体变量为普通变量

//1、打印成员var s1 Student = Student{1, "mike", 'm', 18, "sz"}//结果:id = 1, name = mike, sex = m, age = 18, addr = szfmt.Printf("id = %d, name = %s, sex = %c, age = %d, addr = %s\n", s1.id, s1.name, s1.sex, s1.age, s1.addr)//2、成员变量赋值var s2 Students2.id = 2s2.name = "yoyo"s2.sex = 'f's2.age = 16s2.addr = "guangzhou"fmt.Println(s2) //{2 yoyo 102 16 guangzhou}

3.2 指针变量

//===============结构体变量为指针变量

//3、先分配空间,再赋值s3 := new(Student)s3.id = 3s3.name = "xxx"fmt.Println(s3) //&{3 xxx 0 0 }//4、普通变量和指针变量类型打印var s4 Student = Student{4, "yyy", 'm', 18, "sz"}fmt.Printf("s4 = %v, &s4 = %v\n", s4, &s4) //s4 = {4 yyy 109 18 sz}, &s4 = &{4 yyy 109 18 sz}var p *Student = &s4//p.成员 和(*p).成员 操作是等价的p.id = 5(*p).name = "zzz"fmt.Println(p, *p, s4) //&{5 zzz 109 18 sz} {5 zzz 109 18 sz} {5 zzz 109 18 sz}

4 结构体比较

如果结构体的全部成员都是可以比较的,那么结构体也是可以比较的,那样的话两个结构体将可以使用== 或 != 运算符进行比较,但不支持 > 或 < 。

func main() {

s1 := Student{1, "mike", 'm', 18, "sz"}s2 := Student{1, "mike", 'm', 18, "sz"}fmt.Println("s1 == s2", s1 == s2) //s1 == s2 truefmt.Println("s1 != s2", s1 != s2) //s1 != s2 false

}

5 结构体作为函数参数

5.1 值传递

func printStudentValue(tmp Student) {

tmp.id = 250//printStudentValue tmp =  {250 mike 109 18 sz}fmt.Println("printStudentValue tmp = ", tmp)

}

func main() {var s Student = Student{1, “mike”, ‘m’, 18, “sz”}

printStudentValue(s)        //值传递,形参的修改不会影响到实参fmt.Println("main s = ", s) //main s =  {1 mike 109 18 sz}

}

5.2 引用传递

func printStudentPointer(p *Student) {

p.id = 250//printStudentPointer p =  &{250 mike 109 18 sz}fmt.Println("printStudentPointer p = ", p)

}

func main() {

var s Student = Student{1, "mike", 'm', 18, "sz"}printStudentPointer(&s)     //引用(地址)传递,形参的修改会影响到实参fmt.Println("main s = ", s) //main s =  {250 mike 109 18 sz}

}

6 可见性

Go语言对关键字的增加非常吝啬,其中没有private、 protected、 public这样的关键字。

要使某个符号对其他包(package)可见(即可以访问),需要将该符号定义为以大写字母开头。

目录结构:

test.go示例代码如下:

//test.gopackage test

//student01只能在本文件件引用,因为首字母小写type student01 struct {

Id   intName string

}

//Student02可以在任意文件引用,因为首字母大写type Student02 struct {

Id   intname string

}

main.go示例代码如下:

// main.gopackage main

import (

"fmt""test" //导入test包

)

func main() {

//s1 := test.student01{1, "mike"} //err, cannot refer to unexported name test.student01//err, implicit assignment of unexported field 'name' in test.Student02 literal//s2 := test.Student02{2, "yoyo"}//fmt.Println(s2)var s3 test.Student02 //声明变量s3.Id = 1             //ok//s3.name = "mike"  //err, s3.name undefined (cannot refer to unexported field or method name)fmt.Println(s3)

}

相关文章:

【BZOJ1015】【JSOI2008】星球大战 并查集

题目大意 给你一张\(n\)个点\(m\)条边的无向图&#xff0c;有\(q\)次操作&#xff0c;每次删掉一个点以及和这个点相邻的边&#xff0c;求最开始和每次删完点后的连通块个数。 \(q\leq n\leq 400000,m\leq 200000\) 题解 我们可以用并查集维护连通块个数&#xff0c;可惜并查集…

python基于Django框架编译报错“django.core.exceptions.ImproperlyConfigured”的解决办法?...

下面是我具体遇到的问题和解决方法&#xff1a; 错误详细信息&#xff1a; django.core.exceptions.ImproperlyConfigured: Requested setting DEFAULT_INDEX_TABLESPACE, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_…

iOS 异形tabBar, 中间item凸起

今年的新项目中做了tabbar的相关处理, 在此记录一下 自己做了一demo, 效果如图所示 demo地址如下: https://github.com/wyon1314/TabBarDemo

以太坊系统账户

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 在以太坊系统中&#xff0c;状态是由被称为“账户”&#xff08;每个账户由一个20字节的地址&#xff09;的对象和在两个账户之间转移价值和信息的状…

Django-缓存的配置

缓存的介绍 在动态网站中,用户所有的请求,服务器都会去数据库中进行相应的增,删,查,改,渲染模板,执行业务逻辑,最后生成用户看到的页面.当一个网站的用户访问量很大的时候,每一次的的后台操作,都会消耗很多的服务端资源,所以必须使用缓存来减轻后端服务器的压力.缓存是将一些常…

swift中单例的创建及销毁

最近项目重构时使用了oc和swift的混编&#xff0c;遇到了关于单例的创建及销毁&#xff0c;这里记录一下 //创建单例private static var _sharedInstance: ViewController?objc class func sharedInstance() -> ViewController {guard let instance _sharedInstance else …

区块链技术名词简介

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 零知识证明 零知识证明指证明者能在不向验证者提供任何有用的信息下&#xff0c;使验证者相信某个论断是正确的。零知识证明实质是一种涉及两方或更…

Linux篇---ftp服务器的搭建

一、前述 企业中linux搭建ftp服务器还是很实用的&#xff0c;所以本文针对centoos7和centoos6搭建服务器教程做个总结。 二、具体 1、显示如下图则表示已安装 vsftp软件。如果未显示则需要安装vsftpd软件。 如果没有则通过yarm源进行安装 yum install -y vsftpd 2、安装完成之后…

Python 的property的实现 .

描述符.就是 将某种特殊类型①的类的实例指派给另一个类的属性 ①只要实现一下三种方法的其中一个就是特殊类型. __get__(self,instance,owner) -用于访问属性,他返回属性的值. __set__(self,instance,value) -将在属性分配操作时使用,不返回任何内容. __delete__(self,instanc…

Swift中NSRange和Range的转换

最近项目再使用swift重构&#xff0c;遇到Range和NSRange转换的问题&#xff0c;这里记录下&#xff1a; 因为要使用NSRange&#xff0c;所以有了下面这段代码&#xff0c;将String转换为NSString后调用 range(of searchString: String) -> NSRange 这种处理方法其实就是使…

C++基础技术简介

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 容器 容器用于存储数据元素&#xff0c;是由长度可变的同类型的元素构建成的序列。 Vector&#xff1a;用于快速定位任意元素及主要在元素序列的尾…

eclipse快捷键操作

【Ct rlT】 搜索当前接口的实现类 1. 【ALT /】 此快捷键为用户编辑的好帮手&#xff0c;能为用户提供内容的辅助&#xff0c;不要为记不全方法和属性名称犯愁&#xff0c;当记不全类、方法和属性的名字时&#xff0c;多体验一下【ALT /】快捷键带来的好处吧。 2. 【Ct rlO】…

vue 项目配置sass

1.运行npm install node-sass --save-dev npm install sass-loader --save-dev 2.打开build文件夹下面的webpack.base.config.js module: {rules: [...(config.dev.useEslint ? [createLintingRule()] : []),{test: /\.scss$/,loaders: ["style", "css", …

获取App Store中App的ipa包

俗话说好记性不如烂笔头&#xff0c;每次需要看别的App中某些功能的实现方案时总去查资料太麻烦&#xff0c;所以这里记录下如何获取App Store中App的ipa包 主要使用的工具为Apple Configurator 2这款软件&#xff1a; 具体操作流程如下&#xff1a; 1.首先在iPhone设备上安装…

区块链中的技术

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 应用技术 算法加密1 比特币采用椭圆曲线加密算法&#xff08;ECC&#xff09;来产生公钥和私钥对&#xff0c;钱包地址即是公钥&#xff0c;私钥由…

h.264 FMO

在H.264之前的标准中&#xff0c;比如H.263&#xff0c;其比特流中的数据是按照一个宏块接一个宏块的方式排列的&#xff0c;一旦发生丢包&#xff0c;很多相邻宏块信息都会丢失&#xff0c;很难进行错误隐藏处理。在H.264中加入了一项新特性&#xff1a;把宏块在比特流中的数据…

lvs+keepalived+nginx+tomcat

# 拓扑如下所示 # 节点分布情况 LVS-dr-master eth0: 192.168.146.141 LVS-dr-slave eth0: 192.168.146.142 nginx1: eth0: 192.168.146.139 nginx2: eth0: 192.168.146.140 tomcat1: eth0: 192.168.146.138 启用了4个tomcat VIP: 192.168.146.200 # 具体配置 ### lvs master #…

iOS 关于pods-frameworks.sh:permission denied报错的解决

最近公司新开项目&#xff0c;搭建完框架后小伙伴拉取代码后build一直报错&#xff1a;pods-frameworks.sh:permission denied 查了很多博文后找到了如下解决方案&#xff0c;在此记录。 打开终端输入如下命令行回车即可&#xff1a; chmod ax "/Users/xxx/Pods/Pods-re…

区块链分布式账本

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 账本是具有一定格式和许多账页组成的&#xff0c;以会计凭证为基础&#xff0c;对经济业务进行序时分类记录&#xff0c;也就是所说的账册。 账本在…

jmeter实现多并发

1.jmeter实现多并发 线程组:负载发生器,用以多线程或多进程的方式来模拟用户的使用行为.jmeter是以线程的方式来进行模拟用户的并发访问的 转载于:https://www.cnblogs.com/xuzhongtao/p/8526502.html

循环语句——7月23日

循环语句&#xff1a;for 格式&#xff1a; for (int i 1/*初始条件*/; i < 100/* 循环条件*/; i /*状态改变*/) { //循环体&#xff0c;执行代码&#xff1b;(break;跳出循环体) } 给出初始条件&#xff0c;先判断是否满足循环条件&#xff0c;如果不满足条件则跳过for语句…

CocoaPods私有库搭建的记录

前言 随着项目的业务增加以及马甲包进度的跟进&#xff0c;一些重复的独立业务以私有库的方式引入到项目中对于项目进度的开发就显得越发的迫切了&#xff0c;本文主要记录自己搭建私有库时的整个流程&#xff0c;以防后面再次搭建时忘记&#xff0c;方便自己查阅。 整个记录…

区块链笔记-Hash算法

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 区块链笔记-Hash算法 区块链技术是一系列技术的结合&#xff0c;建立新的技术架构&#xff0c;hash算法是很重要的一块&#xff0c;如果理解不当的…

Thrift源码解析--TBinaryProtocol

本文为原创:http://www.cnblogs.com/leehfly/p/4958206.html&#xff0c;未经许可禁止转载。 关于Tprotocol层都是一些通信协议&#xff0c;个人感觉内容较大&#xff0c;很难分类描述清楚。故打算以TBinaryProtocol为例&#xff0c;分析客户端发请求以及接收服务端返回数据的整…

一篇价值百万的文章:我为什么在22岁辞去年薪150万的工作?

本文转载自http://www.cricode.com/4208.html 作者&#xff1a;奶牛Denny 今天是22岁的最后一天。几个月前&#xff0c;我从沃顿商学院毕业&#xff0c;用文凭上“最高荣誉毕业”的标签安抚了已经年过半百的老妈&#xff0c;然后转头辞去了毕业后的第一份工作&#xff0c;跟一…

电脑温度检测软件哪个好_一般电脑录音软件哪个好?

随着科技的快速发展&#xff0c;为了满足各行各业的音频录制需求&#xff0c;电脑版录音软件也在陆续不断的出现在各大应用市场&#xff0c;与传统的自带音频录制工具相比&#xff0c;电脑版录音软件更加专注的是电脑上的音频录制&#xff0c;它能够将发生在电脑上的一切声音源…

区块链的隐私性

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 我最近看区块链简单介绍的时候会发现有的人就说其有良好的隐私性&#xff0c;但也有人说保护隐私性上有缺陷&#xff0c;今天就简单的对区块链的隐私…

ssh免密连接远程服务器

ssh免密连接远程服务器 借助ssky-keygen和ssh-copy-id工具&#xff0c;通过4个简单的步骤实现无需输入密码登录远程Linux主机 1 生成密钥 通过内置的工具生成RSA算法加密的密钥 ssh-keygen -t rsa 回车默认选项即可&#xff0c;会在当前用户的home文件下生成密钥文件 2 拷贝密钥…

什么是互联网大厂_仅限今天!大厂最热数据分析经典实战项目大公开!

原标题&#xff1a;仅限今天&#xff01;大厂最热数据分析经典实战项目大公开&#xff01;如今&#xff0c;全球早已步入数据时代&#xff0c;随着行业的高速发展&#xff0c;相关岗位缺口已超150万&#xff0c;且薪资超同行业50%。未来十年&#xff0c;数据细分岗位将扩张5倍&…

php教学视频

http://www.52pojie.cn/forum.php?modviewthread&tid283589转载于:https://www.cnblogs.com/dawanxiaobao/p/5703157.html