简单认识go语言

简单了解一下go语言的历史, 二十世纪八十年代,肯·汤普逊在内的Plan 9项目原班人马加入了谷歌在Google,他们创造了Go语言。早在2007年9月,Go语言还是这帮大牛的20%自由时间
的实验项目。幸运的是,到了2008年5月,Google发现了Go语言的巨大潜力,从而开始全力支持
这个项目,让这批人可以全身心投入Go语言的设计和开发工作中。Go语言的第一个版本在2009
年11月正式对外发布,并在此后的两年内快速迭代,发展迅猛。第一个正式版本的Go语言于2012
年3月28日正式发布,让Go语言迎来了第一个引人瞩目的里程碑。

谷歌一贯的作风 拥抱开源,所以我们也可以在github上去下载go的源码来查看,甚至为go贡献一些新的内容

下面罗列一下Go语言最主要的特性:
 自动垃圾回收
 更丰富的内置类型
 函数多返回值
 错误处理
 匿名函数和闭包
 类型和接口
 并发编程
 反射
 语言交互性

配置开发环境

  • 下载go

  • 设置gopath(go代码存放空间), goroot(go语言sdk/bin文件夹)

  • vscode 导入go的多个插件

  • 创建go的代码存放结构

第一个go程序

//  声明文件所存在的位置 packge
package main// 进入需要使用的工具库(包)
import "fmt"// main 函数 程序的入口
func main(){fmt.Println("hello golang")
}

常用的命令

  • 执行go文件 go run xxxx
  • 生成可执行文件 go build xxx

变量

​ 我们可以将一个程序 看作一个小世界 不论哪个世界 都有构成他的一部分, 变量就是构建程序世界的一部分

变量实际上就是存放在内存中的一个数据空间的表示 他可能有不同的类型 .

Go语言的变量声明方式与C和C++语言有明显的不同。对于纯粹的变量声明,Go语言引入了

Go语言的变量声明方式与C和C++语言有明显的不同。对于纯粹的变量声明,Go语言引入了
关键字var,而类型信息放在变量名之后,示例如下:

var v1 int
var v2 string
// 数组
var v3 [10]int
// 数组切片
var v4 []int
var v5 struct {f int}// 指针
var v6 *int// map,key为string类型,value为int类型
var v7 map[string]int
var v8 func(a int) int

变量声明语句不需要使用分号作为结束符。与C语言相比,Go语言摒弃了语句必须以分号作
为语句结束标记的习惯。

关键字var,而类型信息放在变量名之后,示例如下:

  1. var v1 int
  2. var v2 string
  3. var v3 [10]int
  4. // 数组
  5. var v4 []int
  6. // 数组切片
  7. var v5 struct {
  8. f int
  9. }
  10. var v6 *int
  11. // 指针
  12. var v7 map[string]int
  13. // map,key为string类型,value为int类型
  14. var v8 func(a int) int
  15. 变量声明语句不需要使用分号作为结束符。与C语言相比,Go语言摒弃了语句必须以分号作
  16. 为语句结束标记的习惯。

变量的使用流程

在go 语言中 声明变量(类型有默认值可以直接使用)就必须要使用, 否则会出现编译异常

  • 声明
  • 复制
  • 使用

示例:

 var age intage = 18fmt.Println("age=",age)

变量初始化方式

​ 对于声明变量时需要进行初始化的场景,var关键字可以保留,但不再是必要的元素

var v1 int = 10 // 正确的使用方式1
var v2 = 10
// 正确的使用方式2,编译器可以自动推导出v2的类型
v3 := 10
// 正确的使用方式3,编译器可以自动推导出v3的类型

​ 指定类型已不再是必需的,Go编译器可以从初始化表达式的右值推导出该变量应该声明为
哪种类型,这让Go语言看起来有点像动态类型语言,尽管Go语言实际上是不折不扣的强类型语
言(静态类型语言)。

需要注意的事 := 左侧的变量不应该是已经被声明过的 否则会出现异常

var i int
i := 2
会导致类似如下的编译错误:
no new variables on left side of :=

变量赋值

​ 在Go语法中,变量初始化和变量赋值是两个不同的概念。下面为声明一个变量之后的赋值
过程:

var v10 int
v10 = 123

​ Go语言的变量赋值与多数语言一致,但Go语言中提供了C/C++程序员期盼多年的多重赋值功
能,比如下面这个交换i和j变量的语句:

i, j = j, i

​ 在不支持多重赋值的语言中,交互两个变量的内容需要引入一个中间变量:

t = i; i = j; j = t;

匿名变量

​ 在Go中这种情况可以通过结合使用多重返回和匿名变量来避免定义一些不必要变量的丑陋写法,让代码看起来更加优雅。

​ 假设 GetName()函数的定义如下,它返回3个值,分别为firstName、 lastName和
nickName:

func main(){// var v1 int  = 10// var v2 = 10// v3:= 3// fmt.Println(v1,v2,v3);_, _, nickName:= GetName()fmt.Println(nickName);
}
//若只想获得nickName,则函数调用语句可以用如下方式编写
func GetName()(firstName,lastName,nickName string){return "may", "chan", "chibi maruko"
}

输出结果:

chibi maruko

​ 这种用法可以让代码非常清晰,基本上屏蔽掉了可能混淆代码阅读者视线的内容,从而大幅降低沟通的复杂度和代码维护的难度。

常量

​ 在Go语言中,常量是指编译期间就已知且不可改变的值。常量可以是数值类型(包括整型、浮点型和复数类型)、布尔类型、字符串类型等。

字面常量

​ 所谓字面常量(literal),是指程序中硬编码的常量,如:

-12
3.14159265358979323846
// 浮点类型的常量
3.2+12i
// 复数类型的常量
true
// 布尔类型的常量
"foo"
// 字符串常量

​ 在go语言中 它是无类型的。只要这个常量在相应类型的值域
范围内,就可以作为该类型的常量

常量定义

​ 通过const关键字,你可以给字面常量指定一个友好的名字:

const Pi float64 = 3.14159265358979323846
const zero = 0.0 // 无类型浮点常量
const (
size int64 = 1024
eof = -1 // 无类型整型常量
)
const u, v float32 = 0, 3 // u = 0.0, v = 3.0,常量的多重赋值
const a, b, c = 3, 4, "foo"
// a = 3, b = 4, c = "foo", 无类型整型和字符串常量

​ Go的常量定义可以限定常量类型,但不是必需的。如果定义常量时没有指定类型,那么它
与字面常量一样,是无类型常量。
常量定义的右值也可以是一个在编译期运算的常量表达式,比如

const mask = 1 << 3

预定义常量

​ Go语言预定义了这些常量:true、false和iota。

​ iota比较特殊,可以被认为是一个可被编译器修改的常量,在每一个const关键字出现时被
重置为0,然后在下一个const出现之前,每出现一次iota,其所代表的数字会自动增1。

从以下的例子可以基本理解iota的用法:

const (
// iota被重设为0
c0 = iota// c0 == 0
c1 = iota// c1 == 1
c2 = iota// c2 == 2
)
const (
a = 1 << iota// a == 1 (iota在每个const开头被重设为0)
b = 1 << iota// b == 2
c = 1 << iota// c == 4
)
const (
u = iota * 42 // u == 0
v float64 = iota * 42 // v == 42.0
w = iota * 42// w == 84
)
const x = iota// x == 0 (因为iota又被重设为0了)
const y = iota// y == 0 (同上)

​ 如果两个const的赋值语句的表达式是一样的,那么可以省略后一个赋值表达式。因此,上面的前两个const语句可简写为:

const (
// iota被重设为0
c0 = iota // c0 == 0
c1 // c1 == 1
c2 // c2 == 2
)
const (
a = 1 <<iota // a == 1 (iota在每个const开头被重设为0)
b // b == 2
c // c == 4
)

枚举

​ 枚举指一系列相关的常量,比如下面关于一个星期中每天的定义。通过上一节的例子,我们看到可以用在const后跟一对圆括号的方式定义一组常量,这种定义法在Go语言中通常用于定义枚举值。Go语言并不支持众多其他语言明确支持的enum关键字。

const (
Sunday = iota
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
numberOfDays // 这个常量没有导出
)

​ 同Go语言的其他符号(symbol)一样,以大写字母开头的常量在包外可见。
以上例子中numberOfDays为包内私有,其他符号则可被其他包访问。

Go语言编程设计学习Day1:helloworld 变量 常量相关推荐

  1. c语言设计程序实现顺序冒泡_计算机C语言编程设计专业知识题库汇总

    下列关于栈叙述正确的是(). A.算法就是程序 B.设计算法时只需要考虑数据结构的设计 C.设计算法时只需要考虑结果的可靠性 D.以上三种说法都不对 答案:D 下列叙述中正确的是(). A.有一个以上 ...

  2. c语言程序培训,C语言编程培训学习心得

    说到C语言学习真的是千言万语,可以说C语言在世界语言排行榜中位居前列,像一些操作系统.驱动软件.多媒体软件.大型游戏. 杀毒软件等等软件操作系统,都是C\C++的特区,对于其他语言来讲真的是望尘莫及. ...

  3. VB.net:VB.net编程语言学习之操作符(变量/常量/数据类型/声明)逻辑控制语句(条件判断/循环语句)的简介、案例应用之详细攻略

    VB.net:VB.net编程语言学习之操作符(变量/常量/数据类型/声明)&逻辑控制语句(条件判断/循环语句)的简介.案例应用之详细攻略 目录 VB.net编程语言学习之操作符/变量/常量/ ...

  4. C语言编程规范 学习笔记

    C语言编程规范 一.代码总体原则 1.清晰 2.简洁 3.选择适合的风格,与代码原有风格保持一致 二.头文件 背景 术语定义 原则 2.1 头文件中适合放置接口的声明,不适合放置实现 原则 2.2 头 ...

  5. C语言编程入门学习精华:这样学习C语言最有效

    1. C语言已死吗? 本资料描述的是使用C语言的高级技巧,力求将你的C语言能力由"基础"提升为"高级".但是学习态度胜过学习方法,在正式学习之前,有一个问题不吐 ...

  6. C语言小案例_10天从小白到入门C语言编程的学习秘籍

    如果想读完一篇文章就能快速的掌握编程技术的话,这可能会让你失望,但是可以获得学习的方法就在好不过了. 下面是分享自学C语言编程的经历和方法. 1.决定 (图为2008年的笔记本) 2009年初,一个潮 ...

  7. 跟世界打个招呼c语言编程,(一)helloworld

    Idea下用SBT搭建Spark Helloworld 没用过IDEA工具,听说跟Eclipse差不多,sbt在Idea其实就等于maven在Eclipse.Spark运行在JVM中,所以要在Idea ...

  8. C语言编程规范学习笔记和总结(附华为编程规范机试参考试题)

    目录 规范说明 一.头文件 原则1.1 头文件中适合放置接口的声明,不适合放置实现. 原则1.2 头文件应当职责单一 原则1.3 头文件应向稳定的方向包含 规则1.1 每一个.c文件应有一个同名.h文 ...

  9. 《Go语言编程》学习笔记 (二)

    2019独角兽企业重金招聘Python工程师标准>>> 第2章 顺序编程 2.1 变量     2.1.1 变量声明 关键字var,类型信息放在变量名之后 var v1 int va ...

最新文章

  1. Silverlight:SSL教程
  2. Spring Cloud Finchley版中Consul多实例注册的问题处理
  3. python判断语句_python条件判断语句if elif else使用
  4. 6.Java中的变量(定义)和数据类型(划分)
  5. linux 内核 性能,Linux内核十个版本性能对比
  6. python爬取b站评论_学习笔记(1):写了个python爬取B站视频评论的程序
  7. JAVA基础知识总结2(语法基础)
  8. 【优化算法】白头鹰搜索优化算法(BES)【含Matlab源码 1381期】
  9. linux数学软件,使用这些Linux应用来征服你的数学学习
  10. 百度翻译反向js——破解反爬虫
  11. 初学java之家庭记账系统
  12. 数独基本规则_数独基本规则(数独游戏规则和技巧)
  13. 前端开发中常用的几种设计模式
  14. 论文笔记22:QRNN3D: 3D Quasi-Recurrent Neural Network for Hyperspectral Image Denoising
  15. 通过putty取linux文件,putty对Linux上传下载文件或文件夹
  16. 全国CSM敏捷教练认证将于2023年3月25-26开班,报名从速!
  17. 军犬舆情每日热点:天津成立联合调查组进驻权健集团;瑞幸咖啡巨亏8亿
  18. 虚拟ip+keeplalived+nginx 负载实现
  19. java —— 不高兴的津津
  20. 本地资源库,中央资源库,远程资源库的介绍

热门文章

  1. poscms多语言网站方案
  2. 【NOIP2018】旅行 (洛谷P5049 / P5022) O(nlogn)题解
  3. 交互设计基本功!5个值得学习的APP交互方式
  4. 杀戮空间2服务器协议,杀戮空间2服务器设置
  5. 不会吧不会吧,不会真有人还不会算时间复杂度吧?用十分钟让你明白如何计算时间复杂度
  6. java生成excel甘特图
  7. Win10系统CLSID大全介绍
  8. 搞死SAP系统系列 让PO系统宕机
  9. RingAllreduce和NCCL
  10. 湖北民院OJ 计算球体体积