Golang
天已青色等烟雨来
nozuonodie
展开
-
vscode 调试golang(on wsl) 简易上手指南
vscode 调试golang打开工程在go工程处打开vscodecode .配置vscode 调试golang设置 vs默认的变量显示比较短 需要通过dlvLoadConfig来配置相应的选项cat .vscode/launch.json{ // 使用 IntelliSense 了解相关属性。 // 悬停以查看现有属性的描述。 // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387 "v原创 2020-11-13 15:46:35 · 3163 阅读 · 0 评论 -
golang编程规范
简介golang至少目前没有一个特别统一的,或者大家共同认可的规范,大概是因为gofmt已经解决了很多空格tab之类的无谓之争。下面是uber公司的一个编程规范,记录下来供参考https://github.com/uber-go/guidehttps://github.com/xxjwxc/uber_go_guide_cn...原创 2020-04-19 23:53:26 · 321 阅读 · 0 评论 -
golang json序列和反序列化 omitempty
golang json 使用了omitempty注解应该使用指针定义数据,否则序列化 int的0值,string的"" 会和理解的有偏差,注意下面两图输出结果的区别package mainimport ( "encoding/json" "fmt")var jsonBlob = []byte(`[ {"Name": "c++", "Order": "1","id":0}...原创 2019-11-06 21:33:05 · 5194 阅读 · 0 评论 -
GOPROXY 网站整理
默认代理,无法访问https://proxy.golang.org七牛云赞助goproxy.cn阿里云mirrors.aliyun.com/goproxy某组织goproxy.io原创 2019-11-06 12:12:43 · 987 阅读 · 0 评论 -
Golang::任意类型添加方法(指针类型除外)
#go语言通过这种方法,实现了类成员函数的功能//内置类型添加方法package mainimport ( "fmt")type Interger intfunc (i *Interger) Add(value Interger) { *i = *i + value}func main() { var value Interger = 2...原创 2018-07-31 10:16:47 · 1885 阅读 · 0 评论 -
Golang::接口的值
#package mainimport ( "bytes" "fmt" "io")func show() { fmt.Println("hello")}func main() {原创 2018-07-30 16:30:19 · 1409 阅读 · 0 评论 -
Golang::slice和nil的比较
codepackage mainimport ( "fmt")func main() { var s1 []int if s1 == nil { fmt.Println("s1==nil") } else { fmt.Println("s1!=nil") } var arr = [5]int{}...原创 2018-07-13 16:56:44 · 1848 阅读 · 0 评论 -
Golang::WaitGroup 等待所有goroutine退出
简介waitgroup类似于的信号量,用于等待所有的goroutine退出,基本的操作包括 add(int) 增加信号的值,add的参数应该都为正数 ,done() 减少信号的值,相当于add(-1) ,wait() 等待信号量值为0,等待期间会一直阻塞codepackage mainimport ( "fmt" "sync" "time")v...原创 2018-06-28 15:05:28 · 4896 阅读 · 0 评论 -
Golang::括号作用域
codepackage mainimport ( "fmt")func main() { x := 200 fmt.Println(x) { x := -300 fmt.Println(x) } fmt.Println(x)}结果 200 -300 200原创 2018-07-09 20:36:38 · 1440 阅读 · 0 评论 -
Golang::defer特殊场景
package mainimport "fmt"type slice []intfunc NewSice() slice { return make(slice, 0)}func (s *slice) Add(elem int) *slice { *s = append(*s, elem) fmt.Println(elem) return s}...原创 2018-07-08 02:08:34 · 287 阅读 · 0 评论 -
Couldn't find a suitable web browser! Set the BROWSER environment variable to your desired browser.
简介使用golang的pprof工具,使用时候提示Couldn't find a suitable web browser! Set the BROWSER environment variable to your desired browser.,原因是找不到默认的浏览器解决方法export BROWSER='/usr/bin/firefox'参考 https...原创 2018-08-31 10:40:11 · 3510 阅读 · 0 评论 -
go1.11 net.UDPConn.close() 阻塞问题
最近发现1.11版本的 net.UDPConn关闭的时候会阻塞,而1.6的版本没有问题func (c *conn) Close() error { if !c.ok() { return syscall.EINVAL } err := c.fd.Close() if err != nil { err = &OpErr...原创 2018-09-11 15:26:34 · 1788 阅读 · 0 评论 -
go 获取golang.org/x/tools包
go 获取golang.org/x/tools包,由于墙得原因,设置代理也不成功,提示如下go get golang.org/x/tools/go/packagespackage golang.org/x/tools/go/packages: unrecognized import path "golang.org/x/tools/go/packages" (https fetch: Get...原创 2018-10-25 14:24:54 · 21788 阅读 · 0 评论 -
Goland和IDEA换行符的设置
简介换行符在各个大系统上都不同老版本的MAC使用CR,后来新版本的MAC使用LFLinux使用LF换行符Windows使用CRLF换行符这样导致windows 上开发Linux脚本之类的有个坑就是,Windows的换行符在Linux中无法识别,导致脚本无法正常运行设置idea换行格式1 . “File”->“setting”->“editor”->“Code ...原创 2018-12-07 17:57:00 · 10284 阅读 · 3 评论 -
golang:json 反序列化的[]和nil
package mainimport ( "encoding/json" "log")type S struct { A []string}func main() { data := &S{} data2 := &S{A: []string{}} buf, err := json.Marshal(&da原创 2019-01-07 17:46:41 · 2638 阅读 · 0 评论 -
Golang::Structs and Interfaces
Although it would be possible for us to write programs only using Go's built-in data types, at some point it would become quite tedious. Consider a program that interacts with shapes:package main...翻译 2019-01-09 19:00:50 · 336 阅读 · 0 评论 -
golang 格式化时间总结
golang 中经常需要格式化时间和日期来满足不同的业务需求,下面总结格式化时间日期中遇到的问题。golang time包 时间日期格式化定义go 的time package 提供了time.Format函数,用来对时间进行格式化输出;类似的还有time.Parse用来解析字符串类型的时间到time.Time。这是两个互逆的函数。下面看golang中time包对于时间的详细定义月份 1,0...转载 2019-02-27 14:38:29 · 41576 阅读 · 0 评论 -
golang 速率限制
rate limiterhttps://godoc.org/golang.org/x/time/rate原创 2019-04-29 14:41:43 · 2913 阅读 · 0 评论 -
Golang:import常用的几种方式
用法点操作 点操作就是导入这个包后可以直接省略包名调用函数,不建议使用 package main import ( . "fmt" ) func main() { Println("hello world") }. 别名操作 ,把包名替换成其他名,便于记忆或者更有意义,或者防止混淆packag...原创 2018-06-19 10:33:58 · 3647 阅读 · 0 评论 -
Golang:Golang生成动态库及调用
简介目前go动态库的生产只支持Linux,Windows下会报这样的错误,`-buildmode=plugin not supported on windows/amd64`CODEplugin.sopackage mainimport ( "fmt" )func DCall(){ fmt.Println("plugin.so wa...原创 2018-06-15 09:49:47 · 20247 阅读 · 0 评论 -
debugserver or lldb-server not found: install XCode's command line tools or lldb-server
简介mac 中安装golang调试器dlvbrew install go-delve/delve/delveln -s /usr/local/Cellar/delve/1.0.0/bin/dlv /usr/local/bin/dlv调试时候出现错误debugserver or lldb-server not found: install XCode's command lin...原创 2018-04-24 00:59:23 · 10632 阅读 · 0 评论 -
十条有用的 GoLang技术
这里是我过去几年中编写的大量 Go 代码的经验总结而来的自己的最佳实践。我相信它们具有弹性的。这里的弹性是指: 某个应用需要适配一个灵活的环境。你不希望每过 3 到 4 个月就不得不将它们全部重构一遍。添加新的特性应当很容易。许多人参与开发该应用,它应当可以被理解,且维护简单。许多人使用该应用,bug 应该容易被发现并且可以快速的修复。我用了很长的时间学到了这些事情。其中的一些很微小,但对于许多...转载 2018-05-10 10:59:33 · 2350 阅读 · 0 评论 -
Golang中的public,private
Go语言没有像其它语言一样有public、protected、private等访问控制修饰符,它是通过字母大小写来控制可见性的,如果定义的常量、变量、类型、接口、结构、函数等的名称是大写字母开头表示能被其它包访问或调用(相当于public),非大写开头就只能在包内使用(相当于private,变量或常量也可以下划线开头) 注意这个访问权限的规则是跨包,包内都是”共有”的code public...原创 2018-05-11 11:27:16 · 8859 阅读 · 3 评论 -
windows 下使用gopacket抓包获取网卡列表信息
准备安装gopacket go get github.com/google/gopacket/pcap安装gcc 去http://tdm-gcc.tdragon.net/download下载gcc,配置gcc就不细说了安装winpcap和winpcap develop package 去 https://www.winpcap.org/devel.htm下载winpacp4.1.3...原创 2018-05-07 14:26:32 · 3076 阅读 · 1 评论 -
go生成临时文件
codepackage mainimport ( "fmt" "io/ioutil" "os")func main() { buf := "Hello, World" file, err := ioutil.TempFile("", "tmpfile&原创 2018-05-20 15:37:56 · 4347 阅读 · 0 评论 -
go读取指定行的内容
codepackage mainimport ( "os" "bufio" "fmt")func main(){ fmt.Println(ReadLine(8))}func ReadLine(lineNumber int) string{ file, _ := os.Open("log.txt")原创 2018-05-20 15:44:32 · 6493 阅读 · 0 评论 -
go等待所有线程退出
codepackage mainimport ( "fmt" "sync")func main() { var wg sync.WaitGroup for i := 0; i < 10; i++ { wg.Add(1) go func(){ fmt.Println("Hello Wor...原创 2018-05-20 18:44:19 · 6293 阅读 · 0 评论 -
Go语言常见坑
简介该文转自柴树杉的开源图书,https://github.com/chai2010/advanced-go-programming-book附录A:Go语言常见坑这里列举的Go语言常见坑都是符合Go语言语法的, 可以正常的编译, 但是可能是运行结果错误, 或者是有资源泄漏的风险.数组是值传递在函数调用参数中, 数组是值传递, 无法通过修改数组类型的参数返回结果.f...转载 2018-05-21 09:59:06 · 1313 阅读 · 1 评论 -
Go 记录日志——log包
Golang’s log模块主要提供了3类接口。分别是 “Print 、Panic 、Fatal ”,对每一类接口其提供了3中调用方式,分别是 “Xxxx 、 Xxxxln 、Xxxxf”,基本和fmt中的相关函数类似,下面是一个Print的示例:package mainimport ( "log")func main(){ arr := []int {2,3} ...转载 2018-05-15 14:24:58 · 3447 阅读 · 0 评论 -
golang udp 指定本地地址和端口
指定本地地址为127.0.0.1 端口7770 localip := net.ParseIP("127.0.0.1") remoteip := net.ParseIP("127.0.0.1") lAddr := &net.UDPAddr{IP: localip, Port: 7770} rAddr := &net.UDPAddr{IP: remot...原创 2018-05-16 10:06:04 · 8241 阅读 · 0 评论 -
go 定时器
package mainimport ( "encoding/json" "fmt" "sync/atomic" "time")func demo() { for { select { case &lt;-time.After(time.Second * 1):原创 2018-05-23 19:47:37 · 1433 阅读 · 0 评论 -
go json 反序列化
code解析该段json{ "e":"ohlcv24", "data":[ "7469.6", "7541.1", "7156", "7213.4",原创 2018-05-29 10:48:10 · 1967 阅读 · 0 评论 -
go 单元测试和benchmark测试
main.gopackage mainimport ( &quot;fmt&quot;)func isOneBitCharacter(bits []int) bool { var result bool var idx int for idx = 0; idx &amp;lt; len(bits); { if bits[idx] == 0 { ...原创 2018-05-24 20:25:34 · 3710 阅读 · 0 评论 -
golang select典型用法
codepackage mainimport ( &amp;amp;quot;fmt&amp;amp;quot; &amp;amp;quot;time&amp;amp;quot;)func chanTest(ch chan int) { for { //select外层需要循环 select { case value, ok := &amp;amp;amp;原创 2018-05-30 10:17:04 · 3318 阅读 · 0 评论 -
Go程序性能分析pprof
開啓分析,插入代碼import ( "runtime/pprof" // 引用pprof package "os" ) func main() { f, _ := os.Create("profile_file") pprof.StartCPUProfile(f) // 开始cpu profile,结果写到文件f中 def...原创 2018-06-06 20:16:11 · 690 阅读 · 0 评论 -
Golang:无缓冲和单向channel
简介初学golang很容易混淆无缓冲的chan和只有一个元素的chan,认为这两个是一回事,其实是完全不同的,make(chan int) 是同步的,只能同时读写,没有读写会一直阻塞;make(chan int,1)是异步的,第一个入队的不会阻塞c1:=make(chan int) 无缓冲c2:=make(chan int,1) 有缓冲codepac...原创 2018-06-14 11:33:48 · 1687 阅读 · 0 评论 -
Golang::条件变量的使用
#codepackage mainimport ( "fmt" "math/rand" "runtime" "sync" "time")var productCount inttype Factory struct { locker *sync.Mutex原创 2018-06-22 19:45:15 · 1247 阅读 · 0 评论 -
在 Mac、Linux、Windows 下Go交叉编译
Golang 支持交叉编译,在一个平台上生成另一个平台的可执行程序,最近使用了一下,非常好用,这里备忘一下。Mac 下编译 Linux 和 Windows 64位可执行程序CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build main.goCGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build main...转载 2018-04-23 18:25:08 · 4605 阅读 · 0 评论