![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
go
houjibofa2050
读源码,要有技术深度,做一个把一招练一万遍的程序员。
展开
-
channel 源码解析(5问)
1.从sendq队列头部取一个元素,如果元素不为空,环形队列缓存区已满,说明buffer已满,大量的send goroutine在发送数据,阻塞了,rece从循环队列读取一个元素,,把goroutinue元素放在循环队列中,从sendq队列中唤醒goroutinue。1.检查 recvq 双向链表 是否为空,如果不为空,说明recvq缓存队列不为空,buffer为空,有大量的recvq在等待,则从 recvq 头部取一个 goroutine,将数据发送过去,并唤醒对应的 goroutine 即可。原创 2023-04-13 00:58:43 · 1685 阅读 · 1 评论 -
正向代理实战
正向代理是客户端代理,实现隐藏客户端真实的ip,访问客户端无法访问的资源比如google.经典正向代理应用是vpn.原创 2023-02-15 23:11:06 · 821 阅读 · 0 评论 -
golang defer相关知识点
golang defer知识点原创 2022-12-26 17:14:55 · 539 阅读 · 0 评论 -
golang slice面试题
golang slice 面试题原创 2022-12-22 15:12:07 · 153 阅读 · 0 评论 -
expect自动应答工具
go-expect实现命令自动应答原创 2022-06-09 19:41:04 · 1004 阅读 · 0 评论 -
golang 交替打印字符串 面试题
题目内容://使用两个 goroutine 交替打印序列,// 一个 goroutine 打印数字,// 另外一个 goroutine 打印字母,// 最终效果如下:////12AB34CD56EF78GH910IJ1112KL1314MN1516OP1718QR1920ST2122UV2324WX2526YZ2728waitgroup+2个channel 两个channel交替读取写入参数package mainimport ( "fmt" "sync")//使..原创 2021-09-09 21:55:02 · 564 阅读 · 0 评论 -
golang 性能优化
1.easyjson代替标准json2.strings.builder 代替+号做字符串拼接代码如下package mainimport ( "encoding/json" "gohello/domain" "strings" "testing" "time")//运行benchmark//go test -bench="." -benchmemfunc BenchmarkAddString(b *testing.B){ elems := []string{"1",原创 2021-04-08 20:19:42 · 224 阅读 · 0 评论 -
golang 对象转json
1.omitempty 如果对应的字段没有值,则忽略,有,则不会略2.- 永久忽略代码:package mainimport ( "encoding/json" "fmt")type Person struct { Name string `json:"name"` Age int `json:"age"` Addr string `json:"addr,omitempty"` //不存在,则忽略.存在则,不忽略}type Animal stru..原创 2020-12-02 15:50:27 · 2305 阅读 · 0 评论 -
中英文字符串的遍历 go语言
代码:import ( "fmt")func main() { str := "hello中国" fmt.Println(str) for i, v := range []rune(str) { fmt.Println(i, string(v)) }}原创 2020-06-29 16:42:43 · 381 阅读 · 0 评论 -
leetcode 206. 反转链表 go 语言实现
递归实现与非递归实现,以及头插法/** * @Description: 反转链表 非递归方式 * * @Date: * @Author: fuGuoWen * @Return * @Throws */func reverseList(head *ListNode) *ListNode { var pre *ListNode var next *ListNode for head != nil { next = head.Next head.Next = pre pr原创 2020-06-28 22:12:11 · 144 阅读 · 0 评论 -
leetcode 92. 反转链表 II java 实现和go 实现
对指定范围的链表,实现反转public class Test52 { public static void main(String[] args) { ListNode listNode1=new ListNode(1); ListNode listNode2=new ListNode(2); ListNode listNode3=new ListNode(3); ListNode listNode4=new ListNode(原创 2020-06-28 22:02:41 · 183 阅读 · 0 评论 -
leetcode 21. 合并两个有序链表 go语言实现
递归实现与非递归实现/** * @Description: 链表的遍历 * * @Date: * @Author: fuGuoWen * @Return * @Throws */func Print(l1 *ListNode) { for l1 != nil { fmt.Println(l1.Val) l1 = l1.Next }}/** * @Description: 合并两个有序的链表 非递归实现 * 时间复杂度O(m+n) 空间复杂度O(1) * @Da原创 2020-06-28 20:08:36 · 2755 阅读 · 0 评论 -
leetcode 118. 杨辉三角 119 杨辉三角 II go语言实现
代码实现:package mainimport "fmt"func main() { //arr := generate(0) res := getRow(3) fmt.Println(res)}/** * @Description: 杨辉三角 I 类似动态规划 * * @Date: * @Author: fuGuoWen * @Return * @Throws */func generate(numRows int) [][]int { /** 创建二维数组原创 2020-06-28 20:00:48 · 353 阅读 · 0 评论 -
go 读取文件,并统计单词的个数,按照值进行排序
代码:package mainimport ( "bufio" "fmt" "io" "os" "sort" "strings")func main() { fi, err := os.Open("D:/software/learngo/a.txt") if err != nil { fmt.Printf("Error: %s\n", err) return } defer fi.Close() //创建map map1 := make(map[strin原创 2020-06-25 17:22:02 · 615 阅读 · 0 评论