Go语言学习笔记1.基础-变量-数据类型-常量和运算符

如题,此贴记录一下学习Go时需要记的一些点。
大量参照(https://www.runoob.com/go)菜鸟教程和
(https://studygolang.com/articles/11869)go语言中文网然后根据自己理解记录的。
仅供本人参考

语法基础

for {	//花括号和关键词要在同一行
}

定义的变量就必须使用,不使用就别定义,否则编译不通过。
引用的包也是,引用了就必须使用。

//使用双斜杠单行注释

/*
使用这种格式进行块注释
*/

自动插入分号规则:

if (1 == 0 ) {
	fmt.Print("yes")
} else {
//这里else必须跟在}括号后面,因为go语言的自动插入分号机制(分号会自动补全到每个末尾}后面)
	fmt.Print("no")
}

如果下面这个样子就是不被允许的:

if (1 == 0 ) {
	fmt.Print("yes")
} 		//错误的写法
else {
	fmt.Print("no")
}

变量

Go 语言变量名由字母、数字、下划线组成,其中首个字符不能为数字。也不能和内定关键词重复。
var variable_name int = 10

var(name)[type]=[value]
定义变量关键词变量名数据类型赋值关键词

()内必填,[]可选。常见的定义方法:

var a int = 10	//定义一个数据类型为int,值是10的变量

var a = 10	//当不指定数据类型的时候,由go来判断

var a int	//不赋值的时候,使用默认空值

var a,b,c,d int	//同时定义多个变量

定义多个变量的另一种写法。

var (	//这种被称为因式分解的写法
	a int
	b int
	c int
	d int
)

如果没有赋值,go将会赋值默认空值。不同数据类型的默认空值也有不同,如下:

  • 数值类型(包括complex64/128)为 0
  • 布尔类型为 false
  • 字符串为 ""(空字符串)
  • 一些特殊类型为 nil:

还可以省略var,使用另一种赋值方法。

a := value	
//声明变量并给a赋值value,数据类型自行判断,被称为类型推导。
a,b,c,d := 1,2,3,4	//同时定义多个变量并按照顺序赋值。

不可定义一个已经定义的变量,使用:=的时候至少需要有一个没有初始化的变量。使用:=的时候右边初始化值不能为空

变量的作用范围是根据声明变量语句的代码块判断的

数据类型

Go是强类型语言,当试图用不同的类型赋值时就会出现错误。

var a int = 66
var b string = "77"
a = b		//因为变量a b 类型不同,所以此操作是不被允许的。

我们可以用T(v)来进行类型转换,a = int(b)这样就会把变量b的类型转换成int并赋值给a

Go的数据类型大致分为:

  • bool布尔类型

true false

  • int整数数字类型

132456 -12

  • float32双精度数字类型

0.123 0.5 5.6

  • string字符串类型

abcd_-231

有符号整数

有无符号的意思是是否包含正负+-
下面的位代表二进制上面的位数,8位则代表CPU一次可以从寄存器处理的数据量,8位则是1111 1111=255的范围

  • int8:表示 8 位有符号整型
    大小:8 位
    范围:-128~127

  • int16:表示 16 位有符号整型
    大小:16 位
    范围:-32768~32767

  • int32:表示 32 位有符号整型
    大小:32 位
    范围:-2147483648~2147483647

  • int64:表示 64 位有符号整型
    大小:64 位
    范围:-9223372036854775808~9223372036854775807

int:根据不同的底层平台(Underlying Platform),表示 32 或 64 位整型。除非对整型的大小有特定的需求,否则你通常应该使用 int 表示整型。

常量

const关键词用来定义常量,如下就是给变量a定义一个常量66

package main

import "fmt"

func main(){
	const a = "66"
	fmt.Print(a)
}
常量用于定义一个固定的值,定义一个常量后,这个常量不能再被修改,比如`const a = 66`后就不能在给a赋值了`a = 77`。

定义的常量是无类型的,可以用来被赋值给其他类型变量,如下就是将int类型的:

但是其他类型也有要求,必须是相似的 比如数字类型中的 int int32 int64 float等

package main

import "fmt"

func main(){
	const num1 = 10		//定义了一个常量
	fmt.Printf("\nnum1 type:%T,value:%v", num1, num1)	//输出类型和值
//虽然常量是无类型的,但是他有一个默认类型,当他被需要转换的时候就会转换类型。
	var num_int32 int32 = num1		//将常量10赋值给int32类型的变量num_int32
	fmt.Printf("\n num_int32 type:%T,value:%v \n num1 type:%T,value:%v", num_int32, num_int32, num1, num1)
	var num_str float64 = num1
        fmt.Printf("\n num_str type:%T,value:%v \n num1 type:%T,value:%v", num_str, num_str, num1, num1)

}

结果:

num1 type:int,value:10
 num_int32 type:int32,value:10 
 num1 type:int,value:10
 num_str type:float64,value:10 
 num1 type:int,value:10

运算符

运算符用于在程序运行时执行数学或逻辑运算。
Go 语言内置的运算符有:

  • 算术运算符
  • 关系运算符
  • 逻辑运算符
  • 位运算符
  • 赋值运算符
  • 其他运算符

算术运算符

假定 A 值为 10,B 值为 20

运算符描述实例
+相加A + B 输出结果 30
-相减A - B 输出结果 -10
*相乘A * B 输出结果 200
/相除B / A 输出结果 2
%求余B % A 输出结果 0
++自增A++ 输出结果 11
--自减A-- 输出结果 9

关系运算符

假定 A 值为 10,B 值为 20。

运算符描述实例
==检查两个值是否相等,如果相等返回 True 否则返回 False。(A == B) 为False
!=检查两个值是否不相等,如果不相等返回 True 否则返回 False。(A != B) 为 True
>检查左边值是否大于右边值,如果是返回 True 否则返回 False。(A > B) 为 False
<检查左边值是否小于右边值,如果是返回 True 否则返回 False。(A < B) 为 True
>=检查左边值是否大于等于右边值,如果是返回 True 否则返回 False。(A >= B)为 False
<=检查左边值是否小于等于右边值,如果是返回 True 否则返回 False。(A <= B)为 True

逻辑运算符

假定 A 值为 True,B 值为 False。

运算符描述实例
&&逻辑 AND 运算符。 如果两边的操作数都是 True,则条件 True,否则为 False。(A && B) 为 False
||逻辑 OR 运算符。 如果两边的操作数有一个 True,则条件 True,否则为 False。(A || B) 为 True
!逻辑 NOT 运算符。 如果条件为 True,则逻辑 NOT 条件 False,否则为 True。!(A && B) 为 True

位运算符

位运算符对整数在内存中的二进制位进行操作。
假设A=100,B=12 二进制如下
A=0110 0100,B=1100

运算符描述实例
&按位与运算符"&",可以理解为当二进制位都相同时才为1,否则都为0(A&B)结果为4二进制是100
|按位或运算符"|" 当二进制位有一个为1时,即为1,俩个都是0的时候才该是0了。(A|B)108二进制是0110 1100
^按位异或运算符"^",二进制位相同是为0,不相同则为1。可以理解成同性相斥,异性相吸。(A^B)结果为104二进制是0011 01000
<<左移运算符"<<"是双目运算符。左移n位就是乘以2的n次方。 其功能把"<<"左边的运算数的各二进位全部左移若干位,由"<<"右边的数指定移动的位数,高位丢弃,低位补0。A << 2 结果为 240 ,二进制为 1111 0000
>>右移运算符">>"是双目运算符。右移n位就是除以2的n次方。 其功能是把">>"左边的运算数的各二进位全部右移若干位,">>"右边的数指定移动的位数。A >> 2 结果为 15 ,二进制为 0000 1111
# Go 

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×