左手Python,右手Go
- 2019 年 10 月 5 日
- 筆記

左手Python,右手Go
【今日知图】 复制粘贴
y copy 复制 跟可视命令,移动命令一起连用 yy 复制一行 nyy 复制n行 p 粘贴 np 粘贴n次
0.说在前面1.HelloWorld程序2.基本语法3.条件判断4.作者的话
0.说在前面
最近Go很火!!!所以我也来学习了,一起来嗨GO!
1.HelloWorld程序
package main import "fmt" func main(){ fmt.Println("Hello,World!") //单行注释 /* 我是多行注释 */ }
注意一点,main()后面的大括号不能放在下面,会有语法错误哦~
2.基本语法
注释
单行注释
//单行注释
多行注释
/*我是多行注释*/
数据类型
- 布尔型
- 数字类型
- 字符串类型
- 派生类型
区别:Go的字符串是单个字节连接!
数字类型有整型int,浮点型float32,float64等!
派生类型主要包含:
- 指针类型(Pointer)
- 数组类型
- 结构化类型(struct)
- Channel 类型
- 函数类型
- 切片类型
- 接口类型(interface)
- Map 类型
变量
【形式】
声明变量的一般形式是使用 var 关键字:
var 变量名 type
变量名也跟其他语言一样,起始不能为数字,由下划线,数组,字母组成!
【单变量声明】
例如:
package main var name = "光城" var a string var b bool func main(){ a = "learn" println(name,a,b) }
输出:
光城 learn false
可以发现,b没有初始化,那么默认值为false
【多变量声明】
这里分为显式与隐式定义!
//类型相同,但不是全局变量! var a1,a2,a3 string //自动判断类型,于python一致,不需要显式声明类型 var v1,v2,v3 = "1","2","3" func main(){ println("显式声明类型并未初始化打印") a1="a1" a2="a2" a3="a3" println(a1,a2,a3) println("未显式声明类型并初始化打印") println(v1,v2,v3) }
输出:
显式声明类型并未初始化打印 a1 a2 a3 未显式声明类型并初始化打印 1 2 3
main函数内部声明并使用局部变量,必须在后面使用,否则报错!!!
func main(){ var a string = "abc" println(a) }
变量的另一种定义形式:
var ( x1 int = 5 x2 string = "hi" x3 bool = true ) func main(){ println("全局变量打印") println(x1,x2,x3) }
输出:
全局变量打印 5 hi true
综上得出:定义在函数内部的是局部变量,局部变量必须进行使用,而函数外部未全局变量,可以直接声明,后面不使用!!!
除了上述语法外,还有一个特别神奇的语法糖,可以直接不用var来定义变量!!!
func main(){ yufatang := "我是语法糖" println(yufatang) }
注意点::=
连用中间每空格,:=
要确保左值没有被定义过!
常量
//显式定义 const name string = "光城" //隐式定义 const PI = 3.14 //多个相同类型声明 const c1,c2 = 1,2
枚举
每个变量之间换行!!!
const ( Unknow=0 Femal=1 Male=2 ) println(Unknow,Femal,Male)
iota
iota 在 const关键字出现时将被重置为 0(const 内部的第一行之前),const 中每新增一行常量声明将使 iota 计数一次。
例1:
const ( at = iota //0 b //1 c //2 d = "ha" //独立值,iota += 1 e //"ha" iota += 1 f = 100 //iota +=1 g //100 iota +=1 h = iota //7,恢复计数 i //8 ) println(at, b, c, d, e, f, g, h, i)
输出:
0 1 2 ha ha 100 100 7 8
例2:
const ( i1=1<<iota j=3<<iota k l ) println(i1,j,k,l)
输出:
分别式向左移动0,1,2,3位,每移动1位乘以2。
1 6 12 24
运算符
算术运算符
这里介绍区别,在go中由自增,只不过与c或c++有区别,看下面!!!
atest := 1 atest++ //正确 ++atest //错误,同理--一样 b:=atest++ //错误,单独作为语句
关系运算符
同c/c++,这里略!
逻辑运算符
&&
,||
,!
,分别式与,或,非
位运算
&
,|
,^
,<<
,>>
赋值运算符
<<=
,>>=
,&=
,|=
,^=
,+=,等。。。
其他运算符
&
,*
与c/c++一致!
atest := 1 var ptr* int ptr = &atest println(ptr)
3.条件判断
if else
语句
授权例子!!!
var pa int var pb int println("请输入密码: n") fmt.Scan(&pa) if pa == 123456 { println("用于获取授权!") println("请输入进门授权码: n") fmt.Scan(&pb) if pb == 111 { println("成功!!!") } else { println("失败!!!") } } else { println("非法入侵!!!") }
switch
语句
println("请输入条件字符串:n") var ch string fmt.Scan(&ch) switch ch { case "a": println("输入的是a!n") case "b": println("输入的是b!n") case "c": println("输入的是c!n") default: println("输入无效!n") }