首页 > 其他分享 >go语言变量定义及类型

go语言变量定义及类型

时间:2023-05-22 15:22:54浏览次数:39  
标签:变量 int var 类型 go 标识符 定义

变量

变量:赋值后,可以改变值的标识符。 建议采用驼峰命名法。

var a // 错误,无法推测类型
var b int // 正确,只声明,会自动赋为该类型的零值
var c, d int // 正确,声明连续的同类型变量,可以一并声明,会自动赋为该类型的零值
var b = 200 // 错误,b多次声明,第二行已经声明过了
// 初始化:声明时一并赋初值
var a int = 100 // 正确,标准的声明,并初始化
var b = 200     // 正确,编译根据等式右值推导左边变量的类型
var c = nil // 错误,非法,nil不允许这样用
var d, e int = 11, 22 // 正确
// 用var声明,立即赋值,或之后赋值
var b int // 正确,只声明,会自动赋为该类型的零值
b = 200
b = 300
b = "4" // 错误,类型错误
// 批量赋值
var a int, b string // 错误,批量不能这么写
var ( // 正确
    a int
    b string
)
var ( // 错误,变量必须有类型,但没有给类型,也不能使用值来推导类型
    a
    b
)
var a int, b string = 111, "abc" // 错误,多种类型不能这么写,语法不对
var (
    a int    = 111
    b string = "abc"
) // 正确,建议批量常量、变量都这么写
var (
    a = 111
    b = "abc"
) // 正确,类型推导
// 短格式 Short variable declarations
// _ 空白标识符,或称为匿名变量
a := 100
b, c := 200, "xyz"
// 交换
b, c = c, b
d, _, f := func() (int, string, bool) { return 300, "ok", true }()

_下划线

是空白标识符(Blank identifier), 官方文档:https://golang.google.cn/ref/spec#Declarations_and_scope https://golang.google.cn/ref/spec#Blank_identifier

下划线和其他标识符使用方式一样,但它不会分配内存,不占名词空间;

为匿名变量赋值,其值会被抛弃,因此,后续代码中不能使用匿名变量的值,也不能使用匿名变量 为其他变量赋值。

短格式

使用 := 定义变量并立即初始化 只能用在函数中,不能用来定义全局变量 不能提供数据类型,由编译器来推断。

 

 零值

变量已经被声明,但是未被显式初始化,这是变量将会被设置为零值。其它语言中,只声明未初始化的 变量误用非常危险,但是,Go语言却坚持“零值可用”理念。

int为0
float为0.0
bool为false
string为空串""(注意是双引号)
指针类型为nil

标识符本质

每一个标识符对应一个具有数据结构的值,但是这个值不方便直接访问,程序员就可以通过其对应的标 识符来访问数据,标识符就是一个指代。一句话,标识符是给程序员编程使用的。

变量可见性

1、包级标识符: 在Go语言中,在.go文件中的顶层代码中,定义的标识符称为包级标识符。如果首字母大写,可在包外 可见。如果首字母小写,则包内可见。

// 无类型常量定义
var a = 20   // int
var b = 3.14 // float64
// 指定类型
var a int32 = 20
var b float32 = 3.14
// 延迟初始化需要指定类型,用零值先初始化,因为不给类型,不知道用什么类型的零值
// 有相同关系的声明可以使用同一批定义
var (
 name string
 age  int
)

使用建议:

顶层代码中定义包级标识符,首字母大写作为包导出标识符,首字母小写作为包内可见标识符; const定义包级常量,必须在声明时初始化; var定义包级变量; 可以指定类型,也可以使用无类型常量定义。 延迟赋值必须指定类型,不然没法确定零值。 有相关关系的,可以批量定义在一起, 一般声明时,还是考虑“就近原则”,尽量靠近第一次使用的地方声明。

2、局部标识符: 定义在函数中,包括main函数,这些标识符就是局部标识符。

使用建议:

在函数中定义的标识符; const定义局部常量; var定义局部变量; 可以指定类型,也可以使用无类型常量定义。 延迟赋值必须指定类型,不然没法确定零值; 有相关关系的,可以批量定义在一起 在函数内,直接赋值的变量多采用短格式定义。

布尔型

类型bool,定义了2个预定义常量,分别是true、false。

数值型

复数:complex64、complex128

整型:

与其他语言不同,即使同是整型这个大类中,在Go中,也不能跨类型计算。需强制类型转换,把一个值从一个类型强制转换到另一种类型,有可能转换失败。

长度不同:int8、int16(C语言short)、int32、int64(C语言long)

长度不同无符号:uint8、unit16、uint32、uint64;byte类型,它是uint8的别名;rune类型,它是int32的别名;

自动匹配平台:int、uint int类型它至少占用32位,但一定注意它不等同于int32,不是int32的别名。要看CPU,32位 就是4字节,64位就是8字节。但是,也不是说int是8字节64位,就等同于int64,它们依然是不同类型!

进制表示:

十六进制:0x10、0X10

八进制:0o10、0O10。010也行,但不推荐

二进制:0b10、0B10

 

 

 

标签:变量,int,var,类型,go,标识符,定义
From: https://www.cnblogs.com/caibao666/p/17420725.html

相关文章

  • 通信LOGO隐秘史(续集:运营商篇)
    大家好,我是小枣君。今天,我们继续聊通信企业的LOGO发展史。上期(链接),我们讲了设备商的LOGO。这期,我们讲讲国内运营商的LOGO。我们这次按照时间顺序,从头开始介绍。1896年,清朝光绪皇帝批准开办大清邮政官局,从此拉开了中国现代邮政业务的序幕。大清邮政当时的大清邮政,有自己的邮票,却没有......
  • 通信LOGO隐秘史(设备商篇)
    今天这篇文章,小枣君和大家聊聊LOGO。LOGO大家应该都懂,就是“标志、标识、徽标”的意思。说白了,就是一些图案,用于标识公司,代表品牌形象。我们通信行业的很多LOGO,大家天天见,却不知道,背后还有很多有趣的故事。所以,我来给大家介绍介绍。首先第一个,我们来看看华为的红色大菊花。这些年,随......
  • 在Windows Server 2022中使用Microsoft Deployment Toolkit(MDT)时,可使用Rules(规则)文件
    在WindowsServer2022中使用MicrosoftDeploymentToolkit(MDT)时,可使用Rules(规则)文件来配置和自定义部署过程。以下是常见的Rules参数及其描述:UserDomain:指定要加入的域的名称。UserID和UserPassword:指定加入域所需的管理员帐户凭据。TimeZoneName:指定安装期间使用的时区。Jo......
  • 指针和地址变量
    理解指针和地址变量的区别,以及如何正确进行函数传参指针和地址变量的区别:指针是一种变量,它存储的是另一个变量的地址(内存地址)。指针通过存储地址来间接操作某个变量。2.地址变量是存储某个变量地址的普通变量。它直接存储地址这个数值。例如:inta=10;int*p=&a;......
  • django 计算两个TimeField的时差
    在Django中,你可以使用datetime模块来计算两个TimeField字段的时间差。以下是一个示例:fromdatetimeimportdatetime,timedelta#假设有两个TimeField字段time1=obj.time_field1time2=obj.time_field2#将时间字段转换为datetime对象datetime1=datetime......
  • django update_or_create
    update_or_create是Django中的一个方法,用于更新或创建数据库记录。它的作用是,如果数据库中存在符合指定条件的记录,则更新该记录的字段值;如果不存在符合条件的记录,则创建新的记录。使用update_or_create方法需要指定两个参数:defaults:一个字典,用于指定要更新或创建的字段及其对应......
  • MongoDB-怎么将csv数据导入mongodb数据库的某张表中
    背景介绍背景就是开发突然问我能不能往数据库导数据,然后只需要某几列的数据。我的第一想法是:用python脚本读取csv文件,将内容拼接成json格式的文本,然后用脚本的方式导入。后来发现我用的GUI工具就可以直接导入数据到数据库中。实现过程既然有工具能够直接导入,那肯定就用现成的工具导......
  • go web学习(四)
    中间件什么是中间件请求————>中间件————>Handler响应<————Middleware<————Handler创建中间件funcListenAndServe(addrstring,handlerHandler)errorhandler如果是nil:DefaultServeMuxtypeHandlerinterface{ ServeHTTP(ResponseWr......
  • 【Git学习】git log自定义格式
    定制自己常用格式:1、二进制作者时间提交备注gitlog–pretty=format:”%h-%an,%ar:%s”2、以图表形式查看远程提交记录gitlog–decorate–oneline–graph3、说明:常用的格式占位符写法及其代表的意义。选项说明%H提交对象(commit)的完整哈希字串%h提交对象的简短......
  • Django-验证码功能
    #安装django-simple-captchapipinstalldjango-simple-captcha#settings.pyINSTALLED_APPS=[#...'captcha',]#urls.pyfromcaptcha.viewsimportcaptcha_imagefromdjango.urlsimportpathfrom.viewsimportlogin_viewurlpatterns=[path(......