zoukankan      html  css  js  c++  java
  • golang-基础

    1.go的特点

      兼具动态语言的开发效率与C,C++,java的性能安全性 ,内置编译器

    2.go的安装

      go的sdk下载:  https://studygolang.com/dl

      go的IDE下载: https://www.jetbrains.com/go/ 

    3.go run与go build

      go run 编译后直接执行

      go build 编译成二进制文件 ,源码文件会小于编译文件 ,编译文件包含了其他依赖

    4.数据类型

      数据类型是让编程语言,编译器,数据库,代码环境知道如何去操作处理数据的

      强类型语言:错误的使用数据类型将会报错 ,数据类型变换需要强制转换(go,python)

      弱类型语言:为了程序的执行,在运行时将一种数据类型转换为另一种(bash-shell ,js)

      静态语言:编译执行性能高 ,编译器检查数据类型正确, 安全性与性能(go)

      动态语言:快速的开发效率 ,可移植性和兼容性好 ,简单与开发速度(python)

    5.go声明变量

      显示声明:全局变量必须使用显示声明 ,也可用于函数中

      简短声明:函数内变量多使用简短声明 ,不用于全局

    6.go的内置基本数据类型

      布尔类型 :在go中布尔值仅仅是 "true" 和 "false" ,任何零值都无法作为布尔值直接判断

      数值类型 :整形带符号int和不带符号uint ,带符号是首位0,1用来表示符号有无 ,go中是用int会自动判断是int64还是int32 

            浮点型单精度双精度浮点数 ,float32和float64

      字符串类型 :string

      数组 :go的数组是类型和长度固定的

    7.检查变量的类型

      标准库的reflect包

     1 package main
     2 
     3 import (
     4     "fmt"
     5     "reflect"
     6 )
     7 
     8 func main() {
     9     a := 1
    10     b:= "1"
    11     c := true
    12     d := [3]string{"1","2","3"}
    13     fmt.Println(a,reflect.TypeOf(a))
    14     fmt.Println(a,reflect.TypeOf(b))
    15     fmt.Println(a,reflect.TypeOf(c))
    16     fmt.Println(a,reflect.TypeOf(d))
    17 }
    View Code

    8.数值类型转换

      整数与浮点的转换

     1 package main
     2 
     3 import (
     4     "fmt"
     5     "reflect"
     6 )
     7 
     8 func main() {
     9     i := 1
    10     n := 2.7
    11     fmt.Println(i,reflect.TypeOf(i),n,reflect.TypeOf(n))
    12     i1 := float64(i)
    13     n1 := int(n)
    14     fmt.Println(i1,reflect.TypeOf(i1),n1,reflect.TypeOf(n1))
    15 }
    View Code

      浮点数的计算问题处理

        浮点数存储在内存时 ,此方不能精准表示小数部分 使用第三方decimal包来解决

    package main
    
    import (
       "fmt"
       "github.com/shopspring/decimal"
    )
    
    func main() {
       var m,n float64 = 14.1,13.5
       //浮点数存储在内存,次方不能精准表示浮点数就会出现偏差  (除法乘法问题)
       fmt.Println(m-n)   
       fmt.Println(m*n)
       fmt.Println(m/n)
       fmt.Println(m+n)
       q1 := decimal.NewFromFloat(m).Sub(decimal.NewFromFloat(n))
       q2 := decimal.NewFromFloat(m).Add(decimal.NewFromFloat(n))
       q3 := decimal.NewFromFloat(m).Mul(decimal.NewFromFloat(n))
       q4 := decimal.NewFromFloat(m).Div(decimal.NewFromFloat(n))
       fmt.Println(q1,q2,q3,q4)
    }
    View Code

      字符串与整型之间的转换 使用标准库的strconv包

        字符串转整数可能会出现异常 ,根据go的错误处理机制 ,调用者需要接收错误处理 ,所以Atoi函数有两个返回值接收

    package main
    
    import (
        "fmt"
        "reflect"
        "strconv"
    )
    
    func main() {
        str1 := "192"
        int1 := 192
        fmt.Println(str1, reflect.TypeOf(str1), int1, reflect.TypeOf(int1))
        str2, err := strconv.Atoi(str1)
        fmt.Println(str2, reflect.TypeOf(str2), err)  //str2是字符串被转换为整型
        int2 :=strconv.Itoa(int1)
        fmt.Println(int2, reflect.TypeOf(int2), err)  //int2是整数被转为字符串
    }
    View Code

      Parse类函数 :将string转换为其他类型(bool int float uint) 

        base: 转换为多少进制 basesize: 转化为多少位 

        返回的错误由" _ "黑盒子收走

    package main
    
    import (
        "fmt"
        "reflect"
        "strconv"
    )
    
    func main() {
        a, b, c, d := "true", "-12", "10", "3.14"
        a1, _ := strconv.ParseBool(a)
        b1, _ := strconv.ParseFloat(d, 64)    //指定转为64或32类型
        c1, _ := strconv.ParseInt(b, 10, 64)  //指定base:进制,basesize:64或43
        d1, _ := strconv.ParseUint(c, 10, 64)  //指定base:进制,basesize:64或43
        fmt.Println(reflect.TypeOf(a1), reflect.TypeOf(b1), reflect.TypeOf(c1), reflect.TypeOf(d1))
    }
    View Code

      Format类函数 :将其他类型转换为string类型

        base: 转换为多少进制 basesize :64

        只能对int64 ,float64 ,uint64做转换 ,其中浮点转为字符串会格式化

     1 package main
     2 
     3 import (
     4     "fmt"
     5     "reflect"
     6     "strconv"
     7 )
     8 
     9 func main() {
    10     var (
    11         a bool    = true
    12         b int64   = -12
    13         c uint64  = 6
    14         d float64 = 3.14
    15     )
    16     a1 := strconv.FormatBool(a)
    17     b1 := strconv.FormatInt(b, 10)
    18     c1 := strconv.FormatUint(c, 10)
    19     d1 := strconv.FormatFloat(d, 'E', -1, 64)
    20     fmt.Println(reflect.TypeOf(a1), reflect.TypeOf(b1), reflect.TypeOf(c1), reflect.TypeOf(d1), )
    21 }
    View Code

     9.变量

      变量由字母数字下划线组成 ,开头不能是数字

      声明变量:关键字var声明 ,快速声明 ,简短声明

     1 package main
     2 
     3 var StartNum int = 1970  //var声明
     4 func main() {
     5     var (                //快速声明
     6         a string = "a"
     7         b string = "b"
     8     )
     9     c,d,e:= 1,2,3        //简短声明 (只能在函数中使用)
    10     //......
    11 }
    View Code

     10.零值

      变量声明不赋值 ,此时等于该类型的零值

      不同数据类型零值不同: bool(false) ,int(0) ,float(0.0) ,string("") ,剩下的slice ,array ,map ,function ,interface ,pointer..都是nil 

      对于复合类型 ,go会对每个元素初始化为其零值

      判断变量是否赋值 ,可以检查它是否等于该类型的零值!!!

    11.常量

      常量就是本次编译后无法在程序运行中改变的量

      const StartTime int = 1970        #StartTime就是常量

    12.变量的作用域

      go中一个大括号 "{}" 就是一个块 ,在块内声明变量 ,该块内任意使用 (go的文件也是块 ,相当于声明全局变量)

      对于嵌套块来说 ,内部块可以访问外部块变量 ,外部块无法访问内部块变量

    13.指针

      指针也是一种类型pointer ,用来存储变量内存地址

      go语言中 ,如果直接赋值 ,或将变量传到函数 ,就会开辟内存复制副本 

      指针可以指向原有变量访问 ,而无需复制副本 ,指针引用会修改源值 ,值引用不会

      创建指针 : prt := &变量       #其中&可以获得变量的内存地址

      使用指针 : *ptr         #获得指针指向的变量的值

     1 package main
     2 
     3 import "fmt"
     4 
     5 func main() {
     6     a := []int{}
     7     a = append(a, 1, 2, 3, 4)
     8     ptra := &a                       #创建指针存储a的内存 
     9     vala := a                         #创建a的副本
    10     fmt.Printf("a内存地址为%p,ptra内存地址为%p,vala内存地址为%p", &a, &*ptra, &vala)
    11 }
    View Code
  • 相关阅读:
    在人生路上对我影响最大的三位老师
    秋季学期学习总结
    转载非原创 Windows编程革命简史
    转载 关于12360系统的讨论
    SQLServer 触发器
    sqlserver 自定义函数
    jQuery 动画
    jQuery让页面生动起来(操作页面里面的元素)
    jQuery选择元素
    SqlServer_Case_When用法
  • 原文地址:https://www.cnblogs.com/quguanwen/p/11747560.html
Copyright © 2011-2022 走看看