首页 > 其他分享 >Go 变量声明

Go 变量声明

时间:2023-12-25 11:31:36浏览次数:26  
标签:变量 int fmt var Go 声明 name

变量声明

Go 中使用 var 或者 const 关键字声明变量:

var <变量名> [变量类型]

变量赋值的格式是:

<变量名> = <值, 表达式, 函数等>

声明和赋值通常会合起来写:

var <变量名> [变量类型] = <值, 表达式, 函数等>

比如声明一个 string 类型的 name 变量:

var name string = "golang"

变量还可以分组声明:

var (
  i int
  j float32
)

分组声明并赋值:

var (
  age  int  = 18
  name string = "golang"
)

可以在同一行中声明多个变量和赋值:

var a, b, c int = 1, 2, 3

需要注意的是,在函数内声明的变量必须被使用,否则会报错:

Go 变量声明_golang

类型推断

变量声明时可以省略类型声明,编译器会根据值自动推断出类型,这个就叫类型推断。

package main

import (
    "fmt"
    "reflect"
)

func main() {
    var name = "golang"

    fmt.Println(reflect.TypeOf(name)) // 打印结果为 “string”
}

省略 var

在函数中声明变量时可以省略 var,但是 = 要换成 :=

name := "golang"

也就是,从最初的:

var name string = "golang"

逐步省略为:

var name = "golang"
name := "golang"

在全局中声明变量必须使用 var 声明,而不能省略。

特殊变量下划线 "_"

下划线 _ 作为变量,可以理解为一个回收站,将一个值赋值给 _ ,就相当于将此值扔进了回收站,在接下来的程序运行中这个值就不存在了。

func main() {
    var a, _, b = 10, 20, 30
    fmt.Println(a) // 10
    fmt.Println(b) // 30
}

变量的类型转换

Go 中只有显式类型转换,不存在隐式类型转换

比如,将 int 类型的变量转为 float32 类型的:

func main() {
    var a int = 1
    b := float32(a)

    fmt.Println(b) // 1
    fmt.Println(reflect.TypeOf(b)) // float32
}

反之,将一个float32 类型的变量转为 int 类型时,小数部分会被丢弃,而造成精度损失:

func main() {
    var c = 1.02
    d := int(c)

    fmt.Println(d) // 1
    fmt.Println(reflect.TypeOf(d)) // int
}

类型转换只能发生在两种兼容的类型之间,如果将一个 int 类型的数字转为 bool 类型,则会报错:

Go 变量声明_golang_02

变量的可见性规则

大写字母开头的变量是公共变量,是可导出的,也就是其他包可以读取的

小写字母开头的变量是私有变量,是不可导出的。

小结

本文介绍了 Go 语言中变量的声明,包括最普通的声明方式,分组声明的方式,以及同时声明多个变量的方式。

在声明局部变量时,可以通过类型推断和简写的方式,更简洁的声明一个变量。

标签:变量,int,fmt,var,Go,声明,name
From: https://blog.51cto.com/u_12382805/8965293

相关文章

  • 《Go语言高级编程》学习笔记之第一章
    以下主要是记录自己看曹大的《Go语言高级编程》一书,记录下自己的学习记录以及自己的理解,仅做记录使用。原文链接1、语言基础1.3数组、字符串和切片1.3.1数组varc=[...]int{2:3,1:2}//定义长度为3的int型数组,元素为0,2,3vard=[...]int{1,2,4:......
  • Golang压测ws
    packagemainimport( "fmt" "log" "sync" "time" "github.com/gorilla/websocket")funcmain(){ //设置要压测的WebSocket服务地址 url:="ws://192.168.252.128:8080/" //设置并发请求数量 concurrency:=1......
  • golang 的github.com/sony/sonyflake IP问题bug
    使用容器部署golang项目时,饮用了github.com/sony/sonyflake生成snowid,初始化时不传入任何参数:SnowId=sonyflake.NewSonyflake(sonyflake.Settings{})在容器的ip设置设置为类似:192.18.10.8时,调用生成id存在空指针报错。snowId,err:=global_conf.SnowId.NextID()处理......
  • 如何让 Go 反射变快
    如何让Go反射变快小白debug 2023-12-2507:43 发表于上海 1人听过 以下文章来源于Golang技术分享 ,作者机器铃砍菜刀Golang技术分享.专注于Go语言知识分享最近读到一篇关于Go反射的文章,作者通过反射给结构体填充字段值的案例,充分利用Go的各种内在机理,逐......
  • 变量与基本数据类型
    一,程序员的自我修养---注释注释:指在程序代码中对程序进行解释说明的文字 他只能给人类阅读不能给机器执行作用:可以用来写一些代码的思路的解释,帮助他人和未来的自己理解代码的意思1.1单行注释python使用#号作为单行注释的符号语法格式#注释内容#print(555)说......
  • 微信小程序从django后端获取数据、获取登录用户名
    关键词:微信小程序、从后端获取数据、django后端、传递登录用户名、获取当前登录用户名/***生命周期函数--监听页面加载*/onLoad(options){letuser=wx.getStorageSync('user');varusername=user.nickName;varcasename=options.casename;......
  • SRE Google运维解密 4-9章
    第四章服务质量目标如果不详细了解服务中各种行为的重要程度,并且不去度量这些行为的正确性的话,就无法正确运维这个系统,更不要说可靠低运维了。那么,不管是对外服务,还是内部API,我们都需要制定一个针对用户的服务质量目标,并且努力去达到这个质量目标。服务质量指标(SLI)服务质量目......
  • Golang 常用工具记录
    Golang常用工具记录1golang类1.1日常使用的copier复制结构体到另外一个结构体等等类似的功能asynqGo中简单、可靠、高效的分布式任务队列,使用redis做为brokermachineryMachinery是基于分布式消息传递的异步任务队列/作业队列。restyresty是Go语言的一个H......
  • 【flink番外篇】4、flink的sink(内置、mysql、kafka、redis、clickhouse、分布式缓存、
    文章目录Flink系列文章一、maven依赖二、Jdbc/mysql示例1、maven依赖2、实现1)、userbean2)、内部匿名类实现3)、lambda实现4)、普通继承RichSinkFunction实现5)、完整代码3、验证本文介绍了Flink将数据sink到mysql中,其实是通过jdbc来将数据sink到rmdb中,mysql是一个常见的数据库,故......
  • Go编程基础教程:Go容器化技术
    作者:禅与计算机程序设计艺术1.背景介绍目前互联网服务开发已经从单体应用模式升级到微服务架构模式。在微服务架构模式下,服务之间会相互调用,为了更好地管理和调优这些分布式系统,需要对其进行容器化,使得各个服务可以独立部署、资源分配、隔离等方面更加灵活高效。本文将通过Go语言......