go入门(一)

本文以语法定义等为主。说一下go中基本的语法糖。
基本类型
go中的基本类型主要有:
  • 数值型:分为整数,小数,复数。默认值为0.
    • 整数:int后面加个数字,如int8,int16等。int类型根据系统的位数变化,64位系统就是int64,32位就是int32。类型rune==int32。
    • 小数:只有float32float64
    • 复数:complex64和complex128
  • 布尔型:bool。默认为false
  • 字符串型:string。默认为""
在数值类型中,前面带u表示无符号数值,如int8的范围为-128127,而uint8的范围为0255.
定义与赋值
【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不解决循环依赖的问题。
底层推断
话外,此处提及一下go中的关于类型推断:
i:=33.0 //类型推断:输出类型 fmt.Println(reflect.TypeOf(i)) //字节推断:输出字节长度 fmt.Println(unsafe.Sizeof(i))

此处会输出类型,如果有指定,指定的优先。未指定则输出默认的类型,如整数默认是int,float根据系统位数来。
类型推断也会根据系统的位数,如64位系统,默认算出的int的为8字节,即int64(32位系统为int32)。推算中的浮点数为float64,也是8字节的。
温馨提示:
如果在看完后,有什么意见或者建议,欢迎留言。

    推荐阅读