zoukankan      html  css  js  c++  java
  • go语言入门

    我在这区别式C进行总结知识点

    1.增加数据类型

      字典map 

    package main
     
    import "fmt"
    
     func main() {
    testmap := make(map[string]int) //表示创建一个key为string,value的值为int的数据类型。
         testmap["dont"] = 24
         fmt.Println(testmap)
     }

      数组切片(类似于stl中的vector容器)

    package main
    
    import "fmt"
    
    func main() {
       var numbers []int  //声明一个数组
       printSlice(numbers)
       /* 允许追加空切片 */
       numbers = append(numbers, 0)
       printSlice(numbers)
    
       /* 向切片添加一个元素 */
       numbers = append(numbers, 1)
       printSlice(numbers)
    
       /* 同时添加多个元素 */
       numbers = append(numbers, 2,3,4)
       printSlice(numbers)
    
       /* 创建切片 numbers1 是之前切片的两倍容量*/
       numbers1 := make([]int, len(numbers), (cap(numbers))*2)
    
       /* 拷贝 numbers 的内容到 numbers1 */
       copy(numbers1,numbers)
       printSlice(numbers1) 
    }
    func printSlice(x []
    int){    fmt.Printf("len=%d cap=%d slice=%v ",len(x),cap(x),x) }

    2.函数多返回值的特性,对于忽略不关心的返回值可以使用“_”来占位填充。

    3.错误处理:

      defer():延迟调用,多个defer,依次入栈,在函数即将退出时,依次出栈调用

    package main
    import "fmt"
    func main() {
          defer func() {
              fmt.Println("defer one")   
          }()
          defer func() {
              fmt.Println("defer two")   
          }()
         defer func() {
             fmt.Println("defer three")  
         }()
     }

      panic():单独使用其后的代码不会执行;

          与defer结合使用,panic触发错误,defer依次出栈调用,没有recover捕获的情况下,最后才打印错误;

          与defer、recover结合使用,panic触发错误,defer依次出栈调用,直到被recover捕获,打印捕获的信息,之后继续defer出栈。

      recover():只有在defer中调用,才有效,否则返回nil

    4.并发编程

    启动goroutine模式,即启动协程,搭配channel(通道)联合使用

      goroutine是go语言中并发的执行单位。channel是go语言中各个goroutine之间的通信机制

    package main
    
    import "fmt"
    
    func main(){
          messages := make(chan string)
          go func(){messages <- "ping"}      
    }

    5.反射

      反射就是用来检测存储在接口变量内部(值value;类型concrete type) pair对的一种机制。

      基本功能:

        ①TypeOf:获取目标对象的类型,TypeOf:获取目标对象的值

        示例:

    package main
    
    import (
        "fmt"
        "reflect"
    )
    func main() {
        var num float64 = 1.2345
    
        fmt.Println("type: ", reflect.TypeOf(num))
        fmt.Println("value: ", reflect.ValueOf(num))
    }
    
    运行结果:
    type:  float64
    value:  1.2345

        ②获取接口信息

        ③设置实际变量的值

        ④进行方法的调用

    参考链接:https://studygolang.com/articles/12348?fr=sidebar

    6.对于常量的赋值是编译器行为,故右值不能出现任何需要运行期才能得出结果的表达式

    7.预定义变量“itoa:0”,默认值为0,每遇到一个const就被重置为0,进行下一次从0累加。

    8.循环方式:采用for、range

    9.内置函数make(类型,参数)——创建变量

    10函数命名规则:小写字母开头的函数只在本包内可见,大写字母开头的函数才能被其他包使用

  • 相关阅读:
    CMS初步认识
    Java编程之Map中分拣思想。
    html页面中event的常见应用
    Html页面Dom对象之Event
    mysql 之mvcc多版本控制
    关于分布式锁原理的一些学习与思考-redis分布式锁,zookeeper分布式锁
    除了写代码,程序员还能做哪些副业呢?
    MySQL表类型MyISAM/InnoDB的区别(解决事务不回滚的问题)(转)
    MySQL的innoDB锁机制以及死锁处理
    Kafka、RabbitMQ、RocketMQ消息中间件的对比 —— 消息发送性能-转自阿里中间件
  • 原文地址:https://www.cnblogs.com/single-dont/p/13307715.html
Copyright © 2011-2022 走看看