【go入门】变量

embedded/2024/9/29 11:20:19/

目录

  • 前言
  • 变量
    • 变量声明
      • 指定变量类型,如果没有初始化,默认为零值,零值是变量没有初始化系统默认的值
      • 根据值自行判断变量类型
      • := 声明变量
      • 多变量声明
  • 注意事项
  • 变量的生命周期

前言

本专栏将直接从go语言的内容开始,不会介绍go语言的前世今生以及go语言环境的安装以及配置。

变量

go语言变量名由字母、数字、下划线组成,不能以数字开头。声明变量的一般形式是var关键字。比如我想声明一个age变量,它是整型:

var age int

也可以同时声明多个变量

var age1, age2 int
//demo1
package mainimport "fmt"func main() {var a string = "Hello World!"fmt.Println(a)var b, c int = 1, 2fmt.Println(b, c)
}

变量声明

指定变量类型,如果没有初始化,默认为零值,零值是变量没有初始化系统默认的值

//demo2
package mainimport "fmt"func main() {var a string = "Hello" //声明一个变量并初始化fmt.Println(a)var b int //没有初始化则为零值fmt.Println(b)var c bool //bool的默认值是falsefmt.Println(c)
}

结果是

Hello
0
false

数值类型的默认值是0,布尔类型是false,字符串为""(空字符串)

根据值自行判断变量类型

也就是说,你可以直接这样写:

var d = 1

它会自动判断该变量是 int 型

:= 声明变量

这样声明变量相当于直接省略了 var 和 类型

f := 6 //var f int = 6

如果变量已经用 var 声明过了,再使用 := 就会产生编译错误

//错误
var f int //声明1次
f := 6 //var f int = 6,又声明一次
//demo3
package mainimport "fmt"func main() {g := "ni hao"fmt.Println(g)
}

多变量声明

//demo4
package mainimport "fmt"func main() {var a, b, c int = 1, 2, 3fmt.Println(a, b, c)var d, e, f = 4, 5, 6fmt.Println(d, e, f)g, h, i := 7, 8, 9 //这种方式只能再函数体中出现fmt.Println(g, h, i)
}

上面的方式适用于非全局变量,也可以叫局部变量
下面这的适用于声明全局变量

//demo5
package mainimport "fmt"var x, y int
var (a intb bool
)
var c, d int = 1, 2func main() {e := "hello" //只能再函数体中使用fmt.Println(x, y, a, b, c, d, e)
}

注意事项

  • 变量初始化时可以省略变量类型由系统自动判断,那么使用 var 关键字就有些多余,因此可以简写:
a := 10

首选这种方式声明变量,但是这种方式只能再函数体中使用

  • 在相同的代码块中,不能对相同名称的变量使用初始化声明,例如:
a := 10
a := 20 //错误

但是可以

a = 20

这是给变量赋予了一个新的值,并没有再次声明。

  • 如果声明了一个局部变量,但是没有使用,也会编译错误,单纯地赋值也是不行的,必须被使用。
//demo6
package mainimport "fmt"func main() {str1 := "abc"fmt.Println("hello", str1) //必须使用str1,否则会报错
}

全局变量是允许声明了但不使用

package mainimport "fmt"var str2 = "world" //可以不使用func main() {str1 := "abc"fmt.Println("hello", str1) //必须使用str1,否则会报错
}
  • 多类型变量也可以在同一行赋值
//demo7
package mainimport "fmt"func main() {//var a, b = 1, 2//var c, d = "hello", "world"//fmt.Println(a, b, c, d)a, b, c, d := 1, 2, "hello", "world" //多种类型变量在同一行赋值fmt.Println(a, b, c, d)
}
  • 空白标识符 _ 也被用于抛弃值,相当于只写变量,但得不到它的值
_, b = 1, 2
//demo8
package mainimport "fmt"func main() {a, b := 0, 0fmt.Println(a, b)_, b = 1, 2fmt.Println(a, b)
}

结果是

0 0
0 2

在go语言中必须使用所有被声明的变量,但有时候不需要返回这个函数的所有返回值。

变量的生命周期

全局变量的生命周期是程序的存活时间
在不发生内存逃逸(后面文章会讲到)的情况下,局部变量的生命周期是函数存活的时间

//demo9
package mainimport "fmt"var a1 = 1// b2出了这个函数就死了,它的生命周期就是test函数的存活时间
func test() {b2 := 2fmt.Println(b2)
}
func main() {var c3 = 3fmt.Println(a1, c3) //这里输出b2就会出错test()
}

http://www.ppmy.cn/embedded/119319.html

相关文章

[论文精读]TorWard: Discovery, Blocking, and Traceback of Malicious Traffic Over Tor

期刊名称:IEEE Transactions on Information Forensics and Security 发布链接:TorWard: Discovery, Blocking, and Traceback of Malicious Traffic Over Tor | IEEE Journals & Magazine | IEEE Xplore 中文译名:TorWard:…

AdaptIoT——制造业中使用因果关系的自我标签系统

0.概述 论文地址:https://arxiv.org/abs/2404.05976 在许多制造应用中,机器学习(ML)已被证明可以提高生产率。针对制造业应用提出了一些软件和工业物联网(IIoT)系统,以接收这些 ML 应用。最近&…

yakit使用教程(一,下载并进行基础配置)

一,yakit简介 YAKIT(Yet Another Knife for IT Security)是一款网络安全单兵工具,专为个人渗透测试员和安全研究人员设计。它整合了一系列实用的安全工具,例如密码破解工具、网络扫描器、漏洞利用工具等,帮…

uni-app+vue3+pina实现全局加载中效果,自定义全局变量和函数可供所有页面使用

首先自定义一个加载中组件 ccloading.vue <template><view class"request-loading-view" v-if"loadingShow"><view class"loading-view"><image class"loading-img" :src"loading" mode"aspectF…

WebView is not allowed in privileged processes

1、现象 最近客户提出一个问题&#xff0c;应用使用webview加载网页时&#xff0c;提示“For security reasons, WebView is not allowed in privileged processes”&#xff0c;然后网页无法加载。2、分析 通过该提示&#xff0c;在源码中找到了报出该提示的所在之处。出于安全…

pytorch ----【输入张量.data.size()/输入张量.size()】的使用

import torch test_data torch.randn(1, 12, 32, 32) batchsize, num_channels, height, width test_data.data.size() 在提供的代码中&#xff0c;test_data 是一个形状为 (1, 12, 32, 32) 的随机张量&#xff0c;表示一个批次&#xff08;batch&#xff09;中有 1 张图像&…

Reis数据库及key的操作命令汇总

管理命令 命令含义BGREWRITEAOF异步执行一个 AOF&#xff08;AppendOnly File&#xff09; 文件重写操作BGSAVE在后台异步保存当前数据库的数据到磁盘CLIENT关闭客户端连接CLIENT LIST获取连接到服务器的客户端连接列表CLIENT GETNAME获取连接的名称CLIENT PAUSE在指定时间内终…

npm 源切换以及添加 使用工具 nrm 使用方法

nrm (npm Registry Manager) 是一个用于管理和切换 npm 源的命令行工具&#xff0c;可以帮助开发者更方便地在不同的 npm 源之间切换&#xff0c;特别是对于需要频繁切换源的用户来说非常有用。以下是 nrm 的基本使用方法&#xff1a; 1. 安装 nrm 首先&#xff0c;你需要全局…