惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Hugging Face - Blog
Hugging Face - Blog
量子位
H
Help Net Security
Microsoft Azure Blog
Microsoft Azure Blog
MongoDB | Blog
MongoDB | Blog
小众软件
小众软件
爱范儿
爱范儿
博客园 - 【当耐特】
Vercel News
Vercel News
S
SegmentFault 最新的问题
M
MIT News - Artificial intelligence
F
Fortinet All Blogs
Apple Machine Learning Research
Apple Machine Learning Research
GbyAI
GbyAI
博客园 - 叶小钗
博客园_首页
V
Visual Studio Blog
宝玉的分享
宝玉的分享
B
Blog
MyScale Blog
MyScale Blog
C
Check Point Blog
博客园 - 三生石上(FineUI控件)
L
LangChain Blog
V
V2EX

博客园_首页

Linux实操--组管理、权限管理和定时任务 Java + EasyExcel 实现单个接口导出多个Excel Mem0 源码解析系列(二):提示词工程的深度剖析 Openclaw TaskFlow究竟是什么?和普通Skill技能有什么区别 博文阅读密码验证 - 博客园 嘉立创开源:应该是全网MicroPython教程最多的开发板 Hermes Agent 集成实践:从协议到生产 2026年AI编程工具横评:Cursor、Codex、Claude Code、Zed、Windsurf Java程序员必看的RAG入门教程 2026 AI效率神器:Superpowers + Claude Code 保姆级教程 本地大模型部署全攻略:从 0 到 1 玩转 Ollama 【从0到1构建一个ClaudeAgent】内存管理-上下文压缩 .NET 高级开发 | 设计、实现一个事件总线框架 电子小白入门之NE555 3. WorkBuddy:隐藏玩法,一键召唤专家,让 AI 以"专家身份"给你干活 和AI一起搞事情#3:Claude Teammate 游戏开发翻车实录 【OpenClaw】通过 Nanobot 源码学习架构---(7)Memory C# .NET 周刊|2026年3月3期 我在 Debian 11 上把 K8s 单机搭起来了,过程没你想的那么顺(/opt 目录版) 深度学习进阶(七)Data-efficient Image Transformer CLI+Skill搭建浏览器AI自动化框架,告别一切重复枯燥任务 告别Token账单无底洞:OpenClaw本地部署,重塑企业数据主权的唯一解 FastAPI+Vue:文件分片上传+秒传+断点续传,这坑我帮你踩平了! SBTI 爆火后,我做了个程序员版的 CBTI。。已开源 + 附开发过程 多模态检索开始进入工程期:用 Sentence Transformers 搭建可落地的 Multimodal RAG 100多行代码实现一个最简单的Agent(用ReAct) Claude Code 通关手册(八):推荐 5 个 Hooks,代码质量提升 3 倍 老板:“有人截图了!”。安全部门:“收到,马上查暗水印!” - why技术 技术之外,皆是人间 C#/.NET/.NET Core技术前沿周刊 | 第 69 期(2026年4.01-4.12)
Go语言中的变量:全局变量-局部变量-短变量-匿名变量
何人陪我共长生 · 2026-04-30 · via 博客园_首页

变量

Go语言中的每一个变量都有自己的类型,并且变量必须经过声明才能开始使用。
声明的变量必须使用,否则会报错。这一点与js不相同。

GO语言中变量的声明

Go语言变量名由字母、数字、下划线组成(3种字符),其中首个字符不能为数字。
Go语言中关键字和保留字都不能用作变量名。[重要]
Go语言中的变量需要声明后才能使用,同一作用域内不支持重复声明。
并且Go语言的变量声明后必须使用(这一点和js不相同)。

如何声明变量

var 变量名称 类型

变量声明后没有赋值的话,值为空

package main
// 引入打印的包
import ("fmt")
// 入口函数
func main()  {
	// 输出语句
	var userName string
	fmt.Println("userName", userName) // 值是空
}

image

第一种方式去初始化(定义变量和赋值分为2步)

package main
// 引入打印的包
import ("fmt")
// 入口函数
func main()  {
	// 第一种方式初始化变量
	var userName string
	userName ="张三"
	fmt.Println(userName)
}

第2种方式定义变量(定义变量和赋值合并成为1步)

package main
// 引入打印的包
import ("fmt")
// 入口函数
func main()  {
	// 第2种方式初始化变量:定义变量和赋值合并成为1步
	var userName string ="张三"
	fmt.Println(userName)
}

第3种方式:自动推导类型,不需要你去声明类型

package main
// 引入打印的包
import ("fmt")
// 入口函数
func main()  {
	// 第3种方式:自动推导类型,不需要你去声明类型
	var userName ="张三"
	fmt.Println(userName)
}

一次性定义多个变量

// 第一种,这种变量名称1,变量名称2类型是相同的
var变量名称1,变量名称2 类型

// 第二种:变量名称1,变量名称2 类型不相同
var (
  变量名称1 类型
  变量名称2 类型
)
package main
import ("fmt")
// 入口函数
func main()  { 
   // 第二种:变量名称1,变量名称2 类型不相同
	var (
	  userName string = "张三"
	  ageNum int =19
	)
	fmt.Println(userName, ageNum)
}

输出 张三 19

go语言可以自动推导数据类型,你声明变量且赋值的时,可以不用写数据类型

比如上面的例子,你声明变量的时候,有赋值。
因此。可以不用去写变量类型。
它回去自动推导

import ("fmt")
// 入口函数
func main()  {
// 声明变量且赋值的时,可以不用写数据类型
	var (
		userName  = "张三"
		ageNum  =19
	)
	fmt.Println(userName, ageNum)
}

短变量声明法

在函数内部,可以使用更简略的 := 方式声明并初始化变量。
注意:短变量只能用于声明局部变量,不能用于全局变量的声明。

变量 := 赋值

注意 := 左右两侧有空格

package main
import ("fmt")
// 入口函数
func main()  {
	// 短变量声明法
	userName := "张三" // 等价与 var userName = "张三"
	fmt.Println(userName)
}

短变量一次声明多个变量

package main
import ("fmt")
// 入口函数
func main()  {
	// 声明变量且赋值的时,可以不用写数据类型
	userName,ageNum,userAddress:= "张三", 18, "在xx城市"
	fmt.Println(userName, ageNum, userAddress)
}

全局变量、短变量只能声明局部变量

package main
import ("fmt")
// 声明了一个全局变量且有赋值。不用声明类型
var g="全局变量"
// 入口函数
func main()  {
	// 声明变量且赋值的时,可以不用写数据类型
	userName,ageNum,userAddress:= "张三", 18, "在xx城市"
	fmt.Println("短变量只能声明局部变量",userName, ageNum, userAddress)
	fmt.Println(g)
}

匿名变量

匿名变量在使用多重赋值时,
如果想要忽略某个值,可以使用匿名变量(anonymous variable)
匿名变量用一个下划线_表示
匿名变量不占用命名空间,不会分配内存,所以匿名变量之间不存在重复声明
也就是说:下划线_不存在重复声明

package main
import ("fmt")

func backInfo()(string, int){
	return "zhangsan", 100
}

// 入口函数
func main()  {
	//获取全部变量
	var userName,age = backInfo()
	fmt.Println(userName, age)
	// 假设现在我们不需要返回值 age,使用匿名变量
    var name, _ =backInfo()
	fmt.Println(name)
	// 匿名变量不占用命名空间,不会分配内存,所以匿名变量之间不存在重复声明
	var _, ccc =backInfo()
	fmt.Println(ccc)
}