【go基础】变量声明

2023-11-01

1.第一个go语言程序

package main	//声明所属的包

import (	//
	"fmt"
)
func main(){
	fmt.Println("hello world")
}

go run ./hello.go #执行当前文件

输出:hello world

也可以构建可执行程序,然后执行可执行程序得到输出

go build ./hello.go
/hello.exe

输出结果:hello world

  • 第一行代码package main定义了包名。你必须在源文件中非注释的第一行指明这个文件属于哪个包,如:package main。package main表示一个可独立执行的程序,每个 Go 应用程序都包含一个名为 main 的包。

  • 下一行**import “fmt”**告诉 Go 编译器这个程序需要使用 fmt 包(的函数,或其他元素),fmt 包实现了格式化 IO(输入/输出)的函数。

  • 下一行func main()是程序开始执行的函数。main 函数是每一个可执行程序所必须包含的,一般来说都是在启动后第一个执行的函数(如果有 init() 函数则会先执行该函数)。

注意:这里面go语言的语法,定义函数的时候,‘{’ 必须和函数名在同一行,不能另起一行。

2.天生的并发基因

func gofunc(i int) {
	fmt.Println("goroutine", i, "......")
}
func main() {
	fmt.Println("begin func")
	for i := 0; i < 10000; i++ {
		go gofunc(i)
	}
	time.Sleep(time.Second)
}

在这里插入图片描述

3.变量声明

第一种,指定变量类型,声明后若不赋值,使用默认值为0

func godata() {
	var a int
	fmt.Printf("a=%d", a)
}
$go run data.go
a=0

第二种,根据初始值自行判定变量类型

func godata() {
	var b = "hello go"
	fmt.Printf("the type of b if %T,b=%s", b, b)
}
$go run ./hello.go
the type of b if string,b=hello go

第三种,省略var,注意:=左侧的变量不应该是已经声明过的,否则会导致编译错误【变量的生命周期为函数体类】

func godata() {
	c := 3.14
	fmt.Printf("the type of c is %T,c=%f", c, c)
}
$go run ./hello.go
the type of c is float64,c=3.140000
3.1多变量声明
var x, y int
var ( //这种分解的写法,一般用于全局变量
	a int
	b bool
)
var c, d int = 1, 2
var e, f = 122, "hello go"

func mult_func() {
	//这种不带声明格式变量,生命周期在函数体内
	g, h := 123, "我是一个字符类型的变量"
	fmt.Println(x, y, a, b, c, d, e, f, g, h)
}
$go run ./hello.go
0 0 0 false 1 2 122 hello go 123 我是一个字符类型的变量

4.常量和iota

常量的定义格式 const identifier [type] = value;其中可以省略变量类型type,让编译器可以根据变量的值推导其类型

显示声明类型定义:

const str string="hello go"

隐式类型定义

const b="hello go"
func const_data() {
	const length int = 20
	const width int = 10
	var area int
	area = length * width
	const a = "面积的大小为:"
	fmt.Println(a, area)
}
$go run ./hello.go
面积的大小为: 200

常量可以使用len(),cap(),unsafe.Sizeof()常量计算表达式的值

const (
	a = "abc"
	b = len(a)
	c = unsafe.Sizeof(a)
)
func main(){
    fmt.Println(a,b,c)
}
$go run ./hello.go
abc 3 16

字符串类型在 go 里是个结构体, 包含指向底层数组的指针和长度,这两部分每部分都是 8 个字节,所以字符串类型大小为 16 个字节。

1.优雅的iota变量

每一行的iota都会累加1,第一行的iota的默认值是0;同时,下一行的变量会继承上一行的计算方式

const (
	xx = 10 + iota
	yy
	zz = 2 * iota
	ww
)
const (
	a, b = iota + 1, iota + 2
	c, d
	e, f
	g, h = iota + 3, iota + 4
	i, k
)
func print() {
	fmt.Println("xx=", xx, "yy=", yy, "zz=", zz, "ww=", ww)
	fmt.Println("a=", a, "b=", b)
	fmt.Println("c=", c, "d=", d)
	fmt.Println("e=", e, "f=", f)
	fmt.Println("g=", g, "h=", h)
	fmt.Println("i=i", i, "k=", k)
}

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【go基础】变量声明 的相关文章

随机推荐

  • vue component使用,动态加载子组件,调用子组件方法

    1 vue component使用 component组件 单独拿出一个组件来专门进行切换使用 官方文档 https cn vuejs org v2 guide components html 动态组件 https cn vuejs org
  • GCN为什么是半监督学习?

    因为GCN那篇论文里面 数据集的划分是一部分有标签 一部分没标签 但是在使用图的连接信息的时候用到了图的邻接矩阵 所有这部分是用到了全部图的结构信息 而有一部分节点没有标签 所以作者才把论文名字命名为半监督学习
  • 5.1声道测试音乐_5分钟让你搞懂单声道和立体声的真正区别!

    大家好 我是音乐人顾颂 从今天开始 我将不定期的通过图文的方式向大家介绍一些关于音乐方面的一些小知识 希望在此和你共同探讨 共同进步 第二篇 单声道与立体声 当我们通过音频播放设备收听声音的时候 我们的大脑会根据左右耳接受到了声音信号的差异
  • 制造业数字化转型存在哪些问题

    数字时代 制造业数字化转型不再是一道 选择题 而是 必答题 但各地政府以及企业正面临 对颠覆程度认识不足 对变革速度心存侥幸 对投入成本估计过高 三个方面的问题 一是对制造业数字化的颠覆程度认识不足 数字化变革推动下 制造业产品的价值来源正
  • android 系统级应用和服务的启动流程

    activityManagerService java 1 systemRaady 收到systemReady 通知 2 AppGlobals getPackageManager getPersistentApplications STOC
  • Android 一个类搞定软键盘弹起手下监听

    内容来自https www jianshu com p 56b91640aa10 监听很灵敏 一 使用 new SoftKeyBroadManager linearLayout addSoftKeyboardStateListener ne
  • 十、Java中的数组

    数组 Array 计算机专业的小伙伴对这个词都不陌生 不是计算机专业的小伙伴也不用怕书源会为大家介绍清楚数组 Array 这个概念 1 数组是数据结构的一种 那么什么是数据结构呢 简单理解数据结构就是带有结构特性的数据元素的集合 2 那么回
  • 学习python: 模块的建立与发布

    简单的说 一个python文件就是一个模块 本文主要介绍以下3点 模块的建立及导入 包的建立及导入 发布和安装自定义模块 模块的建立及导入 我们在写c 或者c 时候 为了复用代码 总是将一系列相关的函数写在一个 c文件中 或者封装一个类写在
  • 微软 Windows 10 删除文件“您需要来自 Trustedinstaller 的权限”解决方法

    问题描述 在删除 Windows 10 文件 例如 WINDOWS BT 时弹出文件夹访问被拒绝 你需要来自 Trustedinstaller 的权限才能对此文件夹进行更改 操作步骤 1 右键文件夹 选择 属性 2 选择 安全 3 选择 高
  • [P3074

    题目描述 Farmer John s N cows 1 lt N lt 10 000 are conveniently numbered 1 N Each cow i takes T i units of time to milk Unfo
  • WebRTC源码分析四:视频模块结构

    转自 http blog csdn net neustar1 article details 19492113 本文在上篇的基础上介绍WebRTC视频部分的模块结构 以进一步了解其实现框架 只有了解了整体框架结构 对局部算法修改才能够胸有成
  • 小程序隐私保护授权处理方式之弹窗组件

    欢迎点击领取 前端面试题进阶指南 前端登顶之巅 最全面的前端知识点梳理总结 分享一个使用比较久的 小程序隐私保护授权弹窗组件 调用wx getUserProfile进行授权时 返回错误信息 errMsg getUserProfile fai
  • python 队列实现_Python进程间通信 multiProcessing Queue队列实现详解

    Python进程间通信 multiProcessing Queue队列实现详解 发布时间 2020 10 04 10 11 18 来源 脚本之家 阅读 125 一 进程间通信 IPC Inter Process Communication
  • windows 下 Redis 主从 读写分离

    本文转载至 http www cnblogs com zhangxiaoshuai p 6482853 html 下载windows版redis 没有官方的从 上下载 http github com ServiceStack redis w
  • 关于SpringBoot 接受Date类型以及返回时间格式的记录

    最近开始接触SpringBoot 不得不说他很强大 下面说说SpringBoot接受时间的问题 网上的方法很多 我就说说我自己的 接受时间 NotNull message 过期日不能为空 DateTimeFormat pattern yyy
  • Unity游戏性能分析最终指南 04

    本节将深入探讨Unity中各个分析工具和调试工具的功能 以下是分析工具 调试工具和静态分析工具之间的差异 分析工具对代码执行情况进行仪表化显示并收集时间数据 调试工具允许逐步执行程序 暂停和检查值 并提供许多其他高级功能 例如 Frame
  • 计算机网络之TCP三次握手

    文章目录 计算机网络之TCP三次握手 1 TCP三次握手过程 2 TCP三次握手原因 而不是两次 3 TCP三次握手原因 而不是四次 4 TCP三次握手能携带数据吗 5 三次握手连接阶段 最后一次ACK包丢失 会发生什么 6 TCP 握手为
  • 【css】关于css3的多列布局出现错乱问题

    一开始给外部的container设置了column count 2 当里面的每个item是偶数个时 布局是正常显示的 而当我们设置了奇数个item时 会出现下图的错乱布局 在item里面设置了以下两个属性之后 height 100 over
  • 口袋妖怪letsgo服务器维护,口袋妖怪letsgo新手玩法-新手攻略分享-可可网

    口袋妖怪letsgo新手怎么玩 对于刚入口袋妖怪的萌新 一切还属于在探索的阶段 这是前人总结的经验就对于我们的帮助非常大 具体内容有哪些 下面一起和小编看看吧 新手玩法分享 1 留意主线沙盘里的一起物品 无论是建筑还是NPC 他都有可能是你
  • 【go基础】变量声明

    1 第一个go语言程序 package main 声明所属的包 import fmt func main fmt Println hello world go run hello go 执行当前文件 输出 hello world 也可以构建