zoukankan      html  css  js  c++  java
  • go语言 介绍, go语言环境搭建, 创建项目(helloworld示例), 变量的定义和使用, 常量, 基本数据类型, 跨平台编译成linux下可执行文件

    # sanic:交友类,号称用户1个亿  ,fastapi   异步框架
    # django,flask 同步框架(django 3.0以后支持异步,但是不好)
    # gevent,asyncio:作者牵头,异步模块
    
    # 猴子补丁   
    #import json
    from xxx import yyy as json   # 每个py文件都要
    
    # 写一句话,可以把全局的json都替换成你的json(在解释器内替换)
    
    json.dumps()
    json.loads()

    1 go语言介绍

    # 1 诞生于 2009年,10年的时间,非常新的语言,天然支持并发,很新,生态不完善
        -python:1989年
      -java:1990年
      -2005年,之前的语言,对并发支持不是特别好
    # 2 轮子少(生态),django,flask     beego(中国人写的,orm都有),gin(集成gorm),两三个连mysql的模块
    # 3 google出的  python,java:sun公司,甲骨文收购了  c#:微软
    
    #4 Go是静态   强类型语言,是区别于解析型语言的编译型语言。
        -编译后执行---》编译成可执行文件   (java编译成字节码--运行在jvm上,每台机器都要跑一个jvm,300m内存)
      -解释型:直接运行在解释器上,php,js,python
      -夸平台性如何?java:一处编码,处处运行,go:夸平台编译(交叉编译),可以在windows平台编译出linux下的可执行文件
      -在linux上装过python,源码包下载,解压,make && make install  gcc编译的,当前平台的可以执行文件
      -go写的程序,只需要跨平台编译完,拿到不通平台上,不需要安装任何依赖
      
      -强类型:go,python是强类型,不允许不同类型运算  'aa'+1  报错
      -弱类型:允许不通类型运算
      
    # 5 跨平台的编译型语言
    
    # 6 有垃圾回收的机制(gc)         类似python,但python还因为gc搞出gil锁
    
    # 7 支持面向对象和面向过程的编程模式(go不是一个纯粹的面向对象语言,面向对象的特性它都有:继承,封装,多态)
    
    # 8 2009年推出   12年稳点版本  1.5——实现的架构变化,同时保留了和旧版本的兼容性,以后的go,完全实现了go自己写的
    2020年 1.14版本   ---》规划:go 2.0以后,会有大更新:支持泛型,异常处理。。。
    
    # 9 Go语言应用:google,基本上所有互联网都会有go,不是在用go,就是在转go的路上
    # 10 go语言为什么笔记火:docker火,谷歌(k8s),区块链(第一款开源的区块链项目,用go写的),国内互联网公司爱用,性能高,语法简洁,上手快,go特别适合服务端开发(微服务的开发)
    
    # Go语言发展前景:统治下一个十年

    2 go语言环境搭建

    go解释器下载

    # go开发包(类似于python解释器)+ ide(golang,vscode,sublime text。。。。)
    下载路径:https://golang.google.cn/dl/
    # golang:跟pycharm 90%相似,jetbrains公司,idea,用来开发java的,phpstorm,pycharm,goland
    下载路径:https://www.jetbrains.com/go/download/#section=windows
    # go version 查看go的版本
    
    # go env    查看go的环境变量
    GO111MODULE= # 没有值或者off,表示没有开启go mode模式,用的就是gopath模式(此时如果代码放在GOPATH以外的路径则无法执行,找东西会找不到)
    GOROOT=c:go  # go开发包的安装路径,确认好是否对
    GOPATH=C:UsersAdministratorgo # 代码存放路径,确认好是否对,以后你的go代码都放在这个文件夹下
    # GOPATH可以在环境变量中进行更改
        
    # 在任意位置敲go,都有这个命令,需要把 c:goin加入环境变量
    
    # go mode模式:代码可以放在任意路径

    3 创建项目

    helloworld

       

    注意一个项目只能有一个main函数。如果有多个文件有main函数, 要独立运行。确保运行是以文件为单位,如下所示

    # 1 不管是用goland还是其他ide,新建项目的路径(代码),必须放在gopath路径下的src文件夹(如果没有手动创建出来)
    # 2 gopath路径下会有三个文件夹:src(放代码的),pkg(编译过程产生中间的东西),bin(编译后的可执行文件)
    
    # 3 创建项目,在项目下,创建go文件,起一个名字
    
    # 4 执行代码(编译型语言,先编译再执行)
    编译:go build xx.go   -->编译成当前平台下的可执行文件,名字为xx
    执行:./xx    windows:在可执行文件路径下  xx.exe
    
    # 5 go命令
    -go build   编译     在当前目录留下可执行文件
    -go install 安装,把编译好的可执行文件,放到bin路径下
    -go fmt :代码格式化
    -go run xx.go  编译并执行      不会在当前目录留下可执行文件
    
    # 6 在golang中执行
    右键,选择,run
    // go语言中的单行注释使用
    /*
    多行注释
    多行注释
     */
    
    //ctrl+/ 可以快速注释,解注释(goland)
    package main  //表示声明main包,每一个go代码的第一行必须写这个
    
    
    import "fmt"   //导入fmt包    类比python中import os os.path
    
    func main() {  //声明main函数  函数体的内容,放到大括号中
        //goland提示的a... 形参是a
        fmt.Println("hello world")   //在控制台输出helloworld --->  print("hello world")
        fmt.Println("hello world")
    
    }
    
    // 程序的执行入口,是main包下的main函数
    // 编译型语言,都有入口 ----》 对比python中一个py文件就是一个main函数
    
    //一个go项目只能有一个main函数

    4 变量的定义和使用

    /*
    ###########
    变量的定义和使用
    ##########
    */
    package main
    
    func main() {
    	//1 方式一:基本定义
    	//var关键字 变量名 变量类型 =变量值
    	//var age int=18  //定义并赋值
    	//var age int  //定义
    	//age=18       //赋值
    
    	//2 方式二:类型推导(不需要加类型了,并不代表没有类型,类型都是固定的)
    	//var age =18
    	//var age      //错误,变量定义时,就要固定类型
    	//age=18
    
    	//3 方式三:简略声明(冒号跟等号是一起的,推荐第三种)
    	// age :=18
    	//age   //更不对了
    	//age=18
    
    	//4 同时定义多个变量
    	//var age,a,b,c int=18,19,20,21
    	//var age,a,b,c =18,19,20,21
    	//age,a,b,c :=18,19,20,21
    	//变形(能看懂,表示在定义即可)
    	//var (
    	//	age=19
    	//	name="lqz"
    	//	sex="男"
    	//)
    
    	//5 变量要先定义再使用
    	//a=19
    	//a:=10
    
    	//6 变量不能重复定义
    	//var a int=18
    	////var a=19
    	////a:=19
    	////简略声明的小特殊(冒号前,至少有一个未定义的变量即可)
    	//b,a:=17,18
    	//
    	//fmt.Println(a,b)
    
    	//7 变量类型是固定的
    	//var a int=18
    	//var a=18 
    	//a:=18
    	//a=80
    	//a="xxx"  //不可以
    	//fmt.Println(a)
    
    
    	//Printf,%T表示类型   Printf不会自动换行,要换行加上
    
    	//fmt.Printf("age的类型是:%T,值是:%d
    ", age, age)
    	//fmt.Println(age)
    
    	/*
    		注意:
    		1 变量定义了,必须使用,否则报错
    		2 包导入了,要使用,不使用就报错
    		3 先定义再使用
    		4 不能重复定义
    		5 类型固定
    	*/
    
    }
    
    /*
    在python中一切皆对象,对象就是个地址是引用
    */
    

      

    5 常量

    /*
    ###########
    常量:恒定不变的量,建议常量全用大写
    程序运行过程中,不会改变的值,数据库的连接地址,端口号
    ##########
    */
    
    package main
    
    func main() {
    	//1 const关键字 常量名 常量类型 =值
    	//const age int =99
    
    	//2 常量可以定义了不使用
    	//const age int =99
    
    	//3 类型可以省略
    	//const age  =99
    	//fmt.Printf("%T",age)
    
    	//4 同时定义多个常量
    	//const (
    	//	AGE=19
    	//	NAME="lqz"
    	//	sex="男"
    	//)
    	//fmt.Println(AGE)
    	//
    	////5 改变常量(不允许)
    	//AGE=199
    	//fmt.Println(AGE)
    
    }
    

      

    6 基本数据类型

    /*
    ###########
    基本数据类型
    ##########
    */
    package main
    
    func main() {
    	/*
    		1 数字类型
    			有符号整形:(长度不同,表示的数字范围不一样)
    				-int:在32位机器上是int32,在64位机器上是int64
    				-int8 :8个bit位,一个字节,正负 2的7次方-1的范围
    				-int16: 正负 2的15次方-1的范围
    				-int32:
    				-int64:
    			无符号整数:
    				-uint8 :2的8次方-1
    				-uint16:
    				-uint32
    				-uint64
    			浮点型:
    				-float32:精度不一样
    				-float64:一般用64
    			复数:
    				-complex类型:(了解,不知道更好)实部和虚部
    			其他:
    				-byte:uint8的别名
    				-rune:int32的别名
    
    		//2 字符串类型:用双引号包裹的内容,反引号 ``     
    			反引号可以换行   双引号换行加
    
    
    
    		//3 布尔类型
    			true false  (小写)
    	*/
    
    	//var a int=200
    	//var a uint8=-200
    	//fmt.Println(a)
    
    	//浮点型
    	//var a float32
    	//var b float64
    
    	//复数
    	//var a complex64 = 9i+10
    	//fmt.Println(a)
    
    	//字符串
    	//	var name string ="lqz 
    " +
    	//		"is " +
    	//		"big"
    	//	//var name = "lqz"
    	//	var name2 = `egon
    	//			is
    	//big`
    	//	fmt.Println(name)
    	//	fmt.Println(name2)
    	//双引号内如果有双引号? 加转义
    	//var name string ="lqz "dafds"is "
    	//var name1 string =`lqz "dafds"is `
    	//fmt.Println(name)
    
    	//布尔类型
    	//var a bool =true
    	//var a  =true
    	//a  :=true
    	//var b bool =false
    	//fmt.Println(a)
    	//fmt.Println(b)
    
    
    
    	//类型转换(强类型:不通类型之间不能做运算)
    	//类型转换
    	//var a int =19
    	//var b float32=18.1
    	//float转成int类型,小数点后直接弃用,不是四舍五入
    	//fmt.Println(a+int(b))
    	//var b float32=18.9999
    	//fmt.Println(int(b))
    
    	//恶心的地方(了解)
    	//var a int =199   //64为操作系统int64
    	//var b int64=199
    	////int和int64不是一个类型
    	//fmt.Println(a+int(b))
    
    }
    

      

    拓展:

    跨平台编译成linux下可执行文件,搞到你虚拟机里执行一下

     在xx.go所在的的文件夹, 进入cmd,执行下面的命令

    set GOARCH=amd64
    set GOOS=linux
    go build xx.go

    会生成一个没有后缀的xx二进制文件

    将该文件放入linux系统某个文件夹下

    赋予权限

    chmod 777 xx

    执行

    ./xx

    运行成功,该二进制文件不需要go的任何依赖,可以直接运行。

    总结:

    # 1 python中的变量在内存中如何存储的?
        --一切皆对象:都是一个地址,引用
      --变量
      --is 和 ==:如果变量a和b指向同一个地址a is b 就是true   a和b的值相同,a==b是true
      --小整数池,不开辟新的内存空间
      --python中一个int类型,占得空间比较大
      
    # 2 go语言介绍
    # 3 环境搭建(ide+开发包)
    # 4 helloworld :每个go文件第一行必须加package maim/其他,main包下的main函数是整个程序的入口,导包
        -为什么要配置goroot和gopath?
          -导入包:内置包,第三方包,如果不配goroot(内置包路径)和gopath(第三方包,自己写的都在其src路径下),导包时,内置包找不到,第三方包也找不到,就报错了
    # 5 变量定义:三种方式,其他都是变形:
            -var a int =10
          -var a =10
            -a :=10
        -变量不能重复定义
        -变量要先定义后使用
        -变量定义了必须使用
        -变量类型是固定(在定义的那一刻)
    # 6 常量:const a int =10   const a =10
    # 7变量类型:
        -数字类型:
          -int,int8。。。。。。
        -uint8。。。。。
        -float32 float64
        -复数
      -字符串:string
          "",``
      -布尔 bool
  • 相关阅读:
    AIMS 2013中的性能报告工具不能运行的解决办法
    读懂AIMS 2013中的性能分析报告
    在线研讨会网络视频讲座 方案设计利器Autodesk Infrastructure Modeler 2013
    Using New Profiling API to Analyze Performance of AIMS 2013
    Map 3D 2013 新功能和新API WebCast视频下载
    为Autodesk Infrastructure Map Server(AIMS) Mobile Viewer创建自定义控件
    ADN新开了云计算Cloud和移动计算Mobile相关技术的博客
    JavaScript修改css样式style
    文本编辑神器awk
    jquery 开发总结1
  • 原文地址:https://www.cnblogs.com/ludingchao/p/12739486.html
Copyright © 2011-2022 走看看