2020
12-22
12-22
浅谈golang for 循环中使用协程的问题
两个例子packagemainimport("fmt""time")funcProcess1(tasks[]string){for_,task:=rangetasks{//启动协程并发处理任务gofunc(){fmt.Printf("Workerstartprocesstask:%s\n",task)}()}}funcmain(){tasks:=[]string{"1","2","3","4","5"}Process1(tasks)time.Sleep(2*time.Second)}结果:第一次运行Workerstartprocesstask:3Workerstartprocesstask:4Workerstartprocesstask:...
继续阅读 >
golang默认的time.Time类型在转为json格式时不是常用的2019-05-0810:00:01这种格式,解决办法是自定义一个时间类型,例如typemyTimetime.Time,然后针对myTime实现Marshaler接口的MarshalJSON方法,例如:packagemodelsimport("database/sql/driver""time")constlocalDateTimeFormatstring="2006-01-0215:04:05"typeLocalTimetime.Timefunc(lLocalTime)MarshalJSON()([]byte,error){b:=make([]byte,0...
其实最近看了不少Golang接口以及方法的阐述都有一个地方没说得特别明白。就是在Golang编译隐式转换传递给方法使用的时候,和调用函数时的区别。我们都知道,在我们为一个类型变量申明了一个方法的时候,我们可以使用类似于self.method来调用这个方法,而且无论你申明的方法的接收器是指针接收器还是值接收器,Golang都可以帮你隐式转换为正确的值供方法使用。让我们来看一个例子:packagemainimport"fmt"typedurationintfunc(...
Golang计算md5值的方法都是接收byte型slice([]byte)。而且使用习惯上也觉得略奇怪。看了好几个例子才看懂。感觉Golang标准库在设计这些模块的时候,都会考虑使用带New关键字工厂生成一个该类型的结构体对象。然后再使用改对象的方法进行操作。md5包就是这样,来看例子:s:="api_key"+ApiKey+"param"+Param+"time"+time+"version"+version+ApiSecretsignByte:=[]byte(s)hash:=md5.New()hash.Write(signByte)r...
问题描述:给定一个数组array[1,4,-5,9,8,3,-6],在这个数字中有多个子数组,子数组和最大的应该是:[9,8,3],输出20,再比如数组为[1,-2,3,10,-4,7,2,-5],和最大的子数组为[3,10,-4,7,2],输出18。代码如下:packagemainimport("fmt")funcgetMaxSum(arr[]int)int{varsum,maxSumintfori:=0;i<len(arr);i++{sum=0forj:=i;j<len(arr);j++{sum+=arr[j]ifsum>maxSum{...