Go语言变量创建的五种方法
怎么入门Golang编程?需要学习哪些知识点?这是新手们刚接触编程时常见的问题;下面golang学习网就来给大家整理分享一些知识点,希望能够给初学者一些帮助。本篇文章就来介绍《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) }
补充:本内容主要讲了GO语言快速的5个特征:
- 值存储(有效的值处理和值存储,内存消耗少);
- 函数调用(采用Inlining内联优化技术)
- 强制的垃圾回收机制(转义化分析,如果没有引用,则进行回收);
- Go进程
- 堆栈管理(若旧内存太小,会重新分配新的大的堆栈,并复制旧内容到新内容中去)
总结
以上所述是小编给大家介绍的Go语言五种变量创建的方法,希望对大家有所帮助!
好了,本文到此结束,带大家了解了《Go语言变量创建的五种方法》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多Golang知识!

- 上一篇
- golang使用http client发起get和post请求示例

- 下一篇
- go语言实现markdown解析库的方法示例
-
- 典雅的黑夜
- 赞 ??,一直没懂这个问题,但其实工作中常常有遇到...不过今天到这,看完之后很有帮助,总算是懂了,感谢作者大大分享技术文章!
- 2023-02-02 17:12:16
-
- 123654
- 这篇技术贴真及时,太细致了,受益颇多,码住,关注up主了!希望up主能多写Golang相关的文章。
- 2023-01-29 20:37:44
-
- 俏皮的画板
- 细节满满,收藏了,感谢老哥的这篇文章,我会继续支持!
- 2023-01-24 08:08:08
-
- 细心的冬瓜
- 太给力了,一直没懂这个问题,但其实工作中常常有遇到...不过今天到这,帮助很大,总算是懂了,感谢大佬分享博文!
- 2023-01-23 01:23:54
-
- 生动的抽屉
- 这篇技术文章太及时了,师傅加油!
- 2023-01-22 10:47:04
-
- 大瓶可乐1989
- 这篇博文真是及时雨啊,太细致了,感谢大佬分享,码起来,关注大佬了!希望大佬能多写Golang相关的文章。
- 2023-01-14 02:13:08
-
- 眯眯眼的荷花
- 这篇文章出现的刚刚好,细节满满,很棒,已加入收藏夹了,关注大佬了!希望大佬能多写Golang相关的文章。
- 2023-01-10 07:20:04
-
- 会撒娇的香菇
- 很详细,码起来,感谢作者大大的这篇文章内容,我会继续支持!
- 2023-01-09 04:01:41
-
- Golang · Go教程 | 4小时前 |
- Go监控CPU使用率技巧分享
- 132浏览 收藏
-
- Golang · Go教程 | 4小时前 |
- Golang端口复用与负载均衡配置
- 100浏览 收藏
-
- Golang · Go教程 | 4小时前 |
- Go语言设计模式:打造优雅代码架构
- 416浏览 收藏
-
- Golang · Go教程 | 4小时前 |
- Golang字符串拼接优化:strings.Builder vs +性能对比
- 198浏览 收藏
-
- Golang · Go教程 | 5小时前 |
- GolangGOPROXY设置教程:加速依赖下载
- 214浏览 收藏
-
- Golang · Go教程 | 5小时前 |
- Golang自定义包与模块创建指南
- 207浏览 收藏
-
- Golang · Go教程 | 5小时前 |
- GolangTCP服务器开发教程与通信实例
- 424浏览 收藏
-
- Golang · Go教程 | 5小时前 |
- Golang微服务gRPC负载均衡解析
- 249浏览 收藏
-
- Golang · Go教程 | 5小时前 |
- Go函数表与Switch性能对比解析
- 123浏览 收藏
-
- Golang · Go教程 | 5小时前 |
- Golang搭建gRPC服务:proto定义与生成详解
- 119浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 514次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 499次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 484次学习
-
- AI Mermaid流程图
- SEO AI Mermaid 流程图工具:基于 Mermaid 语法,AI 辅助,自然语言生成流程图,提升可视化创作效率,适用于开发者、产品经理、教育工作者。
- 645次使用
-
- 搜获客【笔记生成器】
- 搜获客笔记生成器,国内首个聚焦小红书医美垂类的AI文案工具。1500万爆款文案库,行业专属算法,助您高效创作合规、引流的医美笔记,提升运营效率,引爆小红书流量!
- 655次使用
-
- iTerms
- iTerms是一款专业的一站式法律AI工作台,提供AI合同审查、AI合同起草及AI法律问答服务。通过智能问答、深度思考与联网检索,助您高效检索法律法规与司法判例,告别传统模板,实现合同一键起草与在线编辑,大幅提升法律事务处理效率。
- 674次使用
-
- TokenPony
- TokenPony是讯盟科技旗下的AI大模型聚合API平台。通过统一接口接入DeepSeek、Kimi、Qwen等主流模型,支持1024K超长上下文,实现零配置、免部署、极速响应与高性价比的AI应用开发,助力专业用户轻松构建智能服务。
- 740次使用
-
- 迅捷AIPPT
- 迅捷AIPPT是一款高效AI智能PPT生成软件,一键智能生成精美演示文稿。内置海量专业模板、多样风格,支持自定义大纲,助您轻松制作高质量PPT,大幅节省时间。
- 633次使用
-
- Go语言中的变量和常量
- 2022-12-27 125浏览
-
- Golang实现文件夹的创建与删除的方法详解
- 2022-12-24 253浏览
-
- Go 实现 WebSockets之创建 WebSockets
- 2022-12-29 397浏览
-
- Go语言的变量定义详情
- 2022-12-23 328浏览
-
- Golang语言的多种变量声明方式与使用场景详解
- 2023-01-22 451浏览