python语言变量随时声明_2. Go语言五种变量创建的方法

对于只有 Python 语言经验的朋友,也许会不太理解声明这个词,在 Python 中直接拿来就用,也不用声明类型啥的。

Go 语言是静态类型语言,由于编译时,编译器会检查变量的类型,所以要求所有的变量都要有明确的类型。

变量在使用前,需要先声明。声明类型,就约定了你这个变量只能赋该类型的值。

声明一般有以下四种方法,其中前面两种同样也可用于定义常量,只需把关键字 var 变成 const 即可。

第一种 :一行声明一个变量

var

其中 var 是关键字(固定不变),name 是变量名,type 是类型。

使用 var ,虽然只指定了类型,但是 Go 会对其进行隐式初始化,比如 string 类型就初始化为空字符串,int 类型就初始化为0,float 就初始化为 0.0,bool类型就初始化为false,指针类型就初始化为 nil。

若想在声明过程,顺便也初始化,可以这样写

var name sting = "Python编程时光"

在 Go 文件中的完整代码如下,为了不写重复性的代码,后续不再貼完整代码,只貼关键代码

package main

import "fmt"

func main() {

var name string = "Python编程时光"

fmt.Println(name)

}

从右值(等号右边的值,rvalue)来看,明显是个 string 类型(这里要注意,在 Python 双引号与单引号等价,但在 Go 中双引号和单引号是不一样的,这里要一定要使用双引号,表示字符串,而在单引号表示rune 类型的字符,这个后续会单独介绍),因此也可以将其简化为

var name = "Python编程时光"

若你的右值带有小数点,在不指定类型的情况下,编译器会将你的这个变量声明为 float64,但是很多情况下,我们并不需要这么高的精度(占用的内存空间更大)

这种情况下,推荐指定类型,不要偷懒

var rate float32 0.89

第二种:多个变量一起声明

声明多个变量,除了可以按照上面写成多行之外,还可以写成下面这样

var (

name string

age int

gender string

)

第三种:声明和初始化一个变量

使用 := (推导声明写法或者短类型声明法:编译器会自动根据右值类型推断出左值的对应类型。),可以声明一个变量,并对其进行(显式)初始化。

name := "Python编程时光"

// 等价于

var name string = "Python编程时光"

// 等价于

var name = "Python编程时光"

但这种方法有个限制就是,只能用于函数内部

第四种:声明和初始化多个变量

name, age := "wangbm", 28

这种方法,也经常用于变量的交换

var a int = 100

var b int = 200

b, a = a, b

第五种:new 函数声明一个指针变量

在这里要先讲一下,指针的相关内容。

变量分为两种 普通变量 和 指针变量

普通变量,存放的是数据本身,而指针变量存放的是数据的地址。

如下代码,age 是一个普通变量,存放的内容是 28,而 ptr 是 存放变量age值的内存地址:0xc000010098

package main

import "fmt"

func main() {

var age int = 28

var ptr = &age // &后面接变量名,表示取出该变量的内存地址

fmt.Println("age: ", age)

fmt.Println("ptr: ", ptr)

}

输出

age: 28

ptr: 0xc000010098

而这里要说的 new 函数,是 Go 里的一个内奸函数。

使用表达式 new(Type) 将创建一个Type类型的匿名变量,初始化为Type类型的零值,然后返回变量地址,返回的指针类型为*Type。

package main

import "fmt"

func main() {

ptr := new(int)

fmt.Println("ptr address: ", ptr)

fmt.Println("ptr value: ", *ptr) // * 后面接指针变量,表示从内存地址中取出值

}

输出

ptr address: 0xc000010098

ptr value: 0

用new创建变量和普通变量声明语句方式创建变量没有什么区别,除了不需要声明一个临时变量的名字外,我们还可以在表达式中使用new(Type)。换言之,new函数类似是一种语法糖,而不是一个新的基础概念。

如下两种写法,可以说是等价的

// 使用 new

func newInt() *int {

return new(int)

}

// 使用传统的方式

func newInt() *int {

var dummy int

return &dummy

}

以上不管哪种方法,变量/常量都只能声明一次,声明多次,编译就会报错。

但也有例外,这就要说到一个特殊变量:匿名变量,也称作占位符,或者空白标识符,用下划线表示。

匿名变量,优点有三:

不分配内存,不占用内存空间

不需要你为命名无用的变量名而纠结

多次声明不会有任何问题

通常我们用匿名接收必须接收,但是又不会用到的值。

func GetData() (int, int) {

return 100, 200

}

func main(){

a, _ := GetData()

_, b := GetData()

fmt.Println(a, b)

}

1460000021683981

本篇文章由一文多发平台ArtiPub自动发布

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/340773.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux netty udp服务端,Netty实现UDP服务端

### 前言在之前的文章我已经讲过了利用Netty实现UDP客户端,大家有兴趣的话,可以参看下面文章:[Netty实现UDP客户端](https://www.jianshu.com/p/5dbc6b3c9d94)今天就让我们来学习下利用Netty实现UDP服务端吧,这里我经过整合封装&a…

会java需要多久能学会python_java好学吗?零基础学java要多久?

java好学吗?零基础学java要多久? 时间:2019-05-21 来源:华清远见 2019年3月,tiOBE 公布了编程语言排行榜,正如官方所说,本月的排名几乎没有任何有趣的变化,排名前十的依然是&…

linux memcached 运行,linux下查看Memcached运行状态

查看Memcached运行状态的命令是:echo stats | nc 127.0.0.1 11211 查看memcached状态的基本命令,通过这个命令可以看到如下信息: STAT pid 22459 进程ID STAT uptime 1027046 服务器运行秒数 STAT time 1273043062 服务器当前unix时间戳 STAT…

jboss架构_检查Red Hat JBoss BRMS部署架构的规则和事件(第二部分)

jboss架构(文章来宾与北美红帽公司高级中间件顾问约翰赫洛克 ( John Hurlocker)合着) 在这周的技巧中,我们将放慢速度,并仔细研究可能的Red Hat JBoss BRMS部署体系结构。 在谈论部署体系结构时&#xff…

linux 关于休眠得脚本,linux – 如果条件为true,请将cron作业休眠5分钟

你有两个选择来获得这个.通常,cron与前一个作业实例是否仍在运行无关.选项1:在脚本的开头写一个锁文件,并在完成后将其删除.然后在脚本开头检查文件是否存在,如果是,则脚本结束而不做任何事情.例如,这可能是这样的:# if the file exists (-e) end the sc…

TestNG中的参数化– DataProvider和TestNG XML(带有示例)

测试自动化,或所谓的自动化测试,并不像听起来那样容易。 必须考虑所有可能的用户交互的所有排列和组合,并且在此基础上,您将必须创建测试脚本以通过多种浏览器和OS组合来验证Web应用程序。 这就是参数化在Selenium自动化测试中起关…

java与python多态的区别_如果未调用父构造函数(与Java不同),多态性在Python中如何工作? - java...

因此,父类构造函数是在Java中调用的,而在Python中则不是。如果这意味着未创建父对象,那么如何在Python中成功调用def function-这是怎么回事? Python代码 class Parent: def __new__(self): print(f"I am the real parent co…

linux中统计java数量,linux 统计当前目录下文件数

查看当前目录下文件的个数ls -l | grep "^-" | wc -l查看当前目录下文件的个数,包括子目录里的。ls -lR| grep "^-" | wc -l查看某目录下文件夹(目录)的个数,包括子目录里的。ls -lR| grep "^d" | wc -l某目录下以.js结尾…

zbrush 添加纹理贴图_想学习3D游戏模型,3Dmax、MAYA和ZBrush都需要掌握吗?

想从事游戏行业的建模的话,模型和贴图的知识都得学,MAYA和3DMAX只能说是基本要学的,Zbrush能够提升个人价值,之后能给你建好的模型做出好看的贴图,才能算是一个游戏建模方面能干活的合格从业人员。新手入门的话&#x…

linux 连接wifi不稳定,rtl8188ce 无线网不稳定终极解决方案 - 哆啦比猫的技术瞎扯 - Arch Linux · ドラえもん · 实时绘制...

先容我废话据说 realtek 的无线网卡就这个系列问题多多。以前连接不太稳定,但不会频繁掉线就凑活用了。自从不知哪次升级以来,掉线越来越频繁,最后已经发展到 10秒必掉 了,以至于要上网就得拼命到终端里重连网络。网上也有各种解决…

file.getpath_Java中File的getPath(),getCanonicalPath()和getAbsolutePath()之间的区别...

file.getpathFile API在Java中非常重要,因为它使文件系统可以访问Java程序。 尽管Java的文件API丰富,但是使用它们时仍需要了解很多细节。 关于文件路径的常见查询程序员之一是getPath() , getCanonicalPath()和getAbsolutePath()方法之间的区…

为什么python代码运行不了_为什么Python代码能运行但是PyCharm给我画红线?

PyCharm在遇到模块找不到时,会使用红色波浪线提醒开发者。这本来是一个非常好的功能,但却由于另外一个问题,会给一些Python初学者造成困扰。 这一篇文章,我们讲讲工作区导致的这个问题。 首先我们创建一个login.py文件&#xff0c…

linux 在线帮助,linux获取在线帮助

Linux系统的帮助文档非常丰富。帮助手册提供命令的使用说明。比如你若是想了解ls命令的用法,只需运行:$ man ls帮助手册旨在提供基础知识和参考信息,有时会有一些实例和交叉索引,但是基本没有那种教程式的文档。帮助手册会按系统排…

python的计算_python 计算方位角实例(根据两点的坐标计算)

知道两点坐标,怎么计算两点方向的方位角? 答:首先计算坐标增量dx,dy(两个对应坐标分量相减,终点的减始点的)。 若dx,dy中有一个为零时,根据另一个的正负决定方位角(0,90,…

linux中samba详解,详解linux系列之samba的安装及配置

上篇博文中我介绍了FTP,今天我们来介绍一下samba实现文件共享。这个比FTP更好点,因为对用户的权限可以通过samba权限和系统权限交叉使用,取最严格的。可以让windows更容易的从linux系统上存取文件,还有samba也可以让linux上面的打…

saml2_向SAML响应中添加自定义声明–(如何为WSO2 Identity Server编写自定义声明处理程序)...

saml2总览 最新版本的WSO2 Identity Server(版本5.0.0)配备了“应用程序身份验证框架”,该框架提供了很大的灵活性,可以对使用异构协议的各种服务提供商的用户进行身份验证。 它具有几个扩展点,可用于满足企业系统中常…

python做股票分析_利用Python进行股票投资组合分析(调试)

pythonsp500-robo-advisor-edition Python for Financial Analyses 需要的镜像文件和数据--Robo Advisor edition. 小结 "Python for Finance: Robo Advisor Edition" 这一版本的镜像包括Jupyter notebook和Python脚本,以及用pandas通过Jupyter notebook构…

c语言程序求一一组数平均值,编写求一组整数的和与平均值的程序

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼-----------------------------------------------------[习题6-1]编写求一组整数的和与平均值的程序。-----------------------------------------------------[分析]循序渐进,从易到难,分解为下列问题群。…

使用Apache Kafka,Kubernetes和Envoy,Istio,Linkerd的服务网格和云原生微服务

微服务架构不是免费的午餐 ! 微服务需要解耦,灵活,操作透明,数据感知和弹性。 过去几年的大多数材料仅讨论具有紧密耦合且不可扩展的技术(如REST / HTTP)的点对点体系结构。 这篇博客文章介绍了Apache Kafk…

python缩写词_如果连这10个Python缩写都不知道,那你一定是Python新手!

在本文中,我将告诉大家一些容易忽视的Python编程原理、规则和一些有趣的事实。 简介 对于许多开始学习编程的人来说,Python已经成为他们的首选。Python有非常直观的语法和支持动态类型的灵活性。此外,它是一种解释语言,这使得使用…