go基础 01

1 Go语言介绍

# 1 go -- golang,2009年  谷歌 公司推出的编程语言(python:1989年,龟叔 | Java:1990年,sun公司,现在被甲骨文收购了),很新的语言,10年多的时间,简单易用,性能高,可能会有小bug,有不太完善的地方,生态(库少)
# 2 静态 强类型 编译型语言  区别于python
	-静态(动态python):(类型在程序运行过程中不允许改变)类型固定 a=10   a="qqq"
  -强类型(弱类型:js):(go,python是强类型)强类型 ,不通类型之间不允许直接运算  10+"ttt"   
  -编译型(解释型:js,php,python):先编译再执行 编译成可执行文件--可执行文件执行
  	-解释型:
    	-解释型语言,代码要运行在解释器之上
    	-c 编译成dll(动态链接库),就是可执行文件
    	-java:解释型还是编译型?有个编译过程,并不是编译成可执行文件,.class文件,不能直接运行在操作系统之上,
      			它需要运行在jvm(java虚拟机之上,就可以当做解释器)
    -不论在什么平台执行java程序,最少需要装java虚拟机,  一处编码,处处运行(跨平台)
    
 # 3 跨平台编译 (可以跨平台编译:在不通平台可以编译出另一个平台的可执行文件)
 	-linux上安装软件,源码安装(make,make install),linux上安装python环境
  	c/c++写的代码不通平台的软件,需要现场编译成可执行文件
    python写的代码:需要安装解释器(不通平台)----》python代码直接打包成exe --》pyinstaller,在exe内部,打包进去了解释器 ---》gui(Tkinter)/pyqt
    java写的代码:不通平台需要装java虚拟机
    go:只要编译完了,直接拿着执行就可以了(不通平台编译不通平台的可执行文件)
    	-要运行go写好的程序,直接拿着可执行文件,执行就可以了
 # 4 有垃圾回收机制python,go,java (gc),c没有垃圾回收,变量定义了,不使用了,自己释放掉

# 5 支持面向对象和面向过程(go不是一门纯粹的面向对象语言,没有类的概念,但是可以实现面向对象的特性:继承封装多态)
# 6 go 1.5以后自己实现自己 --也是由 c写起来的(python:dict源码,django源码就是用python写的,java 都是c写的)
# 谁在用?
	-google 在用:  k8s(容器编排),都是go写的
  -docker(不是谷歌公司的),用go写的
  -腾讯蓝鲸
  -手机百度 后端大量的go 
  -区块链:用go写(可以用任何语言写,第一款开源的区块链项目,用go写的)
  

# go特别适合服务端开发(高并发)
	-将会统治下一个10年
      

      

2 Go语言开发环境搭建

# 搭建开发环境,如果要执行go语言编译后的文件,不需要装任何软件
# 1 https://golang.google.cn/dl/ 下载相应的包(1.11以上) ,相当于python解释器(可以做go开发了)
		-python2.几  和 3.几 
  	-一路下一步,完事(不需要改)
  
# 2 使用ide,Goland(pycharm几乎没有区别),VS Code ,Vim GO,LiteIDE
		-建议大家用Goland,跟pycharm是一家,jetbrains公司出的,注册码通用,操作习惯,99%跟pycharm一样
  	-vs code:免费的,微软的,go插件,python插件(也可以开发python),你之前用pycharm,换成vs code,快捷键
    -安装:无脑下一步
    
    -以后建议你,不管做什么开发,都用jetbrains公司的就可以了
    
    
 # 3 验证安装
		-cmd窗口下:go version  显示出版本号,就装完了
  	
    -go env  go的环境:
    	GOPATH:用户目录下的go文件夹中:GOPATH=C:\Users\liuqingzheng\go 
   	 	GOROOT:c:\go
 # 4 简单配置
		-GOPATH:写的代码存放的路径,以后写的所有go的代码,必须放在GOPATH下,否则不能执行
  			-如果没有,需要创建出来
  			-src:以后你所有写的go代码,全放在这个文件夹下
      			-C:\Users\liuqingzheng\go\src
    		-bin:编译后的可执行文件位置
      	-pkg:编译过程中出现的
  	-GOROOT:go解释器的安装路径
    
 # 5 打开goland写代码
	-创建项目,必须在GOPATH的src路径下:/Users/liuqingzheng/go/src/s12_day01
  -配置GOROOT:默认下来就会找到,如果找不到,手动添加进来
  
  
 # 6 因为所有代码必须放在GOPATH下,打上对勾,goland会自动创建出一个GOPATH,一般不用,就把项目放在之前的GOPATH下即可

# 7 在项目上点击右键,新建go file  ,写上名字

image-20200323101337502

3 第一个helloworld

3.1 go中的注释

//go当中的注释(跟js一样,java)
// goland快捷键:ctrl+/  快速单行注释,解开注释
//单行注释
/*
多行注释
多行注释
 */

3.2 第一个hellowrold

package main    // 必须指明是哪个包 main包
//表示导入fmt包,对比python即可
import "fmt"
func main() {   //定义了一个main函数
	fmt.Println("hello world")  //打印出helloworld
}


//1 以后再写go 代码,必须把代码放在  main包下的main函数中(go程序的入口,是main包下的main函数)
//2 fmt.Println("hello world")  你看到的a... 其实是goland给你提示的,函数的形参是a...
//3 go语言中,包导入必须使用,否则报错,注释掉,包自动删除(goland做的,其他编辑器,没有)

3.3 go代码的执行

//执行go代码
1 goland上点击右键  Run  就可以执行(仅限于goland,vs code其他编辑器,都没有)
2 先编译,再执行正统的用法(go是编译型语言),用命令
  编译:go build s1.go   编译,编译成当前平台的可执行文件  s1.exe
  执行:s1.exe
3 编译并执行(在vs code上的命令窗口下执行go文件)
	go run s1.go    相当于2中的所有步骤,不产生可执行文件 s1.exe不产生

4 变量

package main

//import "fmt"

// 变量

func main() {
	//变量定义:定义方式三种,其他的都是变形
	//1 第一种:全定义
	//var关键字 变量名 变量类型 = 变量值
	//var a int =10
	//fmt.Println(a)

	//2 第二种:类型推导(自动推导出变量类型)
	//var a =10
	//fmt.Println(a)
	//fmt.Printf("%T",a)   //查看a的类型

	//3 第三种:简略声明(这个用的多)  冒号跟等号是一起的
	//a := 10
	//fmt.Println(a)

	//4 只定义变量,不赋值
	//var a int    //int类型空值,是0
	//var a
	//a :=
	//a=100
	////a="100"      //把字符串100赋值给a,不支持,静态语言
	//fmt.Println(a)

	//5 声明多个变量,三种方式都可以
	//var a,b,c int=10,11,12
	//var a,b,c=10,11,12
	//var a,b,c=10,11,"xxx"
	//a,b,c:=11,12,"ddddf"
	//fmt.Println(a)
	//fmt.Println(b)
	//fmt.Println(c)
	//fmt.Printf("%T",c)

	//6 变量不能重复定义
	//var a int
	////var a=90   //重复定义
	//a :=90      //重复定义
	//a=90
	//特殊情况
	//var a int
	//var a,b=10,20  // 不允许
	////a,b:=10,30   //我觉得a是重复定义,go语法允许
	//fmt.Println(a)
	//fmt.Println(b)



}

/*
	总结:
	 1 变量定义了必须使用,否则报错(只有go要求这样)
	 2 查看变量没写
     3 变量要先定义再使用
	 4 变量类型是固定的,不允许中途改变(静态语言)
	 5 如果只是定义变量,必须指定类型,只能用第一种定义方式
	 6 变量不允许重复定义

	强调:
		以后所有类型的变量定义,就参照变量定义的三种方式
*/

5 变量类型

package main

import "fmt"

//类型: 数字,字符串,布尔
/*
数字:
	-int:整数类型(包括负数)
		-int,int8,int16,int32,int64
		-int8:表示能存储的长度 8个比特位,8个小格,一个格只能放0和1,
				能表示的范围是:正的2的七次方-1到,负的2的7次方-1
		-int16,32...类推
		-int:在32位机器上,表示int32,在64位机器上表示int64
		-表示人的年龄:300岁撑死了,int64 是不是有点浪费,可以定义成int8
		-python中int类型,远远比go的int64大,大很多,python中一切皆对象,int int对象

	-uint:正整数
		-uint,uint8,uint16,uint32,uint64
		-uint8:范围:正2的8次方减一,有个0
	-float:小数
		-float32,float64
	-complex:复数(高等数学学得,实部和虚部,了解)
		-complex32,complex64
	-byte:uint8的别名,byte:翻译过来是字节,一个字节是多少,8个比特位,uint8就占8个比特位
	-rune:int32的别名,4个字节,表示一个字符

字符串
	string:用双引号表示的(单引号?表示的不是字符串,三引号?)
		双引号和三引号
布尔:
	bool:true,false(都是小写)
*/

func main() {
	//1 int uint
	//var a int8=100000
	//var a int64=100000
	//var a uint=-8  //错误
	//var a uint=8
	//fmt.Println(a)

	//float:小数
	//var b int =2.345   报错
	//fmt.Println(b)
	//var a float32=2.345
	//fmt.Println(a)

	//字符串
	//var a string="my name is lqz"
	//var a string=''dsfads''  go中根本没有三引号
	//反引号,就是python中的三引号,可以换行
	//	var a string = `我很帅
	//					你也很帅
	//					它也很帅
	//`
	//var a string="你好\n" +
	//	"我好" +
	//	"大家好"
	//	fmt.Println(a)

	//var a int = 10
	//fmt.Println(a)
	//a = 13
	//fmt.Println(a)


	//布尔类型
	//var a bool=true
	//var a =false
	a:=false

	//a=0  //类型不匹配
	fmt.Println(a)
}

//go代码跟格式缩进没关系,你的代码需要格式化,好看

6 常量

package main

import "fmt"

//常量:恒定不变的量,只赋值一次,以后再也不能改了,数据库连接地址,端口号

//const关键字 变量名 变量类型 =值

//const name  string=  "lqz"
//类型推导
//const name  =  "lqz"

//简略声明 不可以

//同时定义多个常量
const name,age  ="lqz",19 
func main() {
	//name="egon"  //不允许修改
	fmt.Println(name)
}

猜你喜欢

转载自www.cnblogs.com/zhangchaocoming/p/12551732.html