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

golang中比较2个slice

这是用双for的方法实现了2个slice的比较,方法很土,但思路直观 // FuncTest project main.go package main import ( "fmt" ) //检查slice b是否在slice a中 //需要比对的2个slice分别是a和b //isSame 比对的2个slice是否相同 //diffSlice 如果2个slice不同,那么不同的元素将储存在其中 func checkSliceBInA(a []string, b []string) (isIn bool, diffSlice []string) { lengthA := len(a) for _, valueB := range b { temp := valueB //遍历取出B中的元素 f...阅读全文

博文 2016-03-28 15:00:01 u012210379

如此,用dep获取私有库

如此,用dep获取私有库 介绍 dep是一个依赖管理工具。它需要1.9或更新的Golang版本才能编译 dep已经能够在生产环节安全使用,但还在官方的试验阶段,也就是还不在go tool中。但我想是迟早的事 :=) 指南和参考资料,请参阅文档 获取私有库 我们常用的git方式有两种,第一种是通过ssh,第二种是https 本文中我们以gitlab.com为案例,创建一个private的私有仓库 通过ssh方式 首先我们需要在本机上生成ssh-key,若没有生成过可右拐传送门 得到需要使用的ssh-key后,我们打开我们的gitlab.com,复制粘贴入我们的Settings -> SSH Keys中 添加成功后,我们直接在Gopkg.toml里配置好我们的参数 [[constraint]] ...阅读全文

博文 2018-03-01 00:40:52 EDDYCJY

sspanel按月结算,修改go版代码【web api】

开头感谢sspanel的作者orvice大神!【转载请注明】 博主最近在搭建sspanel v3,中间坑确实挺多的,我回头开贴补充一下,ss服务器端我选择了orvice的shadowsocks-go mu版,因为作者是基于流量控制的机理,实际上奸商都是通过时间控制(233),所以我就寻思在作者的基础上加以修改,添加时间的限制。 上一篇博客中我实现了mysql api的修改,这一篇是web api。开始我以为orvice是在php api做控制的,看了api发现不是(还是webapi直接控制好啊,修改方便= =),数据库修改等请去看上一帖传送门 找到user结构体,路径shadowsocks-go-mu\mu\webapi\user.go 结构体修改,注意,这里的字段和json字段不能相同,不...阅读全文

博文 2016-09-02 18:00:04 w2180z

[BFS/DFS]HOJ2581Go

传送门:Go Go My Tags (Edit) Source : Stanford Programming Contest 2007 Time limit : 1 sec Memory limit : 64 M Submitted : 201, Accepted : 117 In the game of Go, two players alternate placing black and white stones on lattice points of an n * n grid, each attempting to surround as much territory(i.e., regions of unfilled lattice points) as possible. At...阅读全文

博文 2015-12-23 04:00:00 u010160562

go设置时区

time包设置时区方法: ``` l,_ := time.LoadLocation("Asia/Shanghai") fmt.Println(time.Now().In(l)) l,_ = time.LoadLocation("America/Adak") fmt.Println(time.Now().In(l)) ``` LoadLocation 有个问题,它依赖于 IANA Time Zone Database (简称 tzdata 吧) 这个数据库,一般linux系统都带了,但是windows系统就没带。 没有 tzdata 就会从$GOROOT/中找。对于没有安装go环境的windows系统来说,就没办法通过 `LoadLocation` 设置时区。 但是也有办法,我们可以自己把tz...阅读全文

博文 2018-05-24 18:39:52 keepeye

Golang用body来get或post数据

用body来处理参数,能处理多层结构化参数,url不能传送多层结构数据 // 基础方法,这里多用于访问webapi,配合上json转换。此方法可以运行但是不算完善。 func httpDo(method string, url string, msg string) { fmt.Println("----", url, "----") client := &http.Client{} body := bytes.NewBuffer([]byte(msg)) req, err := http.NewRequest(method, url, body) if err != nil { // handle error } req.Header.Set("Content-Type", "applic...阅读全文

博文 2018-05-22 11:33:08 捍卫机密

一个多功能心跳发送包——yapool

自己实现了一个多功能心跳包 传送门 https://github.com/CrocdileChan/yapool 因为之前的项目需要,我将一部分功能逻辑抽象出来,这个包可以供给做分布式的小伙伴用来造轮子。 基于这个包,可以轻易的实现服务发现、健康监测以及集群数据采集功能,心跳可以分为多个等级,开发者可以在里面定义自己需要传送到center(或者叫master)的讯息,center端可以对该信息进行处理...阅读全文

博文 2017-09-14 11:37:41 Tobirama

一个比 UUID 快百倍的唯一 ID 生成器

前言 在游戏开发中,我们经常要为请求、对象或者什么其它东西设置全局唯一的 ID。常见的选择有随机数、时间戳、UUID、用 Redis 生成 ID 等,这些选择要么可能重复,要么太慢,于是我开发了 WUID,一个极快的唯一 ID 生成器。 WUID 比 UUID 快 100 倍,比用 Redis 生成 ID 快 4600 倍。 核心设计 WUID 顺序生成 64 位整数,其高 24 位是从外部存储加载的,每次加载自动加 1。 目前支持的外部存储包括:Redis、MySQL、MongoDB。 Benchmarks BenchmarkWUID 200000000 9.38 ns/op 0 B/op 0 allocs/op BenchmarkWUID-4 200000000 9.19 ns/op 0...阅读全文

博文 2018-01-28 11:34:35 edwingeng

Golang 中的回环栅栏

这篇文章中我们会研究一个基本的同步问题。并使用 Golang 中原生的 Buffered Channels 来为这个问题找到一个简洁的解决方案。 ## 问题 现在假设我们我们有一堆 workers。为了充分发挥 CPU 多核的能力,我们让每个 worker 运行在单独的 goroutine 中: ```go for i := 0; i < workers; i++ { go worker() } ``` worker 需要做一系列的工作 job: ```go func worker() { for i := 0; i < 3; i++ { job() } } ``` 每次 job 前都需要在所有的 worker 上同步地先进行一次准备 bootstrap 的过程。也就是说,每个 worker...阅读全文

博文 2018-03-30 22:38:20 snowInPluto

sspanel按月结算,修改go版代码【web api】

开头感谢sspanel的作者orvice大神!【转载请注明】 博主最近在搭建sspanel v3,中间坑确实挺多的,我回头开贴补充一下,ss服务器端我选择了orvice的shadowsocks-go mu版,因为作者是基于流量控制的机理,实际上奸商都是通过时间控制(233),所以我就寻思在作者的基础上加以修改,添加时间的限制。 上一篇博客中我实现了mysql api的修改,这一篇是web api。开始我以为orvice是在php api做控制的,看了api发现不是(还是webapi直接控制好啊,修改方便= =),数据库修改等请去看上一帖传送门 找到user结构体,路径shadowsocks-go-mu\mu\webapi\user.go 结构体修改,注意,这里的字段和json字段不能相同,不...阅读全文

博文 2016-09-05 22:00:01 w2180z

如何高性能的组合[]byte?

现在在学习GOLANG 需要组合多个[]byte. 现在在使用bytes.buffer.Write的方法 。 想咨询一下有没有比这个性能更好的办法 谢谢 下面两个方法为数据包的拆分与组合,拆分的数据包定长,但内部记录有效数据长度。想用在SOCKET多任务传送数据上。 在测试时发现一个问题, 一个68M的文件, 在拆分时用50MS 但在组合时要用150MS 想求各位大神看看有没有更好的提高性能办法。 顺便问一下,如何发代码????????? ```go //这个方法 是将一个大的数据,拆分多个小包,保存到MAP里。pKey为每个包的KEY。。 func CreatePacket(t int16,data []byte)([]byte,int){ p...阅读全文

golang 将数据库转换为gorm结构

# [gorm-tools](https://github.com/xxjwxc/gormt) ### [gorm](https://github.com/xxjwxc/gormt) mysql数据库转 struct 工具,可以将mysql数据库自动生成golang sturct结构,带大驼峰命名规则。带json标签 ----------- ## 1. 通过当前目录config.toml文件配置默认配置项 ``` out_dir = "." # 输出目录 singular_table = false # 表名复数,是否大驼峰构建 参考:gorm.SingularTable simple = false #简单输出 isJsonTag = true #是否打json标记 [mysql_info...阅读全文

博文 2019-10-11 11:36:20 xie1xiao1jun

怎样理解golang的异步?

都说golang,可以用同步的思想写出异步的代码,不知道大家都是如何理解这句话的?
下面这段代码算是这句话的一个例子吗? ```go func sum(x,y int,c chan int){ time.sleep(5*time.Second) c <- x + y } func another(c chan int){ fmt.Println(<-c) //管道有数据了直接继续执行,相当于异步通知 do something else... } func main(){ c := make (chan int) go sum(24,18,c) go another(c) fmt.Pr...阅读全文

leetcode 206 反转链表

题目描述 反转一个单链表。 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 进阶: 你可以迭代或递归地反转链表。你能否用两种方法解决这道题? 解题思路 详见代码 代码实现 // ListNode Definition for singly-linked list. type ListNode struct { Val int Next *ListNode } func reverseList(head *ListNode) *ListNode { if head == nil || head.Next == nil { return head } var prev *ListNode cur := head for cur != nil...阅读全文

博文 2018-10-23 14:34:43 tomorrowwu

一种常驻运行程序模块--逻辑协程+后台协程的方案

[传送门](https://github.com/ronow2cn/sched) ### 逻辑协程+后台协程的方案: #### **逻辑协程loop**: 通过`loop.Push(f func)`函数将需要运行的函数,push进逻辑协程中运行。 该逻辑协程还可以运行定时函数。通过`loop.SetTimeOut(ts time.Time, f func())`函数设置`ts`时间调用`f`函数。利用函数迭代,可以实现定时循环调用。 #### **后台协程asyncop**: 通过`asyncop.Push(op func(), cb func())`函数将需要运行的函数,push进后台协程中运行。 `op`:需要运行的后台函数。 `cb`:设置回`loop`协程运行的函数。可以设置为`ni...阅读全文

博文 2017-09-07 10:08:38 ronow2cn

golang 将数据库转换为gorm结构

gorm-tools gorm mysql数据库转 struct 工具,可以将mysql数据库自动生成golang sturct结构,带大驼峰命名规则。带json标签 1. 通过当前目录config.toml文件配置默认配置项 out_dir = "." # 输出目录 singular_table = false # 表名复数,是否大驼峰构建 参考:gorm.SingularTable simple = false #简单输出 isJsonTag = true #是否打json标记 [mysql_info] host = "127.0.0.1" port = 3306 username = "root" password = "qwer" database = "oauth_db" 2. 可...阅读全文

博文 2019-07-10 19:32:40 xie1xiao1jun

golang gorm中格式化时间的问题

本文原文地址:golang gorm中格式化时间的问题 欢迎到访我的博客。最近在开发项目时遇到了发现一个问题,gorm虽然可以自动帮你维护 created_at、updated_at、deleted_at这些关键时间字段。但是其原理与弊端需要了解一下。1.使用方法通过自定义一个localtime的结构,来控制时间的格式package utils import ( "time" //"strconv" "fmt" "database/sql/driver" "strconv" ) type LocalTime struct { time.Time } func (t LocalTime) MarshalJSON() ([]byte, error) { //格式化秒 seconds := t.U...阅读全文

博文 2019-07-09 16:17:45 yuanshuli11

leetcode 24 两两交换链表中的节点

题目描述 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。示例: 给定 1->2->3->4, 你应该返回 2->1->4->3. 说明: 你的算法只能使用常数的额外空间。 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。 代码实现 // ListNode Definition for singly-linked list. type ListNode struct { Val int Next *ListNode } func swapPairs(head *ListNode) *ListNode { if head == nil || head.Next == nil { return head } var prev *ListNode cur := head h...阅读全文

博文 2018-10-26 12:34:38 tomorrowwu

golang关于一些新手不注意会出现的小问题

前言 最近在整理之前写程序,学习时所记录的有道云笔记,发现一些有意思的小点跟大家分享一下。如有错误请大家给指出 一、闭包 defer 闭包(匿名函数) func test(){ i, n := 1 ,2; defer func(a int){ fmt.Println("defer:", a , n); //n被闭包引用 }(i) //复制i的值 i , n = i+1,n+2; fmt.Println(i , n); } 我们看一下结果: 2 4defer: 1 4 为什么会这样?是因为闭包复制的是原对象指针,出现了延迟引用现象 (加上defer的延迟调用,正好可以解释上面程序的延迟引用现象)。我们在使用闭包的时候要注意这个问题,同样在for 循环中 也会出现类似现象。 感谢“”小强”,增加...阅读全文

博文 2017-12-08 11:00:00 turnswing

unhtml: HTML unmarshaler

最近要用 `golang` 写一个需要解析 `HTML` 的项目,到网上找了一个库叫 `goquery`。虽然它的 `API` 挺不错,`css selector` 基本上也全支持了,但写这种代码果然还是有点无聊,于是我就想,为什么不能跟 `go` 的 `json` 库和 `xml` 库一样,直接 `Unmarshal(HTML)` 呢? 然后我花了两天时间撸出了 `unhtml` -> [Github 传送门](https://github.com/Hexilee/unhtml#types) ### 样例 & 性能 有个 `HTML` ```html var AllTypeHTML = []byte(` 阅读全文

博文 2018-10-02 09:37:17 Hexilee

leetcode 142 环形链表的环的第一个节点

题目描述 给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 说明:不允许修改给定的链表。 进阶: 你能否不使用额外空间解决此题? 解题思路 无环链表,最后一个节点为nil,有环链表可以无限循环next下去 不用额外空间:快慢节点,慢节点一次走一步,快节点一次走两步,当进入环中,每次循环,快节点会离慢节点近一步,快节点最终会追上慢节点 用额外空间: 用map存走过的节点,第一个走过的节点就是环的入口 不用额外空间 环形链表 设:链表头是X,环的第一个节点是Y,slow和fast第一次的交点是Z。各段的长度分别是a,b,c,如图所示 第一次相遇时slow走过的距离:a+b,fast走过的距离:a+b+c+b 因为fast的速度是slow的两倍,所以fast走的距离是...阅读全文

博文 2018-10-26 19:34:40 TomorrowWu

拜托,面试别再问我回文链表了!!!(leetcode 234)

题目描述 请判断一个链表是否为回文链表。 示例1: 输入: 1->2 输出: false 示例2: 输入: 1->2->2->1 输出: true 进阶: 你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题? 解题思路 思路1 遍历链表,用数组存下每个节点的值,然后从数组两头开始向中间遍历,是否相等 时间复杂度O(n),空间复杂度O(n) 思路2 遍历一遍链表,得到链表长度n,根据长度的奇偶,找到中间节点,将左半边的链表反转,然后从中间节点分两个方向向左右两边遍历,是否是回文;对左半部分链表进行反转,还原为最初的链表 只需要固定的若干个临时变量,不需要额外开辟空间 时间复杂度为O(n),空间复杂度为O(1) 代码实现 // ListNode Definition for sing...阅读全文

博文 2018-10-23 20:34:58 tomorrowwu

使用GO 爬取豆瓣top250并保存成csv格式文件

>[最终效果传送门](https://www.liuxinc.ink/2019/10/13/Golang-Scraping%EF%BC%88%E4%BA%8C%EF%BC%89/) ## 思路 1. 使用 colly.visit 访问目标网页 2. 通过每张页面中 "下一页"的 url 依次访问所有页面 3. 在每一页中使用colly.OnHTML 解析获得需要的数据 4. 利用 go 标准库 encoding/csv 来保存csv格式文件 ## 代码实现 ```go package main import ( "encoding/csv" "fmt" "github.com/gocolly/colly" "os" "sort" "strconv" ) type Film struct { ...阅读全文

doublejump - 快速、简洁的一致性哈希库,Google Jump 算法的改进版

Overview doublejump 的核心是 Google Jump 一致性哈希算法,这个实现弥补了该算法的最大缺点:不能删除节点。 传送门 https://github.com/edwingeng/doublejump Benchmark BenchmarkDoubleJumpWithoutLock/10-nodes 50000000 27.6 ns/op BenchmarkDoubleJumpWithoutLock/100-nodes 30000000 42.7 ns/op BenchmarkDoubleJumpWithoutLock/1000-nodes 30000000 54.1 ns/op BenchmarkDoubleJump/10-nodes 20000000 72.9 n...阅读全文

博文 2018-11-19 19:34:40 edwingeng

搭建网站,和把大象装冰箱一样简单?

摘要: 一个流行了很多年的梗,至今仍然热度不减,当年本山大叔在春晚上说出这个段子时,不知是不是预料到了很多人这辈子都指着这个笑话活着了。 一个流行了很多年的梗,至今仍然热度不减,当年本山大叔在春晚上说出这个段子时,不知是不是预料到了很多人这辈子都指着这个笑话活着了。 Q:“要把大象装冰箱,总共分几步?” A:“分三步。1. 把冰箱门打开;2.把大象放进冰箱;3.把冰箱门关上”。 一个听上去很困难的事情,在脑筋急转弯的世界里,不用考虑它的实现成本和实现可行性,其实只需分三步即可完成。其实生活中的很多事,换个角度,也是如此。 搭建网站,这个词,很多人都听说过,但是当你还未了解建站的具体步骤时,你会觉得这件事好难,没有技术底子很难实现。其实,当你勇敢的打开冰箱门以后,你会发现...阅读全文

macOS安装Golang开发环境

安装前需要Homebrew环境 安装Homebrew: 命令行输入: ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 另外建议切换国内源:传送门 安装并配置golang: 查看可用的go版本 brew search go 看到go@x.x即为可用版本。 安装go brew install go@1.9 安装成功后,配置环境变量 vim ~/.bashrc或vim ~/.zshrc 根据你实际情况而定。如zsh就是编辑~/.zshrc文件, bash就是~/.bash_profile文件,官方教程默认是vim ~/.bashrc #GOROOT export GO...阅读全文

博文 2019-06-16 15:02:39 Aris_TnT

国内go get无法使用解决办法

由于我国的政策问题,外网一直是我们渴望而不可求的。在使用go get时我们就可以感觉到,那么我们该怎么解决呢?有VPN代理的绕过本文章就可以了,还有网上说的使用gopm这个工具,类似于Node.js的npm,但是我们从内心还是想用go get,但自己又没有VPN代理怎么办?一个网站解决了我们这个问题——https://goproxy.io/我们可以将go的代理设置为这个网站就可以,具体的教程此网站又明确的步骤,根据你go版本的不同去设置即可——传送...阅读全文

博文 2019-10-12 15:09:12 huhailong

leetcode 24. 两两交换链表中的节点

题目描述 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。 示例: 给定 1->2->3->4, 你应该返回 2->1->4->3. 说明: 你的算法只能使用常数的额外空间。 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。 代码实现 // ListNode Definition for singly-linked list. type ListNode struct { Val int Next *ListNode } func swapPairs(head *ListNode) *ListNode { if head == nil || head.Next == nil { return head } var prev *ListNode cur := head ...阅读全文

博文 2018-10-26 14:35:17 TomorrowWu

leetcode 25. k个一组翻转链表

题目描述 给出一个链表,每 k 个节点一组进行翻转,并返回翻转后的链表。 k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么将最后剩余节点保持原有顺序。 示例: 给定这个链表:1->2->3->4->5 当 k = 2 时,应当返回: 2->1->4->3->5 当 k = 3 时,应当返回: 3->2->1->4->5 说明: 你的算法只能使用常数的额外空间。 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。 解题思路 1. 取链表的前K个节点,如果够K个节点,就截断后进行反转,不够K个节点,说明处理完了,return 2. 反转完前K个节点后,使用递归,处理后面的链表 代码实现 // ListNode Definition for singl...阅读全文

博文 2018-10-27 09:34:41 TomorrowWu

Golang语言社区 课程2018年11月18日 更新说明

Golang语言社区 课程2018年11月18日 更新说明 1 从零搭建游戏服务器-第二期: 第二十二节:服务器模拟玩家行走测试3 https://study.163.com/course/introduction.htm?courseId=1005743022&share=2&shareId=400000000538037 2 Go语言开源框架分析: Leaf框架:Leaf实战项目传送门 https://ke.qq.com/course/345679?tuin=5b20ed37 社区福利: 彬哥笔记 --2 掌握Go语言可以给你带来什...阅读全文

博文 2018-11-18 03:34:38 Golang语言社区

leetcode 142 环形链表的环的第一个节点

题目描述 给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 说明:不允许修改给定的链表。进阶: 你能否不使用额外空间解决此题? 解题思路 无环链表,最后一个节点为nil,有环链表可以无限循环next下去 不用额外空间:快慢节点,慢节点一次走一步,快节点一次走两步,当进入环中,每次循环,快节点会离慢节点近一步,快节点最终会追上慢节点 用额外空间: 用map存走过的节点,第一个走过的节点就是环的入口 不用额外空间 设:链表头是X,环的第一个节点是Y,slow和fast第一次的交点是Z。各段的长度分别是a,b,c,如图所示 第一次相遇时slow走过的距离:a+b,fast走过的距离:a+b+c+b 因为fast的速度是slow的两倍,所以fast走的距离是slow的两...阅读全文

博文 2018-10-26 19:34:38 tomorrowwu

三门问题(蒙提霍尔悖论)分析与Golang模拟

问题描述 三门问题(Monty Hall problem)亦称为蒙提霍尔问题、蒙特霍问题或蒙提霍尔悖论,大致出自美国的电视游戏节目Let's Make a Deal。问题名字来自该节目的主持人蒙提·霍尔(Monty Hall)。参赛者会看见三扇关闭了的门,其中一扇的后面有一辆汽车,选中后面有车的那扇门可赢得该汽车,另外两扇门后面则各藏有一只山羊。当参赛者选定了一扇门,但未去开启它的时候,节目主持人开启剩下两扇门的其中一扇,露出其中一只山羊。主持人其后会问参赛者要不要换另一扇仍然关上的门。问题是:换另一扇门会否增加参赛者赢得汽车的机率? 答案 答案是会。不换门的话,赢得汽车的几率是1/3。换门的话,赢得汽车的几率是2/3。 争议 有人认为,在主持人排除了一个门之后,汽车只可能在另外两个门中,所...阅读全文

博文 2019-10-10 18:32:43 aside section ._1OhGeD

本饼干的日本码农就职总结(感想篇)

写在前面 如果你还没有读过本饼干的日本找工作总结(索引篇),建议先行阅读,传送门💁‍♂️ 本饼干的日本码农就职总结(开篇) 一点感想 我可真是够啰嗦的,最开始只是单纯的想总结一下就活季忙活了3个月的总结,拖拖拉拉写了1个月,硬是写了这么长,还写成了连载。不过也是有些许好处的吧,对我个人来说在看网上面经的经验,看到一些感兴趣公司的描述,总是希望博主多写一些。 从3月底下旬决定找工作,到6月下旬完成所有面试,刚好三个月的时间。想起来还是蛮长的,但结束却真的是一瞬间的。最后的offer和rej通知在同天收到,未来2~5年的人生,就这么突然下了定论。因为认定年轻人的第一份工作蛮重要,所以有一些感慨。虽然也会酸酸同龄人,小酸怡情,大酸可就伤身了。如果一直盯着年收500w、800w和1200w的差距,眼...阅读全文

博文 2019-08-10 16:02:38 一枚大曲奇

golang 将数据库转换为 gorm 结构

# [gormt](https://github.com/xxjwxc/gorm-tools) -------- 一款mysql数据库转 struct 工具,可以将mysql数据库自动生成golang sturct结构,带大驼峰命名规则。带json标签 -------- ## 1. 通过当前目录 config.yml 文件配置默认配置项 ``` out_dir : "." # 输出目录 singular_table : false # 表名复数,是否大驼峰构建 参考:gorm.SingularTable simple : false #简单输出 is_json_tag : false #是否打json标记 is_foreign_key : true #是否导出...阅读全文