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

【Go】Go基础(三):基本结构和基本数据类型

1、Go程序源码结构
我们将一个Go程序的源码暂时称为一个项目 :

每个项目由若干个包组成;
每个包由同一个目录中的若干个go文件组成;
每个go文件中由若干函数、变量、常量等组成;
每个函数由流程控制语句、变量、常量、运算符和函数组成。

2、Go语言中的关键字
25个关键字:
break		default		func(定义函数)		interface	select
case		defer		go		map			struct
chan		else		goto	package		switch
const(定义常量)	fallthrough	if	range		type
continue	for		import		return		var(定义变量)
36个预定义标识符,其中包含了基本类型的名称和一些基本的内置函数:

(注:不用引入包就能使用的函数为内置函数)

append	bool	byte	cap	close	complex	complex64	complex128	uint16
copy	false	float32	float64	imag	int	int8	int16	uint32
int32	int64	iota	len	make	new	nil	panic	uint64
print	println	real	recover	string	true	uint	uint8	uintptr

程序中可能会使用到这些分隔符:

括号 (),中括号 [] 和大括号 {}。

程序中可能会使用到这些标点符号:

.、,、;、: 和 …。

程序的代码通过语句来实现结构化。每个语句不需要像 C 家族中的其它语言一样以分号 ; 结尾,因为这些工作都将由 Go 编译器自动完成。
多个语句写在同一行,它们则必须使用 “;” 人为区分

3、常量

关键字const,格式:const identifier [type] = value
枚举常量

type Color int
const (RED Color = iota // 0ORANGE // 1YELLOW // 2
)

iota遇到const变为0

4、变量

关键字var,格式:var identifier type(注意,类型在变量后面)如:var a int。
当一个变量被声明之后,系统自动赋予它该类型的零值:int 为 0,float 为 0.0,bool 为 false,string 为空字符串,指针为 nil。记住,所有的内存在 Go 中都是经过初始化的。

局部变量:使用简短声明语法 :=,如:a := 1
全局变量允许声明后不使用,局部变量声明后必须使用,否则会报错:a declared and not used

并行赋值:a, b, c := 5, 7, "abc"
交换变量值:a, b = b, a
空白标识符:_ 

init函数:它不能够被人为调用,而是在每个包完成初始化后自动执行,并且执行优先级比 main 函数高。
每个源文件都只能包含一个 init 函数。初始化总是以单线程执行,并且按照包的依赖关系顺序执行。

5、基本类型和运算

基本类型:

布尔类型 bool、 整型 int 、浮点型 float、复数complex64 、complex128 

运算符:

位运算符:与&、或|、异或^、左移<<、右移>>、
逻辑运算符:==、!=、<、<=、>、>=
算术运算符:+、-、*、/、%、-=、*=、/=、%=、++、--;自增减只能用于后缀、
只能作为语句,而非表达式,如:f(i++)是无效

优先级 运算符

7 		^ !
6 		* / % << >> & &^
5 		+ - | ^
4 		== != < <= >= >
3 		<-
2 		&&
1 		||

类型别名:关键字type
字符类型:byte 类型是 uint8 的别名;Unicode字符rune是 int32 的别名

6、字符串

string类型:字符串是字节的定长数组,不可修改。

Go 支持以下 2 种形式的字面值:
解释字符串:该类字符串使用双引号括起来,其中的相关的转义字符将被替换,
这些转义字符包括:

	\n:换行符\r:回车符\t:tab 键\u 或 \U:Unicode 字符\\:反斜杠自身

非解释字符串:
该类字符串使用反引号括起来,支持换行,例如:

	`This is a raw string \n` 中的 `\n\` 会被原样输出。

字符串比较:

==、!=、<、<=、>=、>

字符串长度:

len(str)

字符串拼接:

+、+=

注意事项 获取字符串中某个字节的地址的行为是非法的,例如:&str[i]。

7、strings 和 strconv 包

前缀判断:strings.HasPrefix(s, prefix string) bool
后缀判断:strings.HasSuffix(s, suffix string) bool
字符串包含:strings.Contains(s, substr string) bool
子字符串在父字符串中的位置:strings.Index(s, str string) int
最后出现的位置:strings.LastIndex(s, str string) int
非ASCII编码的字符在父字符串中的位置:strings.IndexRune(s string, r rune) int
字符串替换:strings.Replace(str, old, new, n) string
将字符串 str 中的前 n 个字符串 old 替换为字符串 new,并返回一个新的字符串,如果 n = -1 则替换所有字符串 old 为字符串 new:
出现次数:strings.Count(s, str string) int
复制多次字符串:strings.Repeat(s, count int) string
转小写:strings.ToLower(s) string
转大写:strings.ToUpper(s) string
剔除字符串开头和结尾的空白符号:strings.TrimSpace(s) string
剔除字符串开头和结尾的指定字符:strings.Trim(s, “cut”) string
剔除字符串开头字符:strings.TrimLeft
剔除字符串结尾字符:strings.TrimRight
以空白符来分割字符串:strings.Fields(s),返回slice
以自定义分隔符来分割字符串:strings.Split(s, sep), 返回slice
将slice拼接成字符串:strings.Join(sl []string, sep string) string

strconv包:与字符串相关的类型转换
整数转字符串:strconv.Itoa(i int) string
浮点型转字符串:strconv.FormatFloat(f float64, fmt byte, prec int, bitSize int) string 将 64 位浮点型的数字转换为字符串,其中 fmt 表示格式(其值可以是 ‘b’、‘e’、‘f’ 或 ‘g’),prec 表示精度,bitSize 则使用 32 表示 float32,用 64 表示 float64。
字符串转整数:strconv.Atoi(s string) (i int, err error)
字符串转浮点型:strconv.ParseFloat(s string, bitSize int) (f float64, err error)

8、日期和时间:time包

获取当前时间:time.Now()、t.Day()、t.Minute()
格式化输出时间:func (t Time) Format(layout string) string
休眠:time.Sleep(Duration d)

9、指针

取地址符是:&
地址内容引用:*

相关文章:

2019如何学Python?这里有你需要的答案

点击上方↑↑↑蓝字关注我们~参加 2019 Python开发者日&#xff0c;请扫码咨询 ↑↑↑编辑 | Jane出品 | Python大本营&#xff08;公众号id&#xff1a;pythonnews&#xff09;根据 2018 年 Python 开发者大调查&#xff0c;Python 3 的渗透率已经快速增长至 84%&#xff0c;越…

Cisco HSRP热备份路由器协议配置

HSRP热备份路由器协议&#xff1a; HSRP是 Hot Standby Routing Protocol&#xff08;热备份路由协议&#xff09;的缩写&#xff0c;它的作用是当核心路由器不能正常工作时&#xff0c; 备用路由器能够实现自动平滑的替换&#xff0c;以保证网络正常使用。该协议中含有多台路由…

FTP与TFTP的区别

文件传输协议(FTP)实际上就是传输文件的协议,它可以应用在任意两台主机之间&#xff0c;但是FTP不仅仅是一个协议,它同时也是一个程序。作为协议,FTP是被应用程序所使用的;而作为程序,用户需要通过手动方式来使用FTP并完成文件的传送。FTP允许执行对目录和文件的访问,并且可以完…

写给NLP研究者的编程指南

点击上方↑↑↑蓝字关注我们~参加 2019 Python开发者日&#xff0c;请扫码咨询 ↑↑↑作者 | 赤乐君&#xff0c;日本某大手研发部门的NLP工程师。关注关系抽取与知识图谱的相关研究。来源 | 赤乐君的知乎专栏最近AllenNLP在EMNLP2018上做了一个主题分享&#xff0c;名为“写给…

【数据库】sqlite3常用命令及SQL语句

【数据库】sqlite3数据库备份、导出方法汇总 一、准备工作 0、安装SQLite3 1&#xff09;ubuntu命令安装&#xff08;不是最新版本&#xff09; sudo apt install sqlite32&#xff09;源码安装&#xff08;可以安装最新版本&#xff09; 下载&#xff1a; https://www.sq…

资本主义社会是不存在人道的

对叙利亚人民感到无助而写点文章&#xff0c;虽然没有什么大的作用&#xff0c;也谈谈自己对于战争与和平的理解&#xff0c;战争与和平就相当于爱与恨一样&#xff0c;爱的热切&#xff0c;恨之入骨&#xff0c;虽然形容不当&#xff0c;人性的双面总是要拿来剖析一二的。 人类…

再谈javascript图片预加载经典技术

图片预加载技术的典型应用&#xff1a; 如lightbox方式展现照片&#xff0c;无疑需要提前获得大图的尺寸&#xff0c;这样才能居中定位&#xff0c;由于javascript无法获取img文件头数据&#xff0c;必须等待其加载完毕后才能获取真实的大小然后展示出来&#xff0c;所以lightb…

【Go】Go基础(四):流程控制(控制结构)

1、if-else结构 格式&#xff1a; if condition1 {// do something } else if condition2 {// do something else } else {// default }和C的不同&#xff0c;条件语句没有大括号&#xff1b; 新增的语法&#xff1a; if initialization; condition {// do something }例…

让世界零距离 小鱼易连的大梦想

“他是高材生&#xff0c;也是技术大拿。十年北美&#xff0c;十年中国&#xff0c;他在高科技领域善于创新、精于管理&#xff0c;五项中美专利加身。他在北电网络领导团队不断创新&#xff0c;成就亚太顶尖;他曾任宝利通全球高管&#xff0c;带领团队从初创一路起飞&#xff…

程序员再也不能埋头敲代码了

上周&#xff0c;阿里巴巴重磅发布了机器学习平台 PAI 3.0 版本&#xff0c;据悉&#xff0c;这个 PAL 平台封装了 200 多种经典算法&#xff0c;可以轻松搭建机器学习实验。作为码农一枚&#xff0c;使我不得不抬起原本一直低着敲代码的头&#xff0c;看看这个为 AI 狂欢的世界…

函数的重载 - C++快速入门06

函数的重载 让编程改变世界 Change the world by program 函数的重载 C 里的函数重载&#xff08;overloading&#xff09;机制比我们此前见到的东西都高深&#xff0c;这种语言的灵活性和强大功能在它身上体现得淋漓尽致。 所谓函数重载的实质就是用同样的名字再定义一个有…

【Go】Go基础(五):函数

1、简述 Go 里面有三种类型的函数&#xff1a; * 普通的带有名字的函数 * 匿名函数或者lambda函数 * 方法&#xff08;Methods&#xff09;两个特殊函数&#xff1a;main()和init()&#xff0c;它们没有参数和返回值&#xff1b; Go语言里面没有函数重载&#xff1b; 2、函数…

搬箱轮滑再炫技!一个被波士顿动力耽误的机器人

点击上方↑↑↑蓝字关注我们~「2019 Python开发者日」7折优惠最后3天&#xff0c;请扫码咨询 ↑↑↑整理 | 琥珀出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;据 TheVerge 等多家外媒报道&#xff0c;波士顿动力公司 (Boston Dynamics) 又推出了一款新的机器人&…

我是如何在天猫、蚂蚁金服、百度等大厂面试中被拒的 | 掘金技术征文

本人16年毕业于普通二本院校网络相关专业&#xff0c;工作经验两年半&#xff0c;目前就职业于一家普通民营企业。 由于非985、211学历硬伤&#xff0c;校招进大厂的门槛远高于同届985、211的毕业生。于是乎&#xff0c;从毕业到现在经历了三家创业公司&#xff0c;创业公司的痛…

solaris上的pkg管理

原文写于2010-05-18 19:43:40 网易博客,已删. 在solaris上安装程序,很多时候多离不开package管理.上的编译好的软件都是已package的形式压缩好然后提供给大家下载的. 关键是3个命令:pkgadd/pkginfo/pkgrm pkgadd -d pkgname用来添加安装包 pkginfo 用来打印系统…

【Go】Go基础(六):数组、切片slice、映射map

1、数组 1.1 数组定义 数组&#xff1a;数组是具有相同 唯一类型 的一组已编号且长度固定的数据项序列。 数组长度必须是一个常量表达式&#xff0c;并且必须是一个非负整数。数组长度也是数组类型的一部分&#xff0c;所以[5]int和[10]int是属于不同类型的。数组长度最大为 …

语义表征的无监督对比学习:一个新理论框架

点击上方↑↑↑蓝字关注我们~「2019 Python开发者日」7折优惠最后3天&#xff0c;请扫码咨询 ↑↑↑译者 | Linstancy责编 | 琥珀出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;诸如图像、文本、视频等复杂数据类型的语义表征 (也称为语义嵌入) 已成为机器学习的核心…

YEX黄建:脱离比特币谈区块链,要么真傻,要么装疯卖傻丨区块链十人谈

如果说2017年是属于虚拟货币的一年&#xff0c;那么2018年的区块链将是生态和应用的一年&#xff0c;随之而来的也将是新的玩法、新的赚钱姿势。为此&#xff0c;雷锋网推出“区块链十人谈”&#xff08;十人者&#xff0c;取是知众人博所长之意&#xff0c;非实指&#xff09;…

70佳精美的PSD素材免费下载(上篇)

设计师经常会去网上搜罗各种各样的素材&#xff0c;这些免费素材不仅能帮助他们节省大量的时间&#xff0c;而且能有很好的效果。今天&#xff0c;本文与大家分享70佳精美的PSD素材&#xff0c;非常感谢那些很有才华的设计师分享它们的劳动成果&#xff0c;让更多的人可以使用他…

漫画讲述人工智能简史

点击上方↑↑↑蓝字关注我们~「2019 Python开发者日」7折优惠最后3天&#xff0c;请扫码咨询 ↑↑↑作者 | 武博士、宋知达、袁雪瑶、聂文韬来源 | 大鱼AI&#xff08;id:DayuAI-Founder&#xff09;本文我们会以生动有趣的漫画来介绍关于人工智能&#xff08;AI&#xff09;相…

【Go】Go基础(七):包

一、标准库概述 1、官方手册 内置包在 Go 语言中有 150 个以上&#xff0c;它们被称为标准库&#xff0c;完整列表可以在Go Walker中查看 https://gowalker.org/search?qgorepos 2、常用包简介 unsafe: 包含了一些打破 Go 语言“类型安全”的命令&#xff0c;一般的程序中不会…

Mysql是时候学习一个存储过程了

create procedure 存储过程名() DECLARE uid INT; #注意声明的变量名不能跟表的字段名一致&#xff0c;否则会报错。如user的主键是id&#xff0c;那么这里声明用来存id值的变量名就不能为id&#xff0c;可以改为uid等 DECLARE done INT DEFAULT 0; #repeat结束标识 DECLARE us…

ASP.NET的Cookie跨域问题

将Cookie的有效范围限制到域。 默认情况下&#xff0c;Cookie 与特定的域相关联。例如&#xff0c;如果您的站点是 www.contoso.com&#xff0c;那么当用户向该站点请求页面时&#xff0c;您编写的Cookie就被发送到服务器。&#xff08;有特定路径值的Cookie除外&#xff09;…

详解物联网的中间件:为何说它是不可或缺的?

互联网的大规模普及&#xff0c;拉近了人与人之间的交流&#xff0c;而不同国家人与人之间的交往也变得密切起来。由于彼此使用的语言不通&#xff0c;为了能够互相交流&#xff0c;我们需要将不同种的交流语言转换成对方可识别的信息&#xff0c;这就是翻译存在的理由了。同样…

Decoders对于语义分割的重要性 | CVPR 2019

点击上方↑↑↑蓝字关注我们~「2019 Python开发者日」7折优惠最后3天&#xff0c;请扫码咨询 ↑↑↑作者 | Lin-Zhuo Chen转载自博客链接&#xff1a;https://linzhuo.xyz/posts/DUpsample/今天为大家推荐一篇 CVPR2019 关于语义分割的文章 Decoders Matter for Semantic Segme…

【Go】Go基础(八):结构体和方法

一、 结构体&#xff08;struct&#xff09; 1、结构体定义 type identifier struct {field1 type1field2 type2... }声明&#xff1a;new(Type) 和 &Type{}是等价的 2、初始化结构体 type Interval struct {start intend int }初始化方式&#xff1a; intr : Inter…

Windows 2008 R2 SP1部署Lync2010企业版(四)

9 部署存档和监控服务器 1) 以域管理身份登录SQL01服务器。 2) 单击“开始”&#xff0c;依次指向“程序”、“管理工具”&#xff0c;然后单击“服务器管理器”显示服务器管理器。 3) 单击“添加功能”启动“添加功能向导”&#xff0c;选择“消息队列”&#xff0c;下一步。 …

【Go】Go基础(九):接口(Interfaces)与反射(reflection)

一、接口&#xff08;interfaces&#xff09; 1、概述 接口定义了一组方法&#xff08;方法集&#xff09;&#xff0c;但是这些方法不包含&#xff08;实现&#xff09;代码&#xff1a;它们没有被实现&#xff08;它们是抽象的&#xff09;。接口里也不能包含变量。 通过如…

用ECMAScript4 ( ActionScript3) 实现Unity的热更新 -- 使用原型链和EventTrigger

原型链是JS的必备&#xff0c;作为ECMAScript4,原型链也是支持的。 特别说明&#xff0c;ActionScript3是支持完整的面向对象继承支持的,原型链只在某些非常特殊的情况下使用。 本文旨在介绍如何使用原型链。 任意对象类型都有一个prototype属性&#xff0c;包括导入的Unity的A…

教育部发文35所高校新增AI本科专业!想回去重新高考

点击上方↑↑↑蓝字关注我们~「2019 Python开发者日」7折优惠最后3天&#xff0c;请扫码咨询 ↑↑↑作者 | 琥珀出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;2019 年 3 月 28 日&#xff0c;教育部公布了 2018 年度普通高等学校本科专业备案和审批结果。消息一出&…