go

聊聊golang的zap的ZapKafkaWriter

一个人想着一个人 提交于 2020-12-11 01:13:30
序 本文主要研究一下golang的zap的ZapKafkaWriter ZapKafkaWriter package logger import ( "errors" "sync" "sync/atomic" "syscall" ) // ZapKafkaWriter is a zap WriteSyncer (io.Writer) that writes messages to Kafka type ZapKafkaWriter struct { kp *KafkaProducer ce *CloudEvents closed int32 // Nonzero if closing, must access atomically pendingWg sync.WaitGroup // WaitGroup for pending messages closeMut sync.Mutex } // newZapKafkaWriter returns a kafka io.writer instance func newZapKafkaWriter( kpCfg ProducerConfiguration, cloudEvents *CloudEvents, ceCfg CloudEventsConfiguration) (*ZapKafkaWriter, error) { //

vue-Router路由

▼魔方 西西 提交于 2020-12-10 05:51:35
单页应用 是无刷新,整个webapp就一个html文件,里面的各个功能页面是javascript通过hash,或者history api来进行路由,并通过ajax拉取数据来实现响应功能。因为整个webapp就一个html,所以叫单页面! vue-router原理 vue-router通过hash与history两种方式实现前端路由的,'更新视图但不重新请求页面'是前端路由原理的核心之一。 在vue-router中提供mode参数来决定采用哪种方式,默认是hash (1)mode:'hash': http:/ /localhost:8080/ #/recommend 多了“#” (2)mode:'history':http: //localhost:8080/recommend hash与history的区别: hash模式url里面永远带着#号,在开发过程中默认使用这个模式。如果用户考虑到url的规范就需要使用history模式了。 hash的特点在于,hash虽然出现在url中,但不会被包括在HTTP请求中,对后端完全没有影响,因此改变hash不会重新加载页面。 hash模式(用户体验好) 原理:利用hashchange事件监听URL中(锚点)hash路由的变化。 window.addEventListener('hashchange',function(e){  

Golang并发编程基础

你说的曾经没有我的故事 提交于 2020-12-09 18:54:05
Golang 推荐的是通过channel进行通信的方式,而不是shareMemry的方式。 总结 这节课主要讲解 Go 语言的同步原语使用,通过它们可以更灵活地控制多协程的并发。从使用上讲,Go 语言还是更推荐 channel 这种更高级别的并发控制方式,因为它更简洁,也更容易理解和使用。 当然本节课讲的这些比较基础的同步原语也很有用。同步原语通常用于更复杂的并发控制,如果追求更灵活的控制方式和性能,你可以使用它们。 常见的并发冲突问题 //共享的资源 var sum = 0 func main() { //开启100个协程让sum+10 for i := 0; i < 100; i++ { go add(10) } //防止提前退出 time.Sleep(2 * time.Second) fmt.Println("和为:",sum) } func add(i int) { sum += i } 同步原语 sync.Mutex 互斥锁,顾名思义,指的是在同一时刻只有一个协程执行某段代码,其他协程都要等待该协程执行完毕后才能继续执行。 在下面的示例中,我声明了一个互斥锁 mutex,然后修改 add 函数,对 sum+=i 这段代码加锁保护。这样这段访问共享资源的代码片段就并发安全了,可以得到正确的结果。 var( sum int mutex sync.Mutex ) func

Java|String、StringBuffer和StringBuilder的区别

前提是你 提交于 2020-12-09 08:02:53
欢迎点击「算法与编程之美」↑关注我们! 本文首发于微信公众号:"算法与编程之美",欢迎关注,及时了解更多此系列文章。 欢迎加入团队圈子!与作者面对面!直接点击! 问题描述 JAVA 中用于处理字符串常用的有三个类: java.lang.String、 java.lang.StringBuffer 、 java.lang.StringBuilder . 这三个类有共同点,都是 final 类 , 不允许被继承。同时也有一些区别,下面简单介绍一下它们的区别。 解决方案 这三个类之间的区别主要是运行速度和线程安全这两方面的区别。 在运行速度这方面,快慢比较的情况是: StringBuilder > StringBuffer > String 。 String最慢的原因: String 为字符串常量,字符串长度不可变。 Java 中 String 是不可变的, String 对象一旦创建之后该对象是不可更改的。所以, Java 中对 String 对象进行的操作实际上是创建新的对象并把旧的对象进行回收,所以执行速度很慢。 StringBuilder和 StringBuffer 的对象是变量,是可变的,可以直接对 StringBuilder 和 StringBuffer 的对象进行更改,而不用创建新对象再回收,所以速度要比 String 快很多。 StringBuffer与

【直播预告】Gitee 产品经理开讲!教你使用 Gitee Go 构造高效流水线

冷暖自知 提交于 2020-12-08 14:01:57
Gitee自研 CI/CD 工具 Gitee Go 正式上线后,我们收到了许多用户的反馈。 经过近期不断地改进,现在我们把它介绍给更多 Gitee 用户。 什么是 Gitee Go,它能做些什么? 如何使用 Gitee Go 把流水线真正地「跑起来」? 即将到来的 Gitee Talk 第三期 看 Gitee 产品经理带你玩转 Gitee Go,打造高效 CI/CD 流水线。 直播时间 12 月 9 日晚 19:30-20:30 讲师 Gitee Go 产品经理 张盛翔 互动福利 参与直播互动可获得企业版优惠,还有机会获赠奖品,文化衫、鼠标垫等礼品等你拿。 参与方式 扫描下方二维码,加入官方直播群,群内将为大家推送直播链接。 来源: oschina 链接: https://my.oschina.net/gitosc/blog/4780784

Go: How to check if a struct property was explicitly set to a zero value?

荒凉一梦 提交于 2020-12-08 07:03:54
问题 type Animal struct { Name string LegCount int } snake := Animal{Name: "snake", LegCount: 0} worm := Animal{Name: "worm"} Question: How can I check snake and worm after they've been set, to tell that: snake was explicitly set with a LegCount of 0. The worm 's LegCount was not explicitly set (and therefore based off of its default value)? 回答1: It is simply impossible to distinguish. If you are unmarshalling data from XML or JSON, use pointers. type Animal struct { Name *string LegCount *int }

Go: How to check if a struct property was explicitly set to a zero value?

社会主义新天地 提交于 2020-12-08 07:03:44
问题 type Animal struct { Name string LegCount int } snake := Animal{Name: "snake", LegCount: 0} worm := Animal{Name: "worm"} Question: How can I check snake and worm after they've been set, to tell that: snake was explicitly set with a LegCount of 0. The worm 's LegCount was not explicitly set (and therefore based off of its default value)? 回答1: It is simply impossible to distinguish. If you are unmarshalling data from XML or JSON, use pointers. type Animal struct { Name *string LegCount *int }

“package XXX is not in GOROOT” when building Golang project

和自甴很熟 提交于 2020-12-08 06:06:31
问题 I have a weird issue that arose when I took a break from this project. Upon starting up Goland, I'm riddled with errors when trying to run my project. The specific error, when building one of my packages, is: start.go: package project/game is not in GOROOT (C:\Go\src\project\game) I have a folder structure as such under C:\Users\username go |-src |-project |-game |-entity |-whatever.go |-game_stuff.go |-server and my env vars are as such: GOROOT=C:\Go GOPATH=C:\Users\ketchup\go for each of

Endorsers Instantiate Chaincode with error “cannot find package”

好久不见. 提交于 2020-12-08 02:18:40
问题 I created a chaincode and I imported a package to it. import ( "bytes" "encoding/json" "fmt" "strings" "golang.org/x/crypto/bcrypt" "github.com/hyperledger/fabric/core/chaincode/shim" pb "github.com/hyperledger/fabric/protos/peer") I can install that chaincode to all endorsers. But when I instantiated it to all endorsers, it faced the error: endorser failed with error starting container: error starting container: Failed to generate platform-specific docker build: Error returned from build: 1

Hyperledger Fabric JSON response has backslashes

爱⌒轻易说出口 提交于 2020-12-08 01:50:35
问题 I'm currently testing a Hyperledger Fabric Application, but I get an unexpected JSON response. Why are there extra backslashes between every object in the response? result, err := json.Marshal(history) logger.Debug(string(result)) if err != nil { message := fmt.Sprintf("unable to marshal the result: %s", err.Error()) logger.Error(message) return shim.Error(message) } logger.Info("SimpleChaincode.getHistory exited successfully") return shim.Success(result) Actual CLI output: Chaincode invoke