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

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

数据预处理的分箱操作 数据分箱 介绍 我们在建立模型前,一般需要对特征变量进行离散化,特征离散化后,模型会更稳定,降低模型过拟合的风险。尤其是采用 logsitic 建立评分卡模型时,必须对连续变量进行离散化。而特征离散化处理通常采用的就是分箱法,数据分箱(也称为离散分箱或分段)是一种数据预处理技术,用于减少次要观察误差的影响,提高泛化性。 数据分箱又分为有监督分箱和无监督分箱,是否使用标签进行离散化(分箱)决定了有监督还是无监督的离散化方法。 知识点 无监督分箱 split 分箱 merge 分箱 无监督分箱 这里为了 阅读详情

相关推荐

基于51单片机的电压表【0-20V,ADC0832,4051,自动量程】(仿真)

自动换挡式数字电压表就是一个基于单片机的能自动切换量程的数字电压表,其作用是在使用低位的AD转换实现高精度电压测量,可以测量0~20V的电压,并且具有0~0.2V(待测电玉低于0.2V时),0~2V(待测电压低于2V时)和0~20V三个量程自动匹配测量,当待测电压值发生变化时,电压表可以根据输入电压情况自动选择合适的量程进行测量,并且把测量结果显示出来。(2)实现电压表精度测试,最高精度要求0.01V;(1)实现0~20V分3档式电压表;

qq_63964231的博客 1501

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

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

shellquery的博客 86

Intel网卡固件烧录实战:eeupdate与bootutil命令完全解析

固件作为硬件设备底层运行的软件,其稳定性直接决定硬件功能的完整性。网卡固件一旦损坏,常表现为MAC地址丢失、PXE启动失效、NVM数据异常导致降速或掉线。维护这类问题,需借助Intel官方工具eeupdate与bootutil在UEFI Shell或DOS环境下执行底层烧录操作。eeupdate负责网卡的身份信息与NVM存储管理,可重置MAC、恢复固件镜像;bootutil则专管启动行为,支持PXE配置与Boot Agent升级。从环境准备、命令参数到故障恢复,掌握这两款工具能让运维人员在修复存量网卡、应对

weixin_34269583的博客 313

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

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

dearmite的专栏 945

基于深度学习卷积神经网络的医学图像乳腺癌分类

一、项目背景与意义乳腺癌是女性最常见的恶性肿瘤之一,其早期发现和治疗对于提高患者的生存率和生活质量至关重要。然而,乳腺癌的诊断通常依赖于医生的经验和主观判断,这不仅耗时而且可能存在误差。近年来,深度学习技术特别是卷积神经网络(CNN)在图像处理领域取得了显著进展,为乳腺癌的自动分类提供了新的解决方案。本项目旨在利用深度学习卷积神经网络构建一套高效、准确的医学图像乳腺癌分类系统,辅助医生进行乳腺癌的早期诊断和治疗。二、技术实现。

2301_79810943的博客 977

“华为杯”研究生数学建模竞赛2020年-【华为杯】E题:能见度估计与预测(附获奖论文及python代码实现)

因此,题目要求借助机场的 AMOS 观测数据中的气压、温度、湿度、风速等气象因子,达到 100% 时,空气中的水汽便会凝结成细微的水滴悬浮于空中,使地面水平的能见度下。传统的仪器探测法成本高,覆盖范围小,而基于视频的能见度检测能弥补仪器测量的不足之处,但是预测精度不高,需要进一步改。象条件,空气质量的影响,其中较为关键的影响因子是雾和霾。性过强,激光能见度仪的检测方法更为可信,但是激光能见度仪覆盖的检测范围小,安装。覆盖的交通视频路况数据间接计算得到能见度数值的方法,此方法成本较低,覆盖范围广。

getusushu的博客 2285

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

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

m0_64734557的博客 1319

RK3588开发笔记-Buildroot编译host-nodejs报错解决ModuleNotFoundError: No module named ‘_bz2‘

在RK3588的开发过程中,使用Buildroot进行系统的构建和编译是一个常见的选择。然而,在编译host-nodejs的过程中,有时会遇到报错信息提示。这个错误通常是由于Python环境中缺少相应的模块导致的。以下将记录我解决这个问题的过程。。在RK3588的开发过程中,使用Buildroot编译host-nodejs时遇到的错误,通常是由于缺少相应的Python模块导致的。通过配置buildroot pythong bzip2开发库并重新编译,可以解决这个问题。

flypig has a dream! 901

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

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

优快云资讯 3390

vLLM专题(七)-支持的模型列表

vLLM支持跨多种任务的生成式和池化模型。如果一个模型支持多个任务,您可以通过–task参数来设置任务。对于每个任务,我们列出了已在vLLM中实现的模型架构。每个架构旁边,我们列出了一些使用该架构的流行模型。

1261

【乐鑫】唤醒词修改方法

乐鑫科技的语音识别模块(如ESP-SR)支持自定义唤醒词,但需通过官方工具链完成。

以实战经验介绍行业知识 828

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

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

Python爱好者的专栏 4669

《AgentScope-Java 深入浅出教程》第2章 环境搭建与第一个智能体

创建// 【导入说明】/*** 时间相关工具类* 工具类是普通的 Java 类,通过注解声明为工具。* 智能体可以根据用户需求自动调用这些工具。*/// 【工具定义】获取当前时间@Tool(name = "get_current_time", // 工具名称:LLM 看到的名称description = "获取指定时区的当前时间" // 工具描述:帮助 LLM 理解何时使用// 【参数定义】// @ToolParam 的 name 属性是必需的!

步子哥的博客 418

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

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

jxf_jxfcsdn的博客 1086

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

小白开始接触golang

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

loongshawn的博客 4147

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

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

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

caileigood的博客 311

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

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

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值