《快学 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

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

基于FPGA低频方波测量-频率与占空比 阅读详情

相关推荐

Ubuntu22.04系统安装及配置

下载Ubuntu22.04系统镜像(下载地址:链接:https://caiyun.139.com/m/i?提取码:fLRJ),结合rufus和系统镜像制作USB启动盘,在物理机服务器上通过USB启动盘进行安装;或通过Esxi虚拟化平台创建虚拟机,然后在虚拟机中使用系统镜像进行安装。

cheagoun的博客 8万+

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

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

shellquery的博客 86

SMETANA 安装使用教程

关于SMETANA的安装和简单使用信息

qq_44940977的博客 1173

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

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

dearmite的专栏 945

2025最新正版Autodesk 3ds Max 2022安装教程:从下载到中文环境配置全流程解析

Autodesk 3ds Max 2022是一款专业的三维建模、动画和渲染软件,广泛应用于影视制作、游戏开发、建筑可视化等领域。

waicsdn_haha的博客 1万+

内网穿透-frp二层隧道搭建

环境: weblogic: 192.168.0.133 10.10.20.12 win7 : 10.10.20.7 10.10.10.7go语言、跨平台的 可以分为frpc和frps frpc—>请求----->frps frps:放到黑客公网上 1.需要出网 2.配置: frpc:放到肉鸡上,请求frps 2.端口转发 2.1frpc传到肉鸡(weblogic) 利用工具,传入内存马到weblogic,然后使用冰蝎进行连接 然后在文件管理中上传frpc.exe和frpc.ini文件 fr

yyytaotao的博客 2105

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

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

m0_64734557的博客 1319

解释多智能体强化学习(Multi-Agent Reinforcement Learning)(面试题200合集,中频、重要)

多智能体强化学习通过扩展传统强化学习框架,研究多个智能体在动态、交互环境中的策略优化问题。它既有理论上的挑战(如非平稳性和均衡求解),也有广泛的实际应用前景。数学上,它依赖马尔可夫博弈模型,核心是设计算法让智能体在合作或竞争中达到最优。

qq_38334677的博客 990

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

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

优快云资讯 3390

RuyiDify如何创建知识库API密钥:让程序安全访问知识库

知识库 API Key 是程序访问知识库的钥匙。创建它很简单,但真正重要的是知道它能做什么、应该放在哪里、不能暴露给谁。RuyiDify 讲这一步,不是为了让大家多记一个按钮,而是为了把知识库从“人工上传资料”推进到“程序化维护资料”。

未来已来,AI时代,学AI编程,做AI量化,就来大鹏AI教育。 140

什么是DHCP Snooping?如何配置DHCP Snooping?

功能描述防护类型防御伪造 DHCP 服务器、避免地址冲突、增强网络安全性使用场景企业园区网、校园网、大型局域网配合机制IP Source Guard、DAI、防止 ARP 欺骗部署难度⭐⭐(简单)“DHCP Snooping,是内网 DHCP 安全防护的第一道门神。” 🛡️。

网络技术联盟站 1267

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

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

Python爱好者的专栏 4669

redhawk:avgTW maxTW minTW minWC的区别

分析dynamic ir drop报告时会遇到这几个值,avgTW maxTW minTW minWC,如下图。我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?

m0_61544122的博客 696

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

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

jxf_jxfcsdn的博客 1086

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

小白开始接触golang

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

loongshawn的博客 4147

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

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

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

caileigood的博客 311

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

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

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_42371574的博客 1201

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 语言》第 3 课 —— 分支与循环
下一篇: 《快学 Go 语言》第 5 课 —— 神奇的切片
codehole_
博客等级 码龄7年 34粉丝 132原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值