Go 入门

Proudoffaith 2019-12-09

相关:
    1G = 1024M   1M =1024KB   1KB = 1024B   1B = 8bit
    
    -c开发:在windows上开发,编译好的只能在windows上用
    -java开发:跨平台,一处编码到处运行
        -运行在java虚拟机之上
        -编译成字节码文件:中间态
    -go:跨平台编译
        -在windows平台可以编译出linux下的可执行文件
        
    -java概念普及:
        -jdk:开发人员需要装jdk
        -jre:运行java程序,需要装
        -jvm:java虚拟机
        -javase:java基础,安卓方向
        -javaee:javaweb方向
            -ssh框架:spring  structs  Hibernate
            -ssm框架:spring  springmvc  mybatis
            -spring全家桶
                -springboot:一站式搞定
                -springclode:微服务开发
        -javame:手机端开发
        -大数据:

    -编译语言:-不依赖语言环境运行
        c,c+,c#,java,go
    -解释型语言:-需要解释器,缺点是执行速度慢
        python,js
    
-Go是静态强类型语言:强类型:类型固定
    -跨平台的编译型语言:一处编码到处运行
      eg:在windows平台可以编译出linux下的可执行文件
    
-go为什么这么火?
    -docker容器化   devops 比较火
    -k8s go写的:容器编排
    -区块链 :第一个开源的区块链项目是用go写的
    -性能高,特别适合服务端开发
    -部署容易

-环境搭建
    -go开发环境:go1.13.5.windows-amd64
        -go version  查看go版本
        -环境变量自动配置
        -go env
            -GOPATH=C:\Users\oldboy\go    go的代码必须放在这个路径下
            -GOROOT=c:\go                 go的安装路径
    -go ide:
        -goland-2019.3.exe
        -vs code
        
-第一个helloworld   
    -先编译再执行
        -go build 文件名         编译
        -文件名执行
    -编译并执行
        -go run 文件名    

-变量 用来存储特定类型的值        
    方式一:全名称  
        var关键字 变量名  变量类型 = 值
        var a int=10   //定义了一个int类型的a ,把10赋值给他
    
    方式二:类型推导
        var a =10
        fmt.Println(a)    
        
    方式三:简略声明
        a:=10
        fmt.Println(a)
                        
    注: 1.go语言中变量定义了必须使用,否则报错
        2.变量不能重复定义
        3.强类型语言,类型是固定的
        4.定义不赋初值  :int 类型默认值是0  string 类型默认值是空字符串
        5.可以同时定义多个变量
            -var a,b int=10,20
            -var a,b=10,"666"
            -a,b:=10,"lqz"
            
            
-变量类型
    -bool类型:表示一个布尔值,值为 true 或者 false    
        a := true
        b := false
        fmt.Println("a:", a, "b:", b)
        a: true b: false  
        
    -数字类型:
         -有符号
            int8   8 位   -128~127(2**7-1)
            int16  16 位  -32768~32767(2**15-1)
            int32  32 位  .....
            int64  64 位  
            int  在 32 位系统下是 32 位,而在 64 位系统下是 64 位。
         -无符号
            uint8   8 位   2**8
            uint16  16 位  2**16
            uint32  32 位  2**32
            uint64  64 位  2**64
            uint  在 32 位系统下是 32 位,而在 64 位系统下是 64 位。
            
        -浮点型
            float32:32 位浮点数
            float64:64 位浮点数
        -complex64类型:复数
        -byte: uint8的别名
        -rune:int32的别名
                
    -string 类型:是字节的集合
        var a string="lqz"
        
        var c string=`阿斯蒂芬a
            手动阀afd阿斯蒂芬
            安抚
            asfd阿萨德f`
            
        var a string="阿发" +
            "按时发大水f" +
            "agessdfas" +
            "按时发大水发d"
        注:字符串(必须用双引号),反引号是python中的三引号
        
    -常量:恒定不变的量  用const定义
        const b ="192.168.1.1"
        fmt.Println(b)
        
        
    -函数
        语法:
            func关键字 函数名(参数1 类型,参数2 类型) (返回值类型){}
        
        1.无参数,无返回值
            func test()  {
                fmt.Println("xxx")

            }
            
        2.有多个参数
            func test(a ,b int,c string)  {
                fmt.Println(a+b)
            }

        3.返回多个值
            func test(a,b int) (int,string)  {
                return a+b,"成功"
            }
            
        4.有一个返回值,一定要指定返回值类型
            func test(a,b int) int {
                return a+b
            }
            
            func test(a,b int) string {
                return "lqz"
            }
            
        5.命名返回值
            func test(a,b int) (c int, d string)  {
                c=10
                d="成功"
                return
            }
            
        6.不定长参数
            func test(a ...interface{})  {
                fmt.Println(a)

            }
            
            
        7.闭包函数
            定义:在函数内部,对外部作用域有引用
            函数是一等公民:可以把函数赋值给一个变量,函数就是一等公民


            注:在go中没有关键字参数与默认参数,都是位置参数
            
            
        package main

        import "fmt"

        func main() {
            test()
            test(1,2)
            var a int=test(1,2)
            var a =test(1,2)
            var a string
            a =test(1,2)
            fmt.Println(a)
            var a int
            var b string
            a,b:=test(1,2)
            不要第二个返回值
            a,_:=test(1,2)
            fmt.Println(a)
            fmt.Printf(_)
            a:=test()
            fmt.Printf(a)
            test(a=10,b=21)
            fmt.Println(1,"lqz")
            test(1,"lqz")

        }

相关推荐