
S1: Go
涛歌依旧
毕业后就职于华为和腾讯
展开
-
复习下go的多态
最近又在用go, 来看个简单的程序。这就体现了go的多态,有兴趣的朋友可以运行一下。原创 2022-06-12 22:44:24 · 506 阅读 · 1 评论 -
阿里终面:如何才能盛下最多的水?
大家好,我是涛哥。又到周末了,愿大家开心。今天不聊复杂的技术问题,来看一道阿里巴巴的终面题目。有趣,而且有一定难度。编程求max{|i-j|*min{a[i], a[j]}}的值,其中a是正整数数组,i和j的区间为[0, n-1].初次看到这个题目时,可能处于懵圈状态,怎么有min又有max呢?到底如何下手?我一直的观点是:既然要找工作,那就要做万全准备,LeetCode题型又岂能不刷?问题转化很显然,这是非常典型的“盛水容器问题”,我来翻译一下,原题等价于如下的问题:n 个正整原创 2021-11-21 22:52:01 · 1444 阅读 · 1 评论 -
买房费用,一文搞懂
本文不讨论是否应该买房,不讨论该在哪里买房,也不讨论固定利率和LPR,而是从客观的角度,分析一下买房过程中的费用问题。对很多年轻奋斗者而言,买房似乎是一个无法回避的问题,不管买不买,多了解一些费用预算,总是好的,这也是本文的目的所在。原创 2021-02-28 18:47:26 · 7548 阅读 · 3 评论 -
玩一下golang操作excel
最近要用golang操作excel,故来玩下:package mainimport ( "fmt" "github.com/360EntSecGroup-Skylar/excelize")func main() { f, err := excelize.OpenFile("/xxxxxx/test.xlsx") if err != nil { fmt.Println(err) return } // Get value from cell by given wor...原创 2020-08-01 08:55:06 · 4260 阅读 · 5 评论 -
github.com/gogo/protobu: invalid pseudo-version: revision is shorter than canonical
编译执行go mod tidy时,出现了这个错误,挺恶心的: xxxrequiresgithub.com/micro/go-plugins@v1.3.0 requiresk8s.io/api@v0.0.0-20190726022912-69e1bce1dad5 requiresgithub.com/gogo/protobuf@v0.0.0-20190410021324-65acae22fc9: invalid pse...原创 2020-07-05 10:43:11 · 3779 阅读 · 5 评论 -
golang中的2006-01-02和ParseInLocation
看程序:package mainimport ( "fmt" "time")func main(){ timeFormatDay := "2006-01-02" nowTime := time.Now() endTime := nowTime yesterdayTime := nowTime.AddDate(0, 0, -1) beginTime, _ := time.ParseInLocation(timeFormatD...原创 2020-07-05 10:41:53 · 11098 阅读 · 2 评论 -
dial tcp: lookup xxx.com on 8.8.8.8:53: no such host
最近在执行go mod tidy更新依赖库时遇到如下问题: dial tcp: lookup xxx.com on 8.8.8.8:53: no such host 但我的mac明明没有任何地方配置8.8.8.8啊, 而且我抓包看了,mac确实没有给8.8.8.8发任何请求。 继续仔细分析,看到这个提示: reading https://sum.golang.org/lookup/xxx.com 就是这里了,原来是这里在向8.8.8...原创 2020-07-05 10:42:17 · 57459 阅读 · 10 评论 -
golang中多写了个冒号,差点就呵呵哒了
实际项目中,出现了很低级的错误:package mainimport ( "fmt")var a intfunc init() { a := 10 // 这里手误,多了冒号,呵呵哒 fmt.Println("init, a=", a)}func main() { fmt.Println(a)} 差点就呵呵哒了。...原创 2020-06-06 20:41:42 · 2858 阅读 · 2 评论 -
mac上更新go版本
go.1.12版本出现编译错误:go: finding github.com/codahale/hdrhistogram latestbuild command-line-arguments: cannot load crypto/ed25519: cannot find module providing package crypto/ed25519 原因是:go...原创 2020-05-08 22:22:54 · 7139 阅读 · 3 评论 -
go panic问题一例
写个工具,发现程序panic了:panic: runtime error: invalid memory address or nil pointer dereference[signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x115dab8]goroutine 1 [running]:crypto/r...原创 2020-04-11 19:34:14 · 2449 阅读 · 2 评论 -
go build main.go出现的呵呵哒错误
最近写个工具,main.go文件包名是main, b.go文件的包名也是main, main.go和b.go位于同一目录下,在编译的时候,我执行go build main.go, 结果报错: main.go找不到定义在b.go中的变量。 愣了一会儿才看出问题,呵呵哒,这是要用go build *.go来编译啊,大哥。 无语。...原创 2020-04-11 14:48:02 · 4647 阅读 · 5 评论 -
交叉编译后strip遇到的问题:can‘t process non-object and non-archive file
在mac上利用交叉编译,可生成在ubuntu上运行的文件。 然后,在mac上想strip时,发现失败:/Library/Developer/CommandLineTools/usr/bin/strip: can't process non-object and non-archive file 想了一下,大概知道原因了:在mac上的strip命令,不认知交叉编译后的文...原创 2020-03-21 18:15:53 · 2965 阅读 · 2 评论 -
异步log让人临时怀疑人生------log是现象,还可能是假象,不可全信
在之前的博文中,多次说过:log是现象,还可能是假象,不可全信。 在实际开发中,见过太多太多这样的案例。 来看看最近遇到的一个让人临时怀疑人生的问题, go伪代码如下:type Money struct { Principal int}func main(){ p := new(Money) p.Principal = 10 log.Infof("...原创 2019-11-01 20:59:26 · 3036 阅读 · 4 评论 -
golang defer的那些坑爹事儿
先来一个最简单的:package main import ( "fmt") func f() { i := 1 fmt.Println("i1 is", i) defer fmt.Println("i2 is", i) defer fmt.Println("i3 is", i)}func main(...原创 2019-11-01 20:01:10 · 2473 阅读 · 3 评论 -
log丢失之谜
最近,遇到这样一个问题: a文件:func main(){ log.Infof("begin") y := sub(100, 20) log.Infof("end, y is %d", y) return} b文件:func sub(x, y int) int { log.Infof("sub begin") return x - ...原创 2020-03-06 22:31:43 · 2879 阅读 · 6 评论 -
异步log"丢失"之谜
前段时间,需要修复线上数据,于是写了类似这样一个程序:func main(){ for i := 0; i < 10000000; i++ { // fix users' data log.Infof("fix details") totalInfo += "xxx" } log.Infof("total info is %s",...原创 2020-03-06 22:32:59 · 2486 阅读 · 2 评论 -
Go Go Go
第一次玩go, 准备在linux上搭建个环境, 一起似乎都准备好了, 然后出现:xxxxxx:~> go run me.goFATAL: kernel too oldgo build command-line-arguments: signal: segmentation fault 晕, 居然嫌弃我linux版本太旧, 我暂时不想升级linux, 也不想再Windows原创 2017-10-18 21:55:53 · 8135 阅读 · 3 评论 -
linux下搭建go环境很easy
linux下搭建go环境很简单: 1. 下载go1.2.1.linux-386.tar.gz, 网上到处有类似包, 并放到linux目录下。 我是从优快云上下载的, 然后传到linux机器上:taogeqq@taogeqq-virtual-machine:~/myspace$ lsa.out go1.2.1.linux-386.tar.gz test.cpp te原创 2017-11-07 23:18:27 · 8370 阅读 · 1 评论 -
在树莓派上安装go环境很简单
之前在ubuntu上安装go环境, 居然还去下载包, tar解压, 设置环境变量, 其实, 完全没有必要, 一个命令就搞定。 树莓派也是如此:sudo apt-get install golang 写个程序, 看下结果:pi@raspberrypi:~/taoge $ cat test.go package main import "fmt" func m原创 2017-12-12 00:01:15 · 13992 阅读 · 7 评论 -
用go语言来玩下选择排序
用go语言来玩下选择排序, 找找go的感觉:package mainimport "fmt"func select_sort(a []int){ n := len(a) for i := 0; i < n; i++ { pivot := i; pivotKey := a[i]; for j := i + 1;...原创 2018-08-14 22:08:31 · 3939 阅读 · 2 评论 -
Golang 新手可能会踩的 50 个坑
转载地址: https://github.com/wuYin/blog/blob/master/50-shades-of-golang-traps-gotchas-mistakes.md 原文:50 Shades of Go: Traps, Gotchas, and Common Mistakes,翻译已获作者 kcqon 授权。不久前发现在知乎这篇质量很高的文章,...转载 2018-08-17 20:54:09 · 9861 阅读 · 4 评论 -
Go语言并发与并行
间接转载地址: https://blog.youkuaiyun.com/sb___itfk/article/details/79045906 首先,并行!=并发, 两者是不同的Go语言中有个概念叫做goroutine, 这类似我们熟知的线程,但是更轻。 以下的程序,我们串行地去执行两次loop函数:func loop() { for i := 0; i <...转载 2018-08-14 22:19:00 · 3889 阅读 · 2 评论 -
从C/C++到Go
很多程序员都是从c/c++转到go的,难免会产生一些混淆, 在学习go语言的时候,尤其要注意与c/c++的区别, 对比起来学习效果可能更好。下面这个总结很不错, 直接引用过来学习:http://hyperpolyglot.org/c HyperpolyglotC, Goa side-by-side reference sheetgrammar and invoca...原创 2018-08-03 21:09:03 · 7411 阅读 · 3 评论 -
A C++ developer looks at Go------值得一读
转载地址:https://www.murrayc.com/permalink/2017/06/26/ A C++ developer looks at Go (the programming language), Part 1: Simple FeaturesI’m reading “The Go Programming Language” by Brian Kernig...转载 2018-08-03 21:12:22 · 5004 阅读 · 1 评论 -
go语言中换行和分号那点事------理解为什么
来看一个最简单的go程序:package mainimport ( "fmt")func main() { fmt.Println("hello world")} main函数的左花括号必须在main同行,否则出错。 我刚开始从c/c++转go的时候, 觉得很别扭, 其实, 习惯了就好。为什么go的先驱们要这么玩呢? 这是为了在语...原创 2018-08-15 23:29:21 · 22354 阅读 · 4 评论 -
用go语言来玩下冒泡排序
用go语言来玩下冒泡排序, 主要是熟悉一下Go语法:package mainimport "fmt"func bubble_sort(a []int){ n := len(a) for i := 0; i < n - 1; i++ { for j := 0; j < n - 1 - i; j++ { if ...原创 2018-08-12 22:02:57 · 4125 阅读 · 2 评论 -
为什么 Go 语言把类型声明放在后面?
转自:https://blog.youkuaiyun.com/zhang8058/article/details/42430543 本文整理自知乎,原文作者 @林建入。 不是为了与众不同。而是为了更加清晰易懂。 Rob Pike 曾经在 Go 官方博客解释过这个问题(原文地址:http://blog.golang.org/gos-declarat...转载 2018-08-26 14:37:08 · 4347 阅读 · 4 评论 -
*p++在go和c/c++中的区别
来看c/c++:#include <iostream>using namespace std;int main() { int a = 10; int *p = &a; *p++; cout << *p << endl; return 0;} 结果是:-5472...原创 2018-08-18 08:46:30 · 3597 阅读 · 1 评论 -
go语言局部变量分配在栈还是堆?
转载地址:https://www.jianshu.com/p/4e3478e9d252 一个问题引发的思考?如下go语言代码package mainfunc foo(m0 int) (*int) { var m1 int = 11; return &m1}func main() { m := foo(100) println(*m...转载 2018-08-26 13:50:42 · 7180 阅读 · 2 评论 -
go map是hash map而非rb-tree map
在看go圣经时, 有这样一句话: A map holds a set of key/value pairs and provides constant-time operations to store, retrieve or test for an item in the set. 看完这句话, 应该能立即感觉到go map是hash map, 而非rb-tree map. ...原创 2018-08-16 22:07:33 · 3860 阅读 · 1 评论 -
理解Go语言的nil
转载地址:https://studygolang.com/articles/9506 最近在油管上面看了一个视频:Understanding nil,挺有意思,这篇文章就对视频做一个归纳总结,代码示例都是来自于视频。nil是什么相信写过Golang的程序员对下面一段代码是非常非常熟悉的了:if err != nil { // do something...转载 2018-08-26 14:19:10 · 3968 阅读 · 2 评论 -
用go的flag包来解析命令行参数
go真是太贴心了, 来看看用go的flag包来解析命令行参数:package mainimport( "flag" "fmt" )func main() { var l = flag.Int("l", 0, "para l is for len") var c = flag.String("c", "nothing", "para c is f原创 2018-08-18 15:42:52 · 3644 阅读 · 2 评论 -
来玩下go的http get
如果写代码的时候, 需要经常去查语法,那说明对语言还不够熟练。来玩下go http get, 主要是练练手:package mainimport( "fmt" "net/http" "io/ioutil" "os" )func main(){ rsp, err := http.Get("http://www.baidu.c...原创 2018-08-18 16:13:46 · 10502 阅读 · 1 评论 -
感受一下go协程goroutine------协程在手,说go就go
看go程序:package mainimport "fmt"import "time"func main(){ go f() a := fib(45) // very slow fmt.Println("main ends", a)}func fib(x int) int { if x < 2 { r...原创 2018-08-19 12:32:36 · 4056 阅读 · 2 评论 -
go语言如何从终端逐行读取数据?------用bufio包
go语言如何从终端逐行读取数据? 来看看:package mainimport ("fmt" "os" "bufio")func main(){ counts := make(map[string] int) input := bufio.NewScanner(os.Stdin) for input.Scan(){...原创 2018-08-17 20:37:03 · 7029 阅读 · 1 评论 -
go的值类型和引用类型------重要的概念
在本文中, 我们来简要说一下go的值类型和引用类型, 这很重要。 在go中, 值类型有: int float bool string array等 引用类型有: slice map channel等 来看个简单的程序:package mainimport ( "fmt")func ma...原创 2018-08-17 20:24:17 · 4071 阅读 · 2 评论 -
go的nil map有什么卵用?
在C++ STL中,只有empty map, 没有NULL map, 但是, 在go中,既有empty map, 又有nil map. 为什么要怎么搞? 在我看来, 完全没有必要搞个nil map, 所有的map应该都是直接自动初始化为empty map. 既然go设计者这个搞了, 自然有他们的理由, 我不认同, 但没有什么卵用。 来看看go圣经怎么说:The ze...原创 2018-08-25 19:57:51 · 6307 阅读 · 1 评论 -
用go来玩buf---hex的转换
buf---hex的转换很常见, 来用go练练手:package mainimport ( "fmt" "encoding/hex")func main(){ sli := []byte("abc") str := hex.EncodeToString(sli) fmt.Printf("%T\n", sli) fmt.Prin...原创 2018-08-25 20:11:33 · 5474 阅读 · 1 评论 -
用go语言来玩下md5
早年用C/C++计算md5, 需要引入各种外部库才可以, 痛苦。 后来玩php, 发现一行语句搞定,善哉善哉, 来用go玩练练手package mainimport ( "fmt" "crypto/md5" ) func main(){ str := "abc" x := md5.New(); x.Write([]by...原创 2018-08-25 20:19:40 · 4219 阅读 · 5 评论 -
来玩go之面向对象
看下面向过程的代码:package mainimport "fmt"type Integer int func adder(x, y Integer) Integer { return x + y}func main() { var x Integer = 1 var y Integer = 2 fmt.Println(adder...原创 2018-08-26 13:42:36 · 3501 阅读 · 2 评论