golang初识 和 变量,常量,iota
一、go语言与python
1. go语言
go语言语法固定,没有那么多花里胡哨的写法,语法也简单。一共25个关键字
本身支持高并发,数据计算,做后端天然有优势。(云计算,区块链,网络服务行业,新兴的公司基本都用go语言)
2. python
- 开发效率高,所以周期短
- 爬虫加数据分析
- 人工智能
二、变量相关
1. go语言的基本语法
package 后面跟的是包名,用来声明当前这个文件是属于哪个包。,如果是属于main包,则在执行这个文件后,会把该文件打包成一个
.exe程序。import 包名用来导入的包func main()是整个程序的入口,没有参数。在函数外部只能放置标识符(即 变量,常量,函数,类型)的声明
2. 标识符和关键字
标识符就是python中的变量名, 由字母数字和
_(下划线)组成,并且只能以字母和_开头 。关键字就是有各种特定作用的名字。如python中的
if def return等等。go语言里有25个关键字,并且还有37个保留字。我们不建议用关键字或保留字当做变量名即标识符。
3. 变量声明
- 类似前端JavaScript的变量声明方式
(1)声明变量时未指定初始值
格式1: var 变量名 变量类型
行尾无需分号
例如:
var name string
var age int
var isOk bool
格式2:批量声明
var (
a string
b int
c bool
d float32
)
已经声明的变量若未对其进行初始化,他们都会有一个默认值
- 数字类型是
0,字符串是空字符串, 布尔型变量默认为false。 切片、函数、指针变量的默认为nil
- 数字类型是
(2)声明变量时指定初始值
格式:
var 变量名 类型 = 表达式 例子:
var name string = "Q1mi"
var age int = 18 一次初始化多个变量:
var name, age = "Q1mi", 20
(3)声明变量时不指定类型
声明变量时不指定类型,则这个时候编译器会根据等号右边的值来推导变量的类型完成初始化
var name = "Q1mi"
var age = 18
(4)短变量声明
在函数内部,可以使用更简略的
:=方式声明并初始化变量package main import (
"fmt"
)
// 全局变量m
var m = 100 func main() {
n := 10
m := 200 // 此处声明局部变量m
fmt.Println(m, n)
}
(5)匿名变量
类似python中的解压缩时,用
_代替不需要的值。 匿名变量用一个下划线_表示func foo() (int, string) {
return 10, "Q1mi"
}
func main() {
x, _ := foo()
_, y := foo()
fmt.Println("x=", x)
fmt.Println("y=", y)
}
- 匿名变量不占用命名空间,不会分配内存,所以匿名变量之间不存在重复声明。 (在
Lua等编程语言里,匿名变量也被叫做哑元变量。
- 匿名变量不占用命名空间,不会分配内存,所以匿名变量之间不存在重复声明。 (在
(6)注意小结
- 函数外的每个语句都必须以关键字开始(var、const、func等)
:=不能使用在函数外。_多用于占位,表示忽略值
三、常量
什么是常量
常量是恒定不变的值,多用于定义程序运行期间不会改变的那些值
声明常量只是把
var换成了const,**常量在定义的时候必须赋值 **
1.普通声明常量方式:
const pi = 3.1415
const e = 2.7182
2.批量声明不同值的常量方式:
const (
pi = 3.1415
e = 2.7182
)
3.批量声明同一值的常量:const同时声明多个常量时,如果省略了值则表示和上面一行的值相同
const (
n1 = 100
n2
n3
)
四、iota
什么是
iotaiota是go语言的常量计数器,只能在常量的表达式中使用iota在const关键字出现时将被重置为0。const中每新增一行常量声明将使iota计数一次iota**可理解为const语句块中的行索引 **
5种实例:
1. 普通例子
const (
n1 = iota //0
n2 //1
n3 //2
n4 //3
) 2. 使用_跳过某些值
const (
n1 = iota //0
n2 //1
_
n4 //3
) 3.iota声明中间插队
const (
n1 = iota //0
n2 = 100 //1
n3 = iota //2
n4 //3
)
const n5 = iota //0 4. 定义数量级
// 这里的<<表示左移操作,1<<10表示将1的二进制表示向左移10位,也就是由1变成了10000000000,也就是十进制的1024。同理2<<2表示将2的二进制表示向左移2位,也就是由10变成了1000,也就是十进制的8
const (
_ = iota
KB = 1 << (10 * iota)
MB = 1 << (10 * iota)
GB = 1 << (10 * iota)
TB = 1 << (10 * iota)
PB = 1 << (10 * iota)
) 5. 多个iota定义在一行
const (
a, b = iota + 1, iota + 2 //1,2
c, d //2,3
e, f //3,4
)
golang初识 和 变量,常量,iota的更多相关文章
- GO中标识符,标识符,变量,常量,iota
参考:https://www.cnblogs.com/nickchen121/p/11517455.html 一.标识符与关键字 1.标识符 在编程语言中标识符就是程序员定义的具有特殊意义的词,比如变 ...
- golang语法学习(一):变量,常量以及数据类型
学习一门新的语言肯定是要从他的主要的语法開始,语法构成了整个程序设计的基础,从语法中我们也能够看到这门语言的一些特性.可是话说回来.语法这东西,不同的语言大同小异,所以这也对语法的记忆造成了一定的难度 ...
- [golang note] 变量常量
变量 • 变量声明 √ golang变量声明的关键字为var. √ golang变量声明时类型信息放置在变量名之后. ▶ 单个变量声明 ▪ 语法如下 var name type ▪ 示例如下 var ...
- iOS开发Swift篇(01) 变量&常量&元组
iOS开发Swift篇(01) 变量&常量&元组 说明: 1)终于要写一写swift了.其实早在14年就已经写了swift的部分博客,无奈时过境迁,此时早已不同往昔了.另外,对于14年 ...
- C#基础总结之一变量常量-if嵌套语句-witch结构-类型转换
//Console.WriteLine("Hello World"); //打印显示 //Console.ReadLine(); //接收输入的值 //Console.ReadKe ...
- 李洪强iOS开发Swift篇---11_变量&常量&元组
李洪强iOS开发Swift篇---11_变量&常量&元组 说明: 1)终于要写一写swift了.其实早在14年就已经写了swift的部分博客,无奈时过境迁,此时早已不同往昔了.另外,对 ...
- PHP 获得当前页面所有变量常量的值
get_defined_vars() - 返回由所有已定义变量所组成的数组,这个函数在二次开发的时候用起来非常给力: get_defined_constants();可以返回当前的所有常量 zend的 ...
- JAVA之旅(一)——基本常识,JAVA概念,开发工具,关键字/标识符,变量/常量,进制/进制转换,运算符,三元运算
JAVA之旅(一)--基本常识,JAVA概念,开发工具,关键字/标识符,变量/常量,进制/进制转换,运算符,三元运算 Android老鸟重新学一遍JAVA是什么感觉?枯燥啊,乏味啊,而且归纳写博客,都 ...
- TF:Tensorflow定义变量+常量,实现输出计数功能—Jason niu
#TF:Tensorflow定义变量+常量,实现输出计数功能 import tensorflow as tf state = tf.Variable(0, name='Parameter_name_c ...
随机推荐
- git clone的代码没有前端代码
需要切换到文件夹目录下,然后 git checkout dev 切换到开发环境(其实是切换到了dev分支) 后来查看分支,发现有两个分支:master 和 dev . ================ ...
- 重叠IO 模型
1. 重叠模型的优点 2. 重叠模型的基本原理 3. 关于重叠模型的基础知识 4. 重叠模型的实现步骤 5. 多客户端情况的注意事项 一.重叠模型的优点 1.可以运行在支持Winsock2的所有W ...
- python学习之模块-模块(一)
第五章 5.1 自定义模块 模块概念: 把一些常用的函数放在一个py文件中,这个文件就称之为模块. 模块的意义: 1.方便管理.让程序的解构更加清晰,实现功能的重复使用: 2.提升开发效率 ...
- ROS自动切换策略
自动切换策略,具体如下 监视地址:1.1.1.1 轮询时间:30s:超时时间:1000ms up /ip firewall nat set [/ip firewall nat find comment ...
- 贪心+dp
贪心+dp 好多题都是这个思想, 可以说是非常重要了 思想一: 在不确定序列无法dp的情况下, 我们不妨先假设序列已经选定, 而利用贪心使序列达到最优解, 从而先进行贪心排序, 在进行dp选出序列 思 ...
- 【深度聚类】Superpixel Sampling Networks
Superpixel Sampling Networks 原始文档:https://www.yuque.com/lart/papers/ssn 本文的思想很简单,传统的超像素算法是一种有效的低/中级的 ...
- 利用Ansible模块copy和fetch进行主机间文件的传递
场景: java应用程序和Ansible不在同一台机子,要读取的文件又在另一台主机. 主机a不能保存文件,可以临时保存. 文件都在主机b上保存. 需求: 需要将文件从主机c传到主机b,再从主机b传到主 ...
- python 并发编程 多线程 GIL与Lock
GIL与Lock Python已经有一个GIL来保证同一时间只能有一个线程来执行了,为什么这里还需要互斥锁lock? 锁的目的是为了保护共享的数据,同一时间只能有一个线程来修改共享的数据 GIT保证了 ...
- win7启动tomcat失败处理
本地启动tomcat 后访问 127.0.0.1:8080 失败,查看错误如下 使用如下命令杀死占用8080的进程 netstat -ano | findstr 8080 # 查看8080端口状态 t ...
- 02:Redis常见面试题
1.1 redis基础面试题 1.什么是Redis?简述它的优缺点? 1. Redis本质上是一个Key-Value类型的内存数据库,很像memcached. 2. 整个数据库统统加载在内存当中进行操 ...