zoukankan      html  css  js  c++  java
  • 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:Usersliuqingzhenggo 
       	 	GOROOT:c:go
     # 4 简单配置
    		-GOPATH:写的代码存放的路径,以后写的所有go的代码,必须放在GOPATH下,否则不能执行
      			-如果没有,需要创建出来
      			-src:以后你所有写的go代码,全放在这个文件夹下
          			-C:Usersliuqingzhenggosrc
        		-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 li"
    	//var a string=''dsfads''  go中根本没有三引号
    	//反引号,就是python中的三引号,可以换行
    	//	var a string = `我很帅
    	//					你也很帅
    	//					它也很帅
    	//`
    	//var a string="你好
    " +
    	//	"我好" +
    	//	"大家好"
    	//	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=  "li"
    //类型推导
    //const name  =  "li"
    
    //简略声明 不可以
    
    //同时定义多个常量
    const name,age  ="li",19 
    func main() {
    	//name="zhang"  //不允许修改
    	fmt.Println(name)
    }
    
    
  • 相关阅读:
    造轮子杂记2
    Net分布式系统之五:微服务架构
    C#设计模式:责任链模式
    NET Core1.0之CentOS平台开发控制台程序DEMO
    WCF Routing 服务
    设计模式之外观模式
    设计模式之简单工厂模式
    Eclipse快捷键总结
    Spring容器的初始化流程
    IOC容器的创建
  • 原文地址:https://www.cnblogs.com/zhangchaocoming/p/12551732.html
Copyright © 2011-2022 走看看