[系列] Go 使用 defer 函数 要注意的几个点

概述 defer函数大家肯定都用过,它在声明时不会立刻去执行,而是在函数return后去执行的。 它的主要应用场景有异常处理、记录日志、清理数据、释放资源等等。 这篇文章不是分享defer的应用场景,而是分享使用defer需要注意的点。 咱们先从一道题开始,一起来感受下... funccalc(indexstring,a,bint)int{ ret:=a+b fmt.Println(index,a,b,ret) returnret } funcmain(){ x:=1 y:=2 defercalc("A

  • 0
  • 0
  • 阅读 ( 1391 )

Go语言底层知识总结【新手必学】

前言 本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。作者:YID_152接下来我们来给大家分享想go的基础知识要点:如果你也刚学go不久,问题也多,可以来小编小编的go语言golang开发交流.裙:一领一流久而易期领领(数字的谐音)转换下可以找到了,里面有最新go语言golang教程及项目实战,有问题多请

  • 0
  • 0
  • 阅读 ( 1211 )

Go语言实现:常见排序算法

  冒泡排序: 时间复杂度:O(n^2) 稳定性:稳定 //冒泡排序 //相邻两位交换,12交换,23交换,34交换,把最大的数放到最右边 //利用flag标记可以避免无效循环 funcBubbleSort(arr[]int){ length:=len(arr) //length是最后一位,i<length-1,查询到倒数第二位 fori:=0;i<length-1;i++{ //true表示此次循环没有发生交换 flag:=true //每次循环j都从0开始,然后j++

  • 0
  • 0
  • 阅读 ( 1142 )

Go使用变量类型声明和方法的注意事项

当我们通过把一个现有(非interface)的类型定义为一个新的类型时,新的类型不会继承现有类型的方法。
 神马意思?来一段简短错误的代码:
 
 packagemain
 import"sync"
 typemyMutexsync.Mutex
 funcmain(){
 varmtxmyMutex
 mtx.Lock()
 mtx.Unlock()
 }
 
 输出:
 
 #command-

  • 0
  • 0
  • 阅读 ( 1186 )

Go 修改map slice array元素值

在“range”语句中生成的数据的值其实是集合元素的拷贝。它们不是原有元素的引用。这就意味着更新这些值将不会修改原来的数据。我们来直接看段示例:
 
 packagemain
 
 import"fmt"
 
 funcmain(){
 data:=[]int{1,2,3}
 for_,v:=rangedata{
 v*=10//原始元素未更改
 }
 fmt.Println("data:",data)//输出data

  • 0
  • 0
  • 阅读 ( 1575 )

go 中recover捕获异常

recover仅在延迟函数defer中有效,在正常的执行过程中,调用recover会返回nil并且没有其他任何效果.重要的事再说一遍:仅当在一个defer函数中被完成时,调用recover()才生效。
 我们来一段错误的代码:
 
 packagemain
 
 import"fmt"
 
 funcmain(){
 recover()//无任何作用
 panic("停止运行")
 recover()//不会执行到

  • 0
  • 0
  • 阅读 ( 1378 )

golang中,new和make的区别

在golang中,make和new都是分配内存的,但是它们之间还是有些区别的,只有理解了它们之间的不同,才能在合适的场合使用。 简单来说,new只是分配内存,不初始化内存;而make即分配又初始化内存。所谓的初始化就是给类型赋初值,比如字符为空,整型为0,逻辑值为false等。 new 先看下new函数的定义 //Thenewbuilt-infunctionallocatesmemory.Thefirstargumentisatype, //notavalue,andthevaluereturnedisa

  • 0
  • 0
  • 阅读 ( 1100 )

goweb- 对请求的处理

对请求的处理 Go语言的net/http包提供了一系列用于表示HTTP报文的结构,我们可以使用它 处理请求和发送相应,其中Request结构代表了客户端发送的请求报文,下面让我们看 一下Request结构体 获取请求URL Request结构中的URL字段用于表示请求行中包含的URL,改字段是一个指向 url.URL结构的指针  Path字段 获取请求的URL 例如:http://localhost:8080/hello?username=admin&password=123456 注:通过r.U

  • 0
  • 0
  • 阅读 ( 1297 )

GO语言规范

  1、golang的命名推荐使用驼峰命名法,必须以一个字母(Unicode字母)或下划线开头,后面可以跟任意数量的字母、数字或下划线。2、golang中根据首字母的大小写来确定可以访问的权限。无论是方法名、常量、变量名还是结构体的名称,如果首字母大写,则可以被其他的包访问;如果首字母小写,则只能在本包中使用 可以简单的理解成,首字母大写是公有的,首字母小写是私

  • 0
  • 0
  • 阅读 ( 1067 )

[golang] nats的消息传递模型介绍

目录 nats的消息传递模型 WhatisNATS 主题式消息(Subject-BasedMessaging) 发布订阅(Publish-Subscribe) 请求应答(Request-Reply) 队列组 Acknowledgements nats的消息传递模型 @ WhatisNATS nats是一个go语言开发的开源的、轻量、高性能的原生消息系统。nats消息由主题处理,不依赖于网络位置。它提供了应用程序或服务与底层物理网络之间的抽象层。数据被编码并作为消息,由发布者发送。消息由一个或

  • 0
  • 0
  • 阅读 ( 1094 )

goweb-http协议

先链接到一个我的另一篇有关HTTP的博客 第一次访问时会有些慢~~~ http协议 因为编写Web应用必须对HTTP有所了解,所以我们对HTTP进行介绍 HTTP协议简介 HTTP超文本传输协议(HTTP-Hypertexttransferprotocol),是一个属于应用层的 面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990 年提出,经过几年的使用与发展,得到不断地完善和扩展。它是一种详细规定

  • 0
  • 0
  • 阅读 ( 1354 )

goweb-搭建服务

web应用简介 Web应用在我们的生活中无处不在。看看我们日常使用的各个应用程序,它们要 么是Web应用,要么是移动App这类Web应用的变种。无论哪一种编程语言,只要 它能够开发出与人类交互的软件,它就必然会支持Web应用开发。对一门崭新的编程 语言来说,它的开发者首先要做的一件事,就是构建与互联网(Internet)和万维网(World WideWeb)交互的库(library)和框架,而那些更为成熟

  • 0
  • 0
  • 阅读 ( 1122 )

[Go] 利用函数类型实现封装中的回调

当进行业务逻辑开发的时候,经常要进行封装,封装成独立的类文件,在类文件的属性中预留出函数类型的API
 在调用该类文件中某些方法的时候,也根据业务需要调用类属性中的函数,
 在主业务中可以传递特定的函数注册到属性中,也会被调用到
 test.php 
 
 packagemain
 
 import"log"
 
 funcmain(){
 c:=NewConn(callback,callback2)
 c.Start

  • 0
  • 0
  • 阅读 ( 911 )

【Go入门学习】理解区分数组和切片

一、前言   学过Go的都知道在Go语言中有四种复合数据类型:数组、切片(Slice)、哈希表(Map)和结构体(Struct),而很多Go初学者也很容易把数组和切片弄混淆,所以要怎么把这两个数据类型分清楚呢?       二、数组 1.简介   数组是聚合类型,是一组同类型数据的集合,通过从0开始的下标索引访问元素值。在Go语言中,数组是值类型,这就意味着当你将一个数组赋

  • 0
  • 0
  • 阅读 ( 1083 )

[Go] 实现websocket服务端

直接使用官方子包可以实现websocket协议,
 golang.org/x/net/websocket
 如果在这个目录没有这个包就去github下载net库,放进这个目录$GOPATH/src/golang.org/x/net就行了
 服务端代码:
 
 
 packagemain
 
 import(
 "time"
 "log"
 "net/http"
 "golang.org/x/net/websoc

  • 0
  • 0
  • 阅读 ( 809 )

Golang中的布隆过滤器

目录 1.布隆过滤器的概念 2.布隆过滤器应用场景 3.布隆过滤器工作原理 4.布隆过滤器的优缺点 5.布隆过滤器注意事项 6.Go实现布隆过滤器 1.布隆过滤器的概念 布隆过滤器(BloomFilter)是由HowardBloom在1970年提出的二进制向量数据结构,它具有很好的空间和时间效率,被用来检测一个元素是不是集合中的一个成员,即判定“可能已存在和绝对不存在”两种情况。如果检测结果为是

  • 0
  • 0
  • 阅读 ( 1293 )

[Go] golang定时器的使用

golang中的定时器是使用的chanel阻塞来实现的,主要使用到了time包中的内容,如果有多个定时器的channel,为了防止阻塞,可以使用select来获取遍历channel
 定时器获取的channel是个单通道channel,只能读不能写,定义时这样来定义vartest<-chanint
 
 packagemain
 
 import(
 "fmt"
 "time"
 )
 
 funcmain(){&#13

  • 0
  • 0
  • 阅读 ( 909 )

GO与PHP的AES交互,key长度问题

今天在使用go与php的AES加解密交互中,一直有个问题那就是在go中加密后,在php端始终都是无法解密,经过排查最后发现是加密key长度引起的问题,这里简单记录下。 go的AES使用的是第三方的库,openssl,因为用的匆忙,没注意看文档,所以就直接弄了示例代码,才发现和php端无法解密,其实在文档中它其实讲的很清楚了,“Thelengthofthekeycanbe16/24/32characters(128/192/256bits)”,这个key

  • 0
  • 0
  • 阅读 ( 1200 )

Golang设置https访问,以及http如何重定向到https

设置https访问: 原始代码为http监听: funcmain(){ server:=&http.Server{ Addr:":8080", ... } gofunc(){ iferr:=server.ListenAndServe();err!=nil&&err!=http.ErrServerClosed{ log.Fatalf(err,"Listen:%sn") } }() ... } 变为https监听: funcmain(){ se

  • 0
  • 0
  • 阅读 ( 1994 )

国内的go get问题的解决 --gopm


 一、golang之旅--gopm
 1.什么是gopm
 在nodejs中我们有npm,可以通过npm来下载安装一些依赖包。在go中也开发了类似的东西,那就是gopm。这玩意儿是七牛开发的。在这里说下,七牛公司大部分程序都是用go语言编写的,所以开发出这么一个方便的东西肯定也是合情合理的。
 2.gopm地址
 git地址:https://github.com/gpmgo/gopm官方地址:https://gopm.io/gopm文档路径:https://git

  • 0
  • 0
  • 阅读 ( 1226 )