go入门(一)
本文以语法定义等为主。说一下go中基本的语法糖。基本类型
go中的基本类型主要有:
- 数值型:分为整数,小数,复数。默认值为0.
- 整数:int后面加个数字,如int8,int16等。
int
类型根据系统的位数变化,64位系统就是int64,32位就是int32。类型rune
==int32。 - 小数:只有
float32
和float64
- 复数:complex64和complex128
- 整数:int后面加个数字,如int8,int16等。
- 布尔型:bool。默认为false
- 字符串型:string。默认为""
定义与赋值
【go入门(一)】普通变量定义
如在java中int a=32,在go中有如下写法:
var a=32
var a int=32
a:=32
a:=int(32)
一共3种写法,可以看到第一种的int是可以忽略掉的。在局部变量时,var也可以省略。但在全局变量必须要有var。
在局部变量定义时,可以省略var,用: 来替代(参见第一行和第四行)。该方式适用于所有变量,包括后面的高级数据类型和对象,而且也是以后用的最多的一种。
如果是单纯的只定义a,如下(这个只有一种):
var a int
常量定义
常量的定义有以下两种方式:
const name string = "Q"
const name1 = "Q"
复合定义 普通变量复合定义
//全局或局部都可以使用 a=1,b=2
var a, b = 1, 2
//等效于
var (
a = 1
b = 2
)
//只能局部使用
c, d := 3, 4
常量复合定义
//a=1,b=2
const a, b = 1, 2
//等效于
const (
a = 1
b = 2
)
特殊定义 对于不想要的变量,可以赋值给
_
,表示该值不可用。可以用于任何值的赋予,包括常量和普通变量。在常量定义时,有特殊变量
iota
。在每一次遇到const时,重置为0;在每一次换行后+1.const (
a,b = iota,iota*2
c,d
_=iota
e=iota
)//相应的打印控制台
fmt.Println(a, b, c, d, e)
输出为:0 0 1 2 3
在const括号中,没有再遇到const,所以换行后?1.而
_
那一行,表示跳过一个值。因为a,b在同一行,且都在第一行,所以此时iota是起始值0,第二行iota是1,c=iota即1,d=iota*2即2,第三行iota=2但是跳过,第四行iota=3赋予给e。
对于
const()
,如果上一行的变量有值或者表达式的赋予,则这一行默认的赋予为上一行的表达式或者值。示例如下:
const (
a,b = 4,5
c,d
e=3
)
此时
c,d=4,5
,而e
与上一行的格式不同,不能套用上面的规律,需要单独赋值。加载顺序
- 程序的入口为
main()
方法,且必须为package main
; - 多个没有父子依赖关系的文件,按照字母顺序排列加载;
- 有依赖关系的文件,先加载父文件,再加载子文件。在加载时会读取
init()
方法(如果有的话); - 多次导入,只算第一次;
- 以下划线
_
为别名的import,只加载init()方法,其他方法忽视掉; - 加载的文件可以定义别名,在运算时,以别名为准,相同的才可以计算;
- 文件夹不必和package相同,但一个文件夹下不同文件的package必须相同;
底层推断
话外,此处提及一下go中的关于类型推断:
i:=33.0
//类型推断:输出类型
fmt.Println(reflect.TypeOf(i))
//字节推断:输出字节长度
fmt.Println(unsafe.Sizeof(i))
此处会输出类型,如果有指定,指定的优先。未指定则输出默认的类型,如整数默认是int,float根据系统位数来。
类型推断也会根据系统的位数,如64位系统,默认算出的int的为8字节,即int64(32位系统为int32)。推算中的浮点数为float64,也是8字节的。
温馨提示:
如果在看完后,有什么意见或者建议,欢迎留言。
推荐阅读
- 一个人的旅行,三亚
- 一个小故事,我的思考。
- 《真与假的困惑》???|《真与假的困惑》??? ——致良知是一种伟大的力量
- 开学第一天(下)
- 一个人的碎碎念
- 2018年11月19日|2018年11月19日 星期一 亲子日记第144篇
- 遇到一哭二闹三打滚的孩子,怎么办┃山伯教育
- 第326天
- Y房东的后半生14
- 奔向你的城市