快学 Go 语言第 2 课 —— 变量什么的最讨厌了

Windows/Ubuntu下vscode配置go语言环境 我是用虚拟机装的Ubuntu16.4,听说vmware10是最稳定的,装好系统后装vmwaretool,这里注意一下 1装虚拟机和Ubuntu vmwaretool是在Vmwareworkstation目录下的linux.iso文件,将这个文件放到虚拟机设置新创建的CD/DVD(IDE)中,在软盘那里选择连接都钩上,点击物理驱动器—>自动检测,一般工具栏或者桌面就会多出一个vmwaretoo... 阅读详情

640?wx_fmt=png

任何一门语言里面最基础的莫过于变量了。如果把内存比喻成一格一格整齐排列的储物箱,那么变量就是每个储物箱的标识,我们通过变量来访问计算机内存。没有变量的程序对于人类来说是可怕的,需要我们用数字位置来定位内存的格子,人类极不擅长这样的事。这就好比一岁半左右的幼儿还没有学会很多名词,只能用手来对物体指指点点来表达自己的喜好。变量让程序逻辑有了丰富的表达形式。

定义变量的三种方式

Go 语言的变量定义有多种形式,我们先看最繁琐的形式

package main

import "fmt"

func main() {
    var s int = 42
    fmt.Println(s)
}

-------------
42

package main

import "fmt"

func main() {
    var s = 42
    fmt.Println(s)
}

---------------
42

package main

import "fmt"

func main() {
    s := 42
    fmt.Println(s)
}

---------------
42

这三种变量定义方式都是可行的,各有其优缺点。可读性最强的是第一种,写起来最方便的是第三种,第二种是介于两者之间的形式。

类型是变量身份的象征,如果一个变量不那么在乎自己的身份,那在形式上就可以随意一些。var 的意思就是告诉读者「我很重要,你要注意」,:= 的意思是告诉读者「我很随意,别把我当回事」。var 再带上显式的类型信息是为了方便读者快速识别变量的身份。

如果一个变量很重要,建议使用第一种显式声明类型的方式来定义,比如全局变量的定义就比较偏好第一种定义方式。如果要使用一个不那么重要的局部变量,就可以使用第三种。比如循环下标变量

for i:=0; i<10; i++ {
  doSomething()
}

var i = 0
for ; i<10; i++ {
  doSomething()
}

package main

import "fmt"

func main() {
    var i int
    fmt.Println(i)
}

-----------
0

全局变量和局部变量

上面我们在代码例子中编写的变量都是局部变量,它定义在函数内部,函数调用结束它就消亡了。与之对应的是全局变量,在程序运行期间,它一直存在,它定义在函数外面。

package main

import "fmt"

var globali int = 24

func main() {
    var locali int = 42
    fmt.Println(globali, locali)
}

---------------
24 42

学过 C 语言的同学可能会问,Go 语言里有没有静态变量呢?答案是没有。

变量与常量

Go 语言还提供了常量关键字 const,用于定义常量。常量可以是全局常量也可以是局部常量。你不可以修改常量,否则编译器会抱怨。常量必须初始化,因为它无法二次赋值。全局常量的大小写规则和变量是一致的。

package main

import "fmt"

const globali int = 24

func main() {
    const locali int = 42
    fmt.Println(globali, locali)
}

指针类型

Go 语言被称为互联网时代的 C 语言,它延续使用了 C 语言的指针类型。

package main

import "fmt"

func main() {
    var value int = 42
    var pointer *int = &value
    fmt.Println(pointer, *pointer)
}

--------------
0xc4200160a0 42

package main


import "fmt"


func main() {
    var value int = 42
    var p1 *int = &value
    var p2 **int = &p1
    var p3 ***int = &p2
    fmt.Println(p1, p2, p3)
    fmt.Println(*p1, **p2, ***p3)
}

----------
0xc4200160a0 0xc42000c028 0xc42000c030
42 42 42

640?wx_fmt=png
图片

如果普通的变量是一个储物箱,那么指针变量就是另一个储物箱,这个储物箱里存放了普通变量所在储物箱的钥匙。通过多级指针来读取变量值就好比在玩一个解密游戏。

Go 语言基础类型大全

Go 语言定义了非常丰富的基础类型,下面我列举了所有的基础数据类型。

package main

import "fmt"

func main() {
    // 有符号整数,可以表示正负
    var a int8 = 1 // 1 字节
    var b int16 = 2 // 2 字节
    var c int32 = 3 // 4 字节
    var d int64 = 4 // 8 字节
    fmt.Println(a, b, c, d)

    // 无符号整数,只能表示非负数
    var ua uint8 = 1
    var ub uint16 = 2
    var uc uint32 = 3
    var ud uint64 = 4
    fmt.Println(ua, ub, uc, ud)

    // int 类型,在32位机器上占4个字节,在64位机器上占8个字节
    var e int = 5
    var ue uint = 5
    fmt.Println(e, ue)

    // bool 类型
    var f bool = true
    fmt.Println(f)

    // 字节类型
    var j byte = 'a'
    fmt.Println(j)

    // 字符串类型
    var g string = "abcdefg"
    fmt.Println(g)

    // 浮点数
    var h float32 = 3.14
    var i float64 = 3.141592653
    fmt.Println(h, i)
}

-------------
1 2 3 4
1 2 3 4
5 5
true
abcdefg
3.14 3.141592653
97

  1. 复数类型 complex64 和 complex128

  2. unicode字符类型 rune

  3. uintptr 指针类型

下一节我们开讲 Go 语言的条件判断与循环语句

640?wx_fmt=jpeg

阅读更多精彩文章,扫一扫关注公众号「码洞」

Cadence学习之路:什么是PCB工艺的正片与负片 正片??负片??Flash焊盘的创建与使用 阅读详情

相关推荐

TouchGFX使用教程(三)

TouchGFX使用教程(三)界面事件控件修改方法图片等资源放置位置 界面事件 控件修改方法 图片等资源放置位置

yuanzhan11的专栏 6972

《快学 Go 语言》第 2 课 —— 变量什么的最讨厌了

任何一门语言里面最基础的莫过于变量了。如果把内存比喻成一格一格整齐排列的储物箱,那么变量就是每个储物箱的标识,我们通过变量来访问计算机内存。没有变量的程序对于人类来说是可...

shellquery的博客 110

TGK-planner编译报错PLUGINLIB_EXPORT_CLASS解决

TGK-planner编译报错解决。

latter97的博客 857

【GO】Go 学习(2)标识符 语言关键字

系统如何让截图带鼠标指针,推荐两款可以带鼠标指针截图的软件-faststone Capture另一个截图工具系统如何让截图带鼠标指针,推荐两款可以带鼠标指针截图的软件-Snipaste本文章里面所使用的字幕拼接工具:图片拼接-支持jpg格式,一般用于拼接一个视频里的N多字幕拼图工具与看图工具打包视频拼接字幕工具,看图工具【工具】图片拼接-支持jpg格式,一般用于拼接一个视频里的N多字幕选择了也要努力,没有远虑必有近忧!

dearmite的专栏 945

MATLAB新手必看:Stewart平台运动学逆解从入门到实战(附完整代码)

本文详细介绍了如何使用MATLAB实现Stewart平台的运动学逆解,从基础原理到完整代码实现,涵盖并联机器人的数学建模、MATLAB编程和Simulink集成。通过实战案例和可视化分析,帮助新手快速掌握Stewart平台的运动学逆解技术,适用于机器人学和控制理论领域的研究与应用。

dream的博客 551

Habitat-baselines v0.1.7防踩坑手把手带你跑通(全网唯一)

Habitat-baselines v0.1.7防踩坑手把手带你跑通(全网唯一)

shannanshouyin的博客 1278

Go语言--语法基础2--基本编程概念--Go编码规范

Go 语言的开发团队制定了统一的官方代码风格,并且推出了gofmt工具(gofmt或go fmt)来帮助开发者格式化他们的代码到统一的风格。gofmt是一个 cli 程序,会优先读取标准输入,如果传入了文件路径的话,会格式化这个文件,如果传入一个目录,会格式化目录中所有.go文件,如果不传参数,会格式化当前目录下的所有.go文件。gofmt默认不对代码进行简化,使用-s。

m0_64734557的博客 1319

Python爬虫博客:如何抓取时事新闻信息 —— 从各大新闻网站获取实时新闻数据

发送请求:向目标新闻网站发送 HTTP 请求,获取网页内容。解析网页:使用解析库(如)从网页中提取新闻标题、摘要、内容、发布时间等。绕过反爬虫机制:使用代理、设置请求头、模拟浏览器行为等策略绕过反爬虫技术。数据存储与清洗:将抓取的数据保存到本地文件或数据库中,并进行清洗,确保数据的可用性。在抓取过程中,我们还会面对很多实际问题,比如反爬虫技术、分页抓取、动态加载的内容等。接下来,我们将逐步介绍如何使用不同技术抓取静态和动态网页,并对抓取的内容进行处理。Scrapy。

2201_76125261的博客 2137

为什么新一代的Rust、Go等编程语言都如此讨厌if-else、Switch结构

作者 | 马超出品 | 优快云(ID:优快云news)今天我们还是继续来聊高并发的话题,我们知道Swich及if-else分支是一个非常有用的语法,这是一个可以回溯到上世纪的Pas...

优快云资讯 3389

Pydoll浏览器自动化框架教程

让浏览器自动化回归本质。不再纠缠驱动兼容、不再手动处理验证码、不再因为请求和 UI 分裂而头疼。如果你经常做 Web 自动化、爬虫或者测试,不妨试试 Pydoll。也别忘了给项目点个 ⭐,让作者知道有人喜欢这个工具。👉GitHub 地址。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 204

月薪2万+的网络工程师,到底藏着哪些“绝活”?

在IT圈,网络工程师是个既神秘又硬核的职业。月薪2万+的网工,早已不是只会拉网线、改IP的“IT民工”,而是掌握了一身“绝技”的技术大牛。他们能让企业网络如丝般顺滑,面对宕机临危不乱,还能用自动化脚本批量搞定上百台设备。想知道这些高薪网工的秘密武器是什么?今天,我就以一个老网工的视角,结合自己和同行们的实战经验,扒一扒那些月薪2万+的网络工程师都身怀哪些绝技。如果你也想挤进高薪行列,不妨参考参考!

网络技术联盟站 362

GO、Rust这些新一代高并发编程语言为何都极其讨厌共享内存?

今天我想再来讨论一下高并发的问题,我们看到最近以Rust、Go为代表的云原生、Serverless时代的语言,在设计高并发编程模式时往往都会首推管道机制,传统意义上并发控制的利器如互斥体或者信号量都不是太推荐。 这里我们先来看一下并发和并行的概念,我们知道并发是一个处理器同时处理多个任务,这里同时是逻辑上的,而并行同一时刻多个物理器同时执行不同指令,这里的同时物理上的。并发是要尽量在目前正在执行的任务遇到阻塞或者等待操作时,释放CPU,让其它任务得以调度,而并行则是同时执行不同任务而不相互影响。 而..

Python爱好者的专栏 4669

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

GO语言基础教程(98)Go指针的使用方法之获取指针指向的变量的值:别怕,Go指针不是刺儿头!带你轻松玩转“寻宝游戏”

Go语言中的指针看似复杂,实则像一张藏宝图,指引你找到变量宝藏。本文用最接地气的方式,手把手带你掌握指针的核心用法——如何获取指针指向的变量值。我们将从内存地址的趣味比喻入手,通过完整示例演示&和*操作符的配合使用,揭秘常见错误和实用技巧。无论你是刚入门的Gopher还是被指针吓退过的初学者,这篇教程都能让你在笑声中彻底搞懂指针取值,写出更高效的Go代码!

jxf_jxfcsdn的博客 1086

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

小白开始接触golang

go安装包及安装方法介绍,idea安装go lang插件,编写hello.go开始go语言的探索。

loongshawn的博客 4147

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

一起来学GO语言1--GO语言环境搭建

       闲来没事发现GO语言火了,所以自学一下GO语言,GO语言博客的写作过程就是我自己学习的过程,记下来当作笔记,也与大家分享。 首先我们先将GO的环境搭建起来,这里所有的操作都是在windows操作系统上进行。 1、下载GO语言安装包 下载路径:https://golang.google.cn/dl/ 2、安装GO语言安装包 安装自己安装,这个就不说了 3、下载GO语言开发工...

caileigood的博客 311

Java程序员的Golang入门指南(上)

Java程序员的Golang入门指南1.序言Golang作为一门出身名门望族的编程语言新星,像豆瓣的Redis平台Codis、类Evernote的云笔记leanote等。1.1 为什么要学习如果有人说X语言比Y语言好,两方的支持者经常会激烈地争吵。如果你是某种语言老手,你就是那门语言的“传道者”,下意识地会保护它。无论承认与否,你都已被困在一个隧道里,你看到的完全是局限的。《肖申克的救赎》对此有很好

西代零零发 2万+

Go包依赖管理简史 | Gopher Daily (2020.06.15) ʕ◔ϖ◔ʔ

每日一谚:Go makes error handling as important as any other code慕课网6.18大减免,有想学习容器或Kubernets的童鞋可以点击...

TonyBai 288

php简单还是go简单_PHP转Golang一些感想

由于某些原因参与到团队Golang项目的开发中,之前开发主要用的PHP,现在Golang用了也有较长一段时间了,就想着写篇博客分享下现在的一些感想,缕一缕Golang的优缺点。缺点1:没有异常,Emmmm 等等... 它有!用过Golang都懂,漫天遍野的err判断if err != nil {return err}最初让人很不爽,当然现在没好多少...Golang其实有异常捕获机制panic/r...

weixin_42371574的博客 1201

GO、Rust 这些新一代高并发编程语言为何都极其讨厌共享内存?

作者 | 马超 责编 | 王晓曼出品|优快云博客今天我想再来讨论一下高并发的问题,我们看到最近以Rust、Go为代表的云原生、Serverless时代的语言,在设计高并发编程模式...

优快云资讯 3014

php转go注意,PHP转Golang一些感想

由于某些原因参与到团队Golang项目的开发中,之前开发主要用的PHP,现在Golang用了也有较长一段时间了,就想着写篇博客分享下现在的一些感想,缕一缕Golang的优缺点。缺点1:没有异常,Emmmm 等等... 它有!用过Golang都懂,漫天遍野的err判断if err != nil {return err}最初让人很不爽,当然现在没好多少...Golang其实有异常捕获机制panic/r...

weixin_39785286的博客 411

GO语言学习笔记(与Java的比较学习)(一)

一个应用程序可以包含不同的包,而且即使你只使用 main 包也不必把所有的代码都写在一个巨大的文件里:你可以用一些较小的文件,并且在每个文件非注释的第一行都使用 package main 来指明这些文件都属于 main 包。同时,带有 ++ 和 -- 的只能作为语句,而非表达式,因此 n = i++ 这种写法是无效的,其它像 f(i++) 或者 a[i]=b[i++] 这些可以用于 C、C++ 和 Java 中的写法在 Go 中也是不允许的。否则,如果这个指针为空,你使用它的话,会Crash。

benaso的大学学习历程 1989
上一篇: 快学 Go 语言 第 1 课 —— Hello World
下一篇: 快学 Go 语言 第 3 课 —— 分支与循环
码洞
博客等级 码龄10年 41粉丝 137原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值