Go语言中文网 为您找到相关结果 54

学习go语言碰到的问题:main redeclared in this block

E:\goapp 是我的GOPATH目录 分别建立了2个文件: hello.go // hello package main import "fmt" func main() { fmt.Println("Hello World! 你好,世界!") } sandbox.go // sandbox package main import ( "fmt" "time" ) func main() { fmt.Println("Welcome to the playground!") fmt.Println("The time is ", time.Now()) } 在liteide运行BR的时候报错了:main redeclared in this block previous declarat...阅读全文

博文 2015-06-17 23:02:23 lz0426001

Golang中range的使用方法及注意事项

一、用法range类似迭代器,可以遍历数组,字符串,map等等,对象的不同,返回的结果也不同。 12345678910111213141516171819package mainimport "fmt"func main(){ //数组的遍历 a := [3]int {1, 2, 3} for i, n := range a{ fmt.Println(i, n) } //切片的遍历 b := []int{2, 3, 4} for i, n := range b{ fmt.Println(i, n) } //map的遍历 c := map[string]int{"Hello":1, "World":2} for k, v := range c{ fmt.Println(k, v) }} 结果:...阅读全文

博文 2018-05-17 09:25:56 马谦的博客

Go-数组去重

package main import( "fmt" "sort" ) func RemoveDuplicatesAndEmpty(a []string) (ret []string){ a_len := len(a) for i:=0; i < a_len; i++{ if (i > 0 && a[i-1] == a[i]) || len(a[i])==0{ continue; } ret = append(ret, a[i]) } return } func main(){ a := []string{"hello", "", "world", "yes", "hello", "nihao", "shijie", "hello", "yes", "nihao","good"} sort....阅读全文

博文 2016-04-04 12:00:05 shuanger_

golang http请求数据怎么传body体参数

```res, err := http.PostForm("https://127.0.0.1:8443/api/test.action", req.Form)``` 通过http.PostForm可以请求到地址,但是参数不是以body体传过去,是还要设置什么吗?学生党不太了解... ``` {"baseId":["16149460-5984-4ea0-9308-835b804d063f"],"datetime":["20170401"],"userId":["51"]} {"code":1,"data":"parse param failed","errorMsg":"网络异常"} ``` ***req.Form***中有这些参数,接口是只接收body体的请求,如果bo...阅读全文

golang 里面使用oracle驱动包访问oracle DB

1.首先在github上面下载包文件 https://github.com/tgulacsi/goracle 2.设置的编译环境 不设置编译环境,不然go build 会出现: # github.com/tgulacsi/goracle/oracle src/github.com/tgulacsi/goracle/oracle/connection.go:23:17: error: oci.h: No such file or directory src/github.com/tgulacsi/goracle/oracle/connection.go:25:16: error: xa.h: No such file or directory 他给出的编译环境脚本,但是看起来比较复杂,其实就两...阅读全文

博文 2017-02-09 16:53:41 不高兴和没头脑

Go数据结构之栈

一、什么是栈​这是杭州地铁1号线线路图。大卫哥考考大家,地铁列车如何调头?我也不卖关子了,列车通常是用“人字轨道”来变换车道。​列车先从A轨道开进“人字轨道”里,再从B轨道开出。从A轨道开进去的时候1号车厢是车头,从B开出来的时候4号车厢就变成车头了。所以大家看到地铁前后各一个车头。“人字轨道”有个特点:先进后出,英文简写就是FILO,含义自己体会。计算机专家把“人字轨道”抽象出来,提出了一个叫“栈”的概念。​栈和“人字轨道”的特点是一样的FIFO,只不过把车厢换成了数据。接下来,看大卫哥把栈扒的底裤不剩。二、栈的结构​大卫哥把栈拆分成容器和链表两块,容器用结构体实现,链表用单链表,当然大家也可以用其他链表结构,甚至数组来实现。三、接口说明及实现​1、Init初始化栈,其实就是初始化里面的链...阅读全文

博文 2017-11-16 02:29:29 rhan-zz

http: TLS handshake error from x.x.x.x:44063: EOF 问题

作为一个小白来说,碰到问题太正常,我已经熟练的掌握了如何百度 今天要把监听的接口,从http改为https 一切都很正常 知道我向监听接口发送消息,突然蹦出来一堆,error,但是我却能正确的接收到我发送消息的内容 Error 这已经不是第一次报了,上午刚刚监听另一个端口时候也会报同样的错误 我以为是我写的监听方式错了,然后我按照这个帖子:Golang学习笔记之HTTPS 重新写了一次 这位大佬帖子中的方法 然后一试,发现没有报错了,换回之前的方法也没有报错 突然有些迷茫,知不道自己错在哪里了当下午又出现了这种错误,无奈还是需要百度解决一下,突然发现这篇帖子(TLS握手错误)里说到 Based on the error, you need to access docker registry ...阅读全文

博文 2020-03-31 23:32:57 她声音清澈丶

[thinking] 基于 golang interface 特性衍生的插件化处理思维

在设计程序的许多应用场景中我们会遇到大体分为三个阶段的任务流。 第一、入口 一个或多个入口,等待阻塞的、或者主动请求方式的。 ============================== 比如任务流需要接受来自于 HTTP 和 FTP 的应用请求,后续还有可能增加别的方式的接受请求。 第二、处理 多个入口可以对应一个处理程序,也可以对应多个处理程序。 ================================== 比如 HTTP 和 FTP 的多个入口程序需要对应一个和多个处理逻辑,同样也面临着增加处理程序的扩展性问题。 第三、出口 多个处理程序或者一个处理程序对应多个出口或者一个出口。 ================================== 比如报警方式有邮件报警、微信...阅读全文

博文 2016-04-14 02:00:01 mydevops

Golang iris 解决CORS跨域问题

先创建一个函数用来统一处理请求头 // Cors func Cors(ctx iris.Context) { ctx.Header("Access-Control-Allow-Origin", "*") if ctx.Request().Method == "OPTIONS" { ctx.Header("Access-Control-Allow-Methods", "GET,POST,PUT,DELETE,PATCH,OPTIONS") ctx.Header("Access-Control-Allow-Headers", "Content-Type, Accept, Authorization") ctx.StatusCode(204) return } ctx.Next() } 然后在初始...阅读全文

博文 2019-12-16 11:32:45 韬大帅

Go语言Slice去重

package main import ( "fmt" ) func main() { a := []int{2, 1, 2, 5, 6, 3, 4, 5, 2, 3, 9} z := Rm_duplicate(&a) } func Rm_duplicate(list *[]int) []int { var x []int = []int{} for _, i := range *list { if len(x) == 0 { x = append(x, i) } else { for k, v := range x { if i == v { break } if k == len(x)-1 { x = append(x, i)...阅读全文

博文 2016-02-08 22:00:00 fyxichen

Golang之双向认证

此篇文章主要介绍https用Golang生成证书和Golang实现https认证的过程,至于ssl/tls相关的知识点,我在文章末尾会附上我个人觉得对读者有用的文章。单向验证过程:客户点包含ca.crt,服务端包含server.key和server.crt;客户端:客户端生成一个随机数random-client,传到服务器端;服务端:服务器端接收消息之后,生成一个随机数random-server和包含公钥的证书,一起回馈给客户端;客户端:客户端收到的东西原封不动,加上premaster secret(通过random-client、random-server 经过一定算法生成的数据),再一次送给服务器端,这次传过去的东西是经过服务端的公钥进行加密后数据;服务端:服务端经过私钥(server....阅读全文

博文 2018-07-02 23:34:40 取个帅气的昵称华华

golang glide,vendor使用指南

公司打算用glide管理第三方包,研究了一下他的使用方法,遇到一些坑,故记录一下。(环境 Darwin)安装go get github.com/Masterminds/glide初始化glide init(create)问题:工程目录: src$echo $GOPATH /Users/shaozhenyu/go src$pwd /Users/shaozhenyu/test/event/src 此时初始化的时候会把内部的包都放进去,显然这是不对的 [INFO]--> Found reference to decode [INFO]--> Adding sub-package adview to decode [INFO]--> Found reference to handle [INFO]-...阅读全文

博文 2017-07-13 11:06:34 Tibbersshao

sendmail收到邮件但是body无内容

func SendMail(addr string, a Auth, from string, to []string, msg []byte) error 使用这个接口来发邮件。 收到邮件以后body是空的。 请教一下,这个方法里第五个参数msg的格式是什么啊。 我想看字符串的格式。 我传过去的第五个参数转成字符串后是这样的 From: daemon Subject: Diagnostic message from server: message from daemon haha here is the content ...阅读全文

go 服务器出现too many open files的错误

最近两天服务器总是会出现too many open files的错误。真的很是头疼。在本地开发环境中,也用了压力测试,发现问题不存在。但是为什么服务器会出现这种错误,有些闹不明白。本来想用ulimit更改一下打开文件的描述符。但这样子觉得并不解决问题。好吧,那就查一下更本的原因。 服务器是亚马逊,开发语言:golang,数据库:mongo,mysql。缓存:redis。 测试脚本:写了一个golang的并发请求脚本。大概同时请求100.ulimit限制到50.发现错误立刻呈现。发现在程序的进程下打开了大量的socket连接。所以当时就认为是mongo的连接错误。决定mongo的连接使用单例模式。不过后来发现,这些socket是会降下去的。也就是说,连接用完了,就关闭了。但是服务器的socke...阅读全文

博文 2015-06-17 20:12:39 u011511092

go语言不区分大小写的导包,导致的debug 失败

鼠标放上去提示 could not find XXXXX debug失效图片: image.png 原因是go语言导包不区分大小写但是必须一致,由于我的包路径是 admin/util 我统一用Admin/util 来import。这就导致来debug时找不到代码路径,都改为admin就可以debug了。 相关大小写不一致报错 Golang case-insensitive import collision 这个是包导入大小写错误,大小写不一致能够导入,但是不能通过编译...阅读全文

博文 2019-02-21 19:34:46 SailSea

自定义协议/解决tcp粘包问题(golang版本)

Tcp/Udp介绍 Tcp是字节流协议, 数据传输像流水一样没有边界, 那么对等方在一次数据读取后,无法分辨读取是一个消息还是多个,或者是不足一个, 那么对等方拿到"残缺"消息就不知道如何处理. Udp是基于消息的传输服务,每个消息就是一个报文,是有边界的,对等方每次接收都是一个完整的消息.这样就需要我们在应用层,自己来区分. 粘包是如何出现的? 用户进程write消息, 但内核缓存区不足以容乃这个完整的消息, 一个消息分多次发送出去, 接收的时候就可能一个消息分多次接收 Tcp的报文段有大小限制(MSS) IP层最大传输单元(MTU), 会对包进行分片, 其他, Tcp流量控制, 拥塞控制 一般有三种常见的方式 1. 定长消息 发送端和接收端约定消息长度, 缺点: 消息很短时, 效率很低,...阅读全文

博文 2018-11-17 14:34:43 weiwenwang

[Golang] 从零开始写Socket Server(6)【完结】:日志模块的设计与定时任务模块

好久没写文章啦。。。今天把golang挖的这个坑给补完吧~ 作为一个Server,日志(Log)功能是必不可少的,一个设计良好的日志模块,不论是开发Server时的调试,还是运行时候的维护,都是非常有帮助的。 因为这里写的是一个比较简化的Server框架,因此我选择对Golang本身的log库进行扩充,从而实现一个简单的Log模块。 在这里,我将日志的等级大致分为Debug,Operating,Error 3个等级,Debug主要用于存放调试阶段的日志信息,Operateing用于保存Server日常运行时产生的信息,Error则是保存报错信息。 模块代码如下: func LogErr(v ...interface{}) { logfile := os.Stdout log.Println(...阅读全文

博文 2015-10-26 06:00:06 ahlxt123

golang小程序试验(四)

1. golang的函数类型转换 一个go playground的例子,首先定义一个func类型的别名A,然后定义了A的一个方法。再定义一个函数,此函数的参数与返回值与A相同(这样才能显式转换)。在main中把此函数显式转换为A类型,这样它就可以调用A的方法了。 package main import "fmt" type A func(int, int) func (f A)Serve() { fmt.Println("serve2") } func serve(int,int) { fmt.Println("serve1") } func main() { a := A(serve) a(1,2) a.Serve() } 2. golang的http包处理流程 func HelloSer...阅读全文

博文 2014-10-04 19:27:14 壬癸甲乙

Tensorflow-Go的扩展

谷歌的tensorflow虽然提供了go版本,但是官方的说法是: TensorFlow provides APIs for use in Go programs. These APIs are particularly well-suited to loading models created in Python and executing them within a Go application. 意思是go的库只是用来装载python创建的模型,然后执行的,而且在go版本api的godoc中也写到: The tensorflow package currently does not have the ability to export a model to a directory fro...阅读全文

博文 2017-12-23 22:31:02 InsZVA

go语言与所谓的包

import后面接的是目录的名字,而不是所谓包的名字,并且如果一个目录下面还有目录的话都必须要写进去,比如: import "MyPackage" import "MyPackage/MyInnerPackage" 在这里讲明白了import后面接的是目录名而不是文件名更不是所谓的包名,那么一个目录下面的文件可以是多个包的吗?不可以 package main import "MyPackage" import "MyPackage/MyInnerPackage" import "OtherPackage" func main() { MyPackage.MyFunc(); MyPackage.MyFunc(); MyInnerPackage.MyInnerFunc() OtherPackag...阅读全文

GoLang之使用Context控制请求超时

起因   之前接触了一个需求:提供一个接口,这个接口有一个超时时间,如果超时了返回超时异常;这个接口中调用其他的接口,如果调用超时了,所有请求全部结束。  在这个接口中,我使用了go协程去调用其他接口,所以不仅涉及到请求的超时控制,而且还涉及到父协程对子协程的控制问题。在翻阅了一些资料之后,了解到了Context的基本知识。 Context   Context是golang.org.pkg下的一个包,类型是接口类型。主要功能有 父协程控制所有的子协程   Context可以通过context.Background()或者 context.TODO()创建一个空的context。两个区别在于TODO context可以进行派生,创建出子context。context有四种不同的子context...阅读全文

博文 2020-04-02 02:32:45 MACdress

AR技术应用 の 如何做一个Pokemon GO丢出精灵球抓住皮卡丘吧!(2)

连我自己都没猜到居然有2。。 上回讲到了如何让皮卡丘出现在"现实"中。 这次,我们要带上精灵球捕抓皮卡丘了!(啪啪啪 1.创建一个Sphere作为精灵球,然后上贴图。啊!我们是不是设置得太大了,感觉可以直接丢晕皮卡丘了2333 2.接下来我们要扔出精灵球了,其实就是简单的投篮游戏。 ①先记录下精灵球的位置 void StartSet () { Debug.Log("设置精灵球位置"); resetPos = ball.transform.localPosition; } ②根据手指滑动,即点击的地方和手指离开的地方,确定一个力 void Update () { if(Input.GetMouseButtonDown(0)) { downPosX = Input.mousePosition.x...阅读全文

博文 2016-09-16 07:00:04 u014528558

新手求解答 eclipse中运行go Application是出现Resource doesn't have a corresponding Go Package

刚刚接触go,对他还不是很了解。 我在eclipse中运行.go文件时出现Resource doesn't have a corresponding Go Package,按照网上的解答说是应为少了main文件夹,我就在src文件夹下创建了一个main文件夹,将.go文件放进去之后还是出现这个提示,是我创建的方式不对吗,还是因为其他原因? 我在命令提示符中可以运行成功。 ![image.png](https://static.studygolang.com/180314/08e7258a984b46aa81cfe08c9096fca0.png) ...阅读全文

golang append方法,读文件(buff)

今天研究go的复制文件的时候,发现复制出来的文件总是比源文件大了些,程序如下 package main import ( "os" "log" "io" "fmt" ) func main() { file, err := os.Open("C:/Users/Desktop/123123.txt") // For read access. defer file.Close() if err != nil { log.Fatal(err.Error()) } chunks := make([]byte,1024) buff := make([]byte, 1024) for{ count, err := file.Read(buff) if err != nil && err != io.EO...阅读全文

博文 2017-05-19 09:00:20 程序羊

TTL设置问题

最近一个 Spam 项目遇到个问题,有用户反馈无法点赞,查来查去是由于 Redis Key 没有过期时间,导致状态一直没有清除。这块代码逻辑涉及了事务操作。业务逻辑每个用户保存分钟,小时,天 三种维度的计数,当达到一定阈值后,就认为该用户频繁操作,属于 Spam 操作,涉及 redis 代码如下: 原业务逻辑 逻辑具体描述就是 1. 先对给定 Key 做 Incr 操作,取得自增后的 Value 2. 根据 Value 的值来判断是否为第一次设置 3. 如果为 1, 设置一定的过期时间 那么可以看到 Incr 和 SetTTL 原来是一个事务,套用 MySQL 的逻辑,就是这两个操作应该在 Start Transaction 和 End 事务之间。那么当前不是事务,很可能在这两个操作中间程序...阅读全文

博文 2017-02-10 14:30:59 董泽润

golang的类型转换的坑和分析

首先,我们来看一个例子 type Stringer interface { String() string } type String struct { data string } func (s *String) String() string { return data } 上面是类型,然后 func GetString() *String { return nil } func CheckString(s Stringer) bool { return s == nil } func main() { println(CheckString(GetString())) } 你们猜答案是什么? 当然,这么诡异的提问方式一看答案就是不合常理的false。 在CheckString里面,s是...阅读全文

博文 2016-02-18 18:00:01 zltion

Golang interface接口全面理解(二)

Now your life, life in the future to play you, now do not work hard, the future suck. 现在不玩命,将来命玩你,现在不努力,未来不给力。 指针 vs 值类型实现接口 我们在第1部分中讨论的所有示例接口都是使用值receivers 实现的。也可以使用指针receivers 来实现接口。在使用指针receivers 实现接口时需要注意的细微之处。让我们了解使用下面的程序。 package main import "fmt" type Describer interface { Describe() } type Person struct { name string age int } func (p Perso...阅读全文

博文 2018-03-12 16:33:15 90design

《k8s-1.13版本源码分析》-调度预选

本系列文章已经开源到github:https://github.com/farmer-hutao/k8s-source-code-analysis​​​​​​​预选过程预选流程predicate的并发一个node的predicatepredicates的顺序单个predicate执行过程具体的predicate函数1. 预选流程predicate过程从pkg/scheduler/core/generic_scheduler.go:389 findNodesThatFit()方法就算正式开始了,这个方法根据给定的predicate functions过滤所有的nodes来寻找一堆可以跑pod的node集。老规矩,我们来看主干代码:pkg/scheduler/core/generic_sched...阅读全文

博文 2019-03-08 13:27:54 CloudGeek

2015 南阳 CCPC hdu 5546 Ancient Go(DFS,暴力)

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5546 题目大意: 我方棋子是'x',敌方是'o'。现在轮到我方落子,问我方能不能在下一回合吃掉对方的至少一个棋子。 吃掉的规则是:对方被围的棋子在下一回合时已经找不到为' . '的位置。 范围:棋盘大小9*9。 思路: 由于棋盘大小只有9*9,所以我们可以直接暴力枚举'o',对于一个'o'看他四周是否已经被3个及以上的'x'占领。如果多个'o'连在一起,就将其加进去,判断的条件是这个连通块里面是否超过2个'.',如果超过就不能吃掉棋子。否则就直接是可以了。 一个剪枝是:对于这些被访问的'o'进行标记,如果已经访问过就不再去搜了。 代码: #include #include阅读全文

博文 2016-01-28 20:00:01 aaaaacmer

Go数据结构之栈

一、什么是栈 这是杭州地铁1号线线路图。大卫哥考考大家,地铁列车如何调头? 我也不卖关子了,列车通常是用“人字轨道”来变换车道。 列车先从A轨道开进“人字轨道”里,再从B轨道开出。从A轨道开进去的时候1号车厢是车头,从B开出来的时候4号车厢就变成车头了。所以大家看到地铁前后各一个车头。“人字轨道”有个特点:先进后出,英文简写就是FILO,含义自己体会。计算机专家把“人字轨道”抽象出来,提出了一个叫“栈”的概念。 栈和“人字轨道”的特点是一样的FIFO,只不过把车厢换成了数据。接下来,看大卫哥把栈扒的底裤不剩。 二、栈的结构 大卫哥把栈拆分成容器和链表两块,容器用结构体实现,链表用单链表,当然大家也可以用其他链表结构,甚至数组来实现。 三、接口说明及实现 1、Init 初始化栈,其实就是初始化...阅读全文

博文 2017-11-16 03:05:04 懒人记

golang的http包笔记

最近打算用golang做项目,看了一下golang的资料,顺便做一下笔记,以供参考,复习. 由于对golang的熟悉度还不是很高,写的有点生疏了,也希望能对大家有帮助吧. 示例源码: packagemain import( "log" "net/http" ) func sayHelloName (w http.ResponseWriter,r*http.Request){ w.Write([]byte("hello,world!")) } func main(){ http.HandleFunc("/",sayHelloName) err:=http.ListenAndServe(":8080",nil) iferr!=nil{ log.Fatal("ListenAndServe:",er...阅读全文

博文 2016-01-27 05:00:01 x87648510

golang的一些常用函数

func main() { slice1 := []int{1, 9, 3, 5, 6, 2, 4, 2, 8, 9, 7, 6, 3, 2, 4, 6} // slice2 := make([]int32, len(slice1)) //对slice1进行排序 for i := 0; i < len(slice1)-1; i++ { for j := i + 1; j < len(slice1); j++ { if slice1[i] > slice1[j] { slice1[i], slice1[j] = slice1[j], slice1[i] } } } fmt.Println(slice1) //去重 m := make(map[int]bool, 0) s := make([]i...阅读全文

博文 2016-04-09 17:00:07 Samete9011

Awesome go 增强

作为一个gopher,会经常查找golang已有的软件包,这个时候查看Github上的 [Awesome go](https://github.com/avelino/awesome-go) 中已经分门别类列出来的资源是经常的事。 但是,这个项目只是把github中的项目分类列出来而已,满足我的项目需求的包可能有很多个,我要从这些包中选择出最适合我的包,比如我的选择条件是: 1. star或者fork多,这说明gopher大众的认可程度高; 2. commits 或者 contributors 多,这说明项目的升级维护可能有保障; 3. 看license是不是支持商用,我首选Apache2.0,其次是MIT,其他的都得掂量掂量。 一个项目一个项目的点进去看这些数据,这种选择...阅读全文

golang的类型转换的坑和分析

首先,我们来看一个例子 type Stringer interface { String() string } type String struct { data string } func (s *String) String() string { return s.data } 上面是类型,然后 func GetString() *String { return nil } func CheckString(s Stringer) bool { return s == nil } func main() { println(CheckString(GetString())) } 你们猜答案是什么? 当然,这么诡异的提问方式一看答案就是不合常理的false。 在CheckString里面,...阅读全文

博文 2017-02-09 13:42:21 Cheney

golang 走起(六) 超时

golang 走起(六) 超时 代码: package main import ( "log" "time" ) func main() { ch := make(chan int, 2) to := make(chan bool) defer func() { close(ch) close(to) log.Println("h") }() go func() { time.Sleep(time.Second) to <- true }() go func() { m := <- ch log.Println("recv ok, m:", m) time.Sleep(time.Second * 2) }() for i := 0; i < 10; i++ { log.Println("se...阅读全文

博文 2016-04-21 11:00:02 zjp114695092

动手实现一个JSON验证器

最近做毕设的时候,有个功能需要验证JSON字符串的合法性,最简单的做法是直接用Go的第三方JSON库做一个反序列化,但这样做给我有种杀鸡用牛刀的感觉,毕竟我不需要真正的反序列化它,单纯的验证和反序列化的性能差距直观感觉上还是比较大的。 分析 既然要验证JSON的有效性,那么必然需要清楚的知道JSON格式,这个在JSON官网已经给我们画出来了: 从官方的图上面可以看出,JSON的组成一共有五部分: object: 以左大括号({)开头表示对象的开始。 array: 以左中括号([)开头表示数组的开始。 value: 数组中只能有值类型,对象中每一个键后面必跟一个值类型。 string: 以英文的双引号开头表示字符串类型。 number: 以减号(-)、1~9、0开头表示数值类型。 从上可以看出...阅读全文

博文 2017-03-20 07:01:24 疯狂的爱因斯坦

关于go中map的使用问题

map[key] 可以获取到value的引用,但是这个引用如何记录呢? 比如我的value有100个成员变量 map[key].value1 = a map[key].value2 = b map[key].value3 = c ... 这样写下去不是要有100次检索的过程么.这不科学啊. point := &map[key] point .value1 = a point .value2 = b point .value3 = c ... 这样写不是更科学么.但是编译器提示我不支持&.请问我该怎么作呢...阅读全文

golang 类型断言取不到地址的问题

func main() { var a Integer = 1 var b Integer = 1 sum := a.Add(b) fmt.Println(sum) var i interface{} = a sum = i.(Integer).Add(b) // 报错 fmt.Println(sum) } type Integer int func (a *Integer) Add(b Integer) Integer { return *a + b } 报错信息如下: test\testVar.go:16:19: cannot call pointer method on i.(Integer) test\testVar.go:16:19: cannot take the address...阅读全文

博文 2019-04-01 18:34:40 岛在深海处

知识更新越来越快,但是学习起来越来越困

我是一个着迷于产品和运营的技术人,乐于跨界的终身学习者。欢迎关注我的个人公众号「跨界架构师」 每周五11:45 按时送达~ 我的第「140」篇原创敬上 ​大家好,我是Z哥,先祝大家节日快乐。不知道这个假期你打算出门吗?Z哥我是打算不出远门了,怕死,哈哈。索性好好宅家里学习,强化一下自己。相信大家也感受到了,随着互联网加速了信息的流动速度,知识的更新迭代也在加速。可能原本靠着一门手艺可以过一辈子,现在可能每5~10年就需要一次大的迭代才能跟上社会的发展步伐,不被out。并且,随着最近几年知识付费的兴起,提倡「终身学习」的声音越来越大了。不管是出于什么目的在鼓吹「终身学习」,这个观点的价值取向总是正向的。但是对于学习这个问题,困扰我们大部分人的并不是学什么或者怎么学。而是,总是学着学着没动力,半...阅读全文

博文 2020-05-02 23:33:11 跨界架构师

Golang 游戏leaf系列(四) protobuf数据怎么处理

在Golang 游戏leaf系列(三) NewAgent在chanrpc和skeleton中怎么通讯中(下文简称系列三),说了如何处理NewAgent: skeleton.RegisterChanRPC("NewAgent", rpcNewAgent) 其实在game模块的handler.go中,同样注册了如何处理网络消息: func init() { // 向当前模块(game 模块)注册 消息处理函数 handler(&msg.Test{}, handleTest) handler(&msg.UserLogin{}, handleUserLogin) handler(&msg.UserRegister{}, handleUserRegister) } func handler(m int...阅读全文

golang常见加密解密

RSA,AES,BASE64,HMAC,MD5,SHA1,SHA256,SHA512 RSA: // RsaEncrypt rsa encrypt func RsaEncrypt(plainText, publicKey []byte) ([]byte, error) { // decrypt the public key in pem format if len(publicKey) == 0 { publicKey = rsaPublicKey } block, _ := pem.Decode(publicKey) if block == nil { return nil, errors.New("public key error") } // parsing the public ke...阅读全文

博文 2019-08-07 09:32:43 oooxxxooo

《HR黑话大全》:那些残忍的潜台词!你知道哪些?面试必懂。

前言记一次“带套路”的面试——我是如何在面试别人 Spring 事务时“套路”对方的。前几天和一个上家公司的同事聊了一会,他说最近在面试别人的时候,套路了面试者一波,我觉得很有趣,就分享给大家!与这个面试者聊了一会儿,咦,发现他水平还可以,我内心有点儿喜出望外,终于遇到一个“合格”的“陪聊者”了,我要用 Spring 事务“好好套路”他一下。我:你在开发中,一般都把事务加到哪一层? 他:都加到 Service 层。 我:现在基本都是基于注解的配置了,那和事务相关的注解是哪个? 他:我不太会读那个单词,就是以@T开头的那个。 我:我明白你的意思,就是@Transactional。 他:是的。 我:与自己写代码来开启和提交事务相比,(先给他来个小的套路),这种通过注解来使用事务的方式叫什么? 他...阅读全文

博文 2019-04-28 19:58:37 13113161761

golang 实现 类似lua中的coroutine

golang 中的 channel,它可以保存函数上下文,于是我基于此做了个 函数式的简单版协程 源码如下: ```go package main import ( "fmt" "runtime" "time" ) func main() { // 使用一个核 runtime.GOMAXPROCS(1) var coroutine = func(cbs func(func(int) int)) func(int) int { var sign chan func(int) int = make(chan func(int) int) var run func(int) int go func(cb...阅读全文