Go语言结构体Go range的学习教程
作者:梦想橡皮擦 发布时间:2024-05-05 09:33:49
在前一篇博客我们学习了 Go 数组,其要求所有元素为同一数据类型,如果希望存储不同类型的数据,就要用到结构体相关知识。
结构体的定义:存储相同或不同类型的数据集合。
有 C 相关经验,结构体还是比较容易理解的,语法格式如下所示:
type struct_variable_type struct {
member definition
member definition
...
member definition
}
上述语法格式的关键字是 struct
和 type
,struct_variable_type
是结构体名称,例如我们声明一个【人】的结构体,有姓名,有年龄,有性别。
package main
import "fmt"
// 声明结构体
type People struct {
name string
age int
sex int
}
func main() {
//使用结构体
people := People{
"橡皮擦",
18,
0}
fmt.Println(people)
}
在编写的时候要注意语法格式,其中结构体的使用代码建议放在一行,或者右大括号紧跟最后一个元素。
使用结构体也可以携带元素名,即下述写法。
//使用结构体
people := People{name: "橡皮擦", age: 18, sex: 0}
fmt.Println(people)
访问结构体成员 使用 结构体.成员名
即可,当然也可以用该办法进行赋值。
//使用结构体
var people1 People
// var people2 People
people1.name = "橡皮擦"
people1.age = 18
people1.sex = 1
fmt.Println(people1)
Go Range
作为一个 Python 程序员,关键字 range 是非常熟悉的,在 Go 中 range 关键字可以用于 for 循环,用于数组它返回元素的索引和值,在后续学习的集合中返回键值对。
range 用于数组的语法格式如下所示:
for i,value := range a_array{
// TODO
}
结合语法格式,编写下述代码:
package main
import "fmt"
var a_array = []int{1, 2, 3, 4, 5, 6, 7, 8}
func main() {
for i, value := range a_array {
fmt.Printf("索引:%d,值:%d\n", i, value)
}
}
运行代码输出如下信息:
索引:0,值:1
索引:1,值:2
索引:2,值:3
索引:3,值:4
索引:4,值:5
索引:5,值:6
索引:6,值:7
索引:7,值:8
如果将 range 作用于字符串,可以对其每个字符进行迭代输出。
package main
import (
"fmt"
)
func main() {
var str string = "xiangpica"
for k, v := range str {
fmt.Println(k, string(v))
}
}
上述 str
中的内容为纯英文,k
值每次+1。
0 x
1 i
2 a
3 n
4 g
5 p
6 i
7 c
8 a
如果 str
中包含中文,k
值每次 +3,代码如下:
func main() {
var str string = "橡皮擦"
for k, v := range str {
fmt.Println(k, string(v))
}
}
输出结果如下:
0 橡
3 皮
6 擦
如果是中英文混拼,出现的结果会更加有趣。
0 x
1 i
2 a
3 n
4 g
5 橡
8 p
9 i
10 皮
13 c
14 a
15 擦
这里其实可以得到一个结论,range
迭代是的 Unicode,而不是字节,返回值是 UTF-8 编码第 1 个字节的索引,所以索引值有可能并不连续。
在编写代码的时候,如果不需要索引,只保留元素,可以使用废弃占位符,代码如下:
var str string = "xiang橡pi皮ca擦"
for _, v := range str {
fmt.Println(string(v))
}
range 相关知识等学到切片和集合的时候,应该还会涉及到,这里参考其它语言的经验,我们下篇再见。
来源:https://juejin.cn/post/7124900260186423333
猜你喜欢
- Stochastic Depth论文:Deep Networks with Stochastic Depth本文的正则化针对于ResNet中
- 我就废话不多说了,直接上代码吧!import tensorflow as tf w1 = tf.Variable([[1,2]]) w2 =
- <html> <head> <meta http-equiv="Content-Langu
- WebService客户端接口调用及身份验证问题最近由于业务需求,需要实现python Webservice的服务以及接口调用。服务端代码可
- 在编写JavaScript程序时往往需要检测某一变量是否存在,这是一件非常简单的工作,但如果不细心也会遇到一些问题。主要有一些几点: 1、普
- 简介:Mysql数据库按时间点恢复实战对于任何一家企业来讲,数据都是最宝贵的财富。如何保护数据完整性,数据不受损坏,在发生故障时,如何保住数
- 今天很有可能你已经做了一些使用滑动窗口(也称为移动窗口)的事情,而你甚至不知道它。例如:许多编辑算法都是基于移动窗口的。在GIS中做地形分析
- 一、概述一个gRPC服务的大体结构图为:图一表明,grpc的服务是跨语言的,但需要遵循相同的协议(proto)。相比于REST服务,gPRC
- __author__ = 'clownfish'#coding:utf-8import urllib2,urllib,coo
- 本文为大家分享了python实现外卖信息管理系统的具体代码,供大家参考,具体内容如下一、需求分析 需求分析包含如下:1、问题描述 以外卖信息
- 1 简介在日常运行程序的过程中常常涉及到循环迭代过程,对于执行时间很短的程序来说倒无所谓,但对于运行过程有明显耗时的涉及循环迭代的程序,为其
- python下redis安装用python操作redis数据库,先下载redis-py模块下载地址https://github.com/an
- 本文实例讲述了Python实现二维有序数组查找的方法。分享给大家供大家参考,具体如下:题目:在一个二维数组中,每一行都按照从左到右递增的顺序
- 一、单因素分析线性拟合功能:线性拟合,单因素分析,对散点图进行线性拟合,并放大散点图的局部位置输入:某个xlsx文件,包含'患者密度
- SQL是用于访问ORACLE数据库的语言,PL/SQL扩展和加强了SQL的功能,它 同时引入了更强的程序逻辑。 PL/SQL支持DML命令和
- 基本开发环境· Python 3.6· Pycharm需要导入的库目标网页分析网站是静态网站,没有加密,可以直接爬取整体思路:1、先在列表页
- python函数的两种嵌套方法使用函数的嵌套有两种方式:交叉嵌套回环嵌套交叉嵌套交叉嵌套的方式是在本函数中调用同一级或上一级函数的嵌套方法:
- MVVM模式不但可用于Form表单,在复杂的管理页面中也能大显身手。例如,分页显示Blog的功能,我们先把后端代码写出来:在apis.py中
- 每次要显示图像阵列的时候,使用自带的 matplotlib 或者cv2 都要设置一大堆东西,subplot,fig等等,突然想起 可以利用n
- 正则表达式是一种进行模式匹配和文本操纵的功能强大的工具。正则表达式灵活、易用,按照它的语法规则,随需构造出的匹配模式就能够从原始文本中筛选出