V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  meiyoumingzi6  ›  全部回复第 2 页 / 共 13 页
回复总数  253
1  2  3  4  5  6  7  8  9  10 ... 13  
2022-01-13 14:23:42 +08:00
回复了 BryantBa 创建的主题 Go 编程语言 请教一个 Go 的小白问题
0. 先解释 Golang 的值传递, 注意任何情况下都是值传递, 但是这个值可能是一个地址, 举个例子, 某东有卖螃蟹的, 但是很多是卖的螃蟹券, 我买了螃蟹券, 然后送了人, 那是不是可以说买了螃蟹送礼, 可以, 不过最终需要那个人自提而已
1. 有没有办法证明 Golang 是值传递,
```golang
package main

import "fmt"
type demo struct{}

func test(arg interface{}) {
fmt.Printf("in func test %p\n", &arg)
}



func main() {
d := demo{}
fmt.Printf("out of test %p\n", &d)
test(d)

fmt.Printf("out of test %p\n", &d)
test(&d)

s := []int{1,2,}
fmt.Printf("out of test %p\n", s)
test(s)

m := map[string]int{"1":1}
fmt.Printf("out of test %p\n", m)
test(m)
}

/*
out of test 0x116ce80
in func test 0xc000010230
out of test 0x116ce80
in func test 0xc000010240
out of test 0xc0000160c0
in func test 0xc000010250
out of test 0xc000074180
in func test 0xc000010260
*/
```
2. slice/map 是引用类型, 害, 你就把他当个螃蟹券
3. 题中两个区别
i). 开销不同, a 中值需要赋值一次地址, 开销很小, b 中需要复制一次结构体
ii). 虽然看起来效果一样, 但是 b 中的 a 跟已经跟外面的 a 不是一个东西了, 因为有一次拷贝, 完完全全就是两个东西
建议来北京待两年(虽然卷, 但是机会还是多一些
淦 格式老错,

自己上我博客看吧

https://blog.yujichenfeng.ml/posts/algorithm/tree/
```python

class Node:
def __init__(self, val, left=None, right=None) -> None:
self.val = val
self.left = left
self.right = right

def create_tree(data: list):
if not data:
return None
first_node = Node(data[0])
tmp_list = [first_node]
tmp_count = 0
for item in data[1:]:
node = tmp_list[0]
new_node = Node(item) if item is not None else None
if tmp_count == 0:
node.left = new_node
# add to tmp_list
if item is not None:
tmp_list.append(new_node)
tmp_count += 1
continue
if tmp_count == 1:
node.right = new_node
if item is not None:
tmp_list.append(new_node)
# POP
tmp_list.pop(0)
tmp_count = 0
continue
return first_node
```
之前写过一个, 不知道是否满足你的需求

class Node:
def __init__(self, val, left=None, right=None) -> None:
self.val = val
self.left = left
self.right = right

def create_tree(data: list):
if not data:
return None
first_node = Node(data[0])
tmp_list = [first_node]
tmp_count = 0
for item in data[1:]:
node = tmp_list[0]
new_node = Node(item) if item is not None else None
if tmp_count == 0:
node.left = new_node
# add to tmp_list
if item is not None:
tmp_list.append(new_node)
tmp_count += 1
continue
if tmp_count == 1:
node.right = new_node
if item is not None:
tmp_list.append(new_node)
# POP
tmp_list.pop(0)
tmp_count = 0
continue
return first_node
2022-01-11 09:36:20 +08:00
回复了 Livid 创建的主题 云修电脑 Reset 解决一切问题
retry reboot reset reinstall rebuy🤪
2022-01-09 17:35:35 +08:00
回复了 ling516 创建的主题 Windows 大家手机电脑互传软件用的是啥
AirDrop
还有就是 真的不考虑安全么?

添加一个站点 直接塞 js 都可以执行, 那不等着被 XSS 注入
啊,这,不考虑用 debug 置成 false 么?


Traceback (most recent call last):
File "/usr/lib64/python2.7/site-packages/tornado-5.1-py2.7-linux-x86_64.egg/tornado/web.py", line 1568, in _execute
result = self.prepare()
File "/usr/lib64/python2.7/site-packages/tornado-5.1-py2.7-linux-x86_64.egg/tornado/web.py", line 2321, in prepare
raise HTTPError(self._status_code)
HTTPError: HTTP 404: Not Found
2022-01-06 19:12:16 +08:00
回复了 fisherwei 创建的主题 北京 北京出发,周末有什么小众一些,可以玩的地方吗?
石家庄:
洗浴中心(。。。)


???? 什么鬼
道理我都懂 但是 bilybily 是啥 ?
b 站 不是 bilibili 么
2022-01-05 09:38:29 +08:00
回复了 shaojz2005 创建的主题 Windows wps 可以取代 office 吗?
不能,因为好久没用了,可能会出现信息偏差

印象中 wps 是可以兼容 office 的,反之不行
那就意味着你给别人的合适对方有很大的概率打开是合适乱的,,甚至打不开,总不能指望别人再装个 wps 吧
2022-01-05 09:34:42 +08:00
回复了 kayseen 创建的主题 Python 一个简单低级的代码逻辑问题
写第一种怕不是要被同事打死
2022-01-04 14:07:32 +08:00
回复了 spotfg 创建的主题 Go 编程语言 golang flag 单元测试跑不过
```golang
package main

import (
"flag"
"fmt"
)

func main() {
// 其他处理逻辑
Execute()
// 其他处理逻辑
}

func Execute() {
s := flag.String("s", "abc", "xxxxxx")
flag.Parse() // 加上这行
fmt.Println(*s)
// 对得到参数的处理
}

```
2022-01-03 19:46:10 +08:00
回复了 dada0627 创建的主题 宽带症候群 广东电信降速套餐有人遇到过吗?
不动就问,日常使用真的需要这么大的上行吗?😂体验上有实际区别吗,还是仅仅是 100 变 50 不爽而已😢
公司有提供隧道用公司的,出事不用你背着
自己搭,不出事没事,出事你就背锅
2022-01-02 15:31:30 +08:00
回复了 zhoudaiyu 创建的主题 程序员 今天有去公司加班的兄弟吗?
加一天的钱可以用来请 3 天假,我也想要🤪
2022-01-02 10:02:11 +08:00
回复了 meiyoumingzi6 创建的主题 程序员 如何使用 GO 实现一个简单的 HTTP(S) PROXY
@yankebupt
@FrankAdler
@2i2Re2PLMaDnghL
@0o0O0o0O0o

感谢大佬们, 破案了
- 原因:

第一次的时候响应不对,应该是 `HTTP/1.0 200 Connection Established\r\n\r\n`,
参考文档:https://datatracker.ietf.org/doc/html/draft-luotonen-web-proxy-tunneling-01#section-3.2

- 补充:

上述代码在 python request 下,因为 `h := string(ctx.Request.Host())` 这行拿到了空, 修改成 `h := string(ctx.Request.RequestURI())` 后可以正常工作, 并且可以有正常的相应

- 为什么 curl 不能用?
看起来是 curl 严格遵守了规范, https://github.com/curl/curl/search?p=3&q=Connection+Established


- CODE

```golang
package main

import (
"fmt"
"github.com/valyala/fasthttp"
"io"
"log"
"net"
"sync"
)

func main() {

if err := fasthttp.ListenAndServe(":1234", requestHandler); err != nil {
log.Fatalf("Error in ListenAndServe: %s", err)
}
}

func haddleHTTPS(ctx *fasthttp.RequestCtx) {
// ctx.Request.RequestURI() , 不要使用 ctx.Request.Host()
h := string(ctx.Request.RequestURI()) // host:port eg. www.baidu.com:443
curConn := ctx.Conn()
// https://datatracker.ietf.org/doc/html/draft-luotonen-web-proxy-tunneling-01#section-3.2
curConn.Write([]byte("HTTP/1.0 200 Connection Established\r\n\r\n"))
fmt.Println("haddle:", h)
remotConn, err := net.Dial("tcp", h)
if err != nil {
}
var wg sync.WaitGroup
wg.Add(2)
go func() {
defer func() {
wg.Done()
}()
io.Copy(curConn, remotConn)
}()

go func() {
defer func() {
wg.Done()
}()
io.Copy(remotConn, curConn)
}()
wg.Wait()
}

func haddleHTTP(ctx *fasthttp.RequestCtx) {
req := fasthttp.AcquireRequest()
req.SetRequestURIBytes(ctx.Request.RequestURI())
req.Header = ctx.Request.Header
req.SetBody(ctx.Request.Body())
client := &fasthttp.Client{}
resp := fasthttp.AcquireResponse()
client.Do(req, resp)
body := resp.Body()
fmt.Println(body)
ctx.Write(body)
}

func requestHandler(ctx *fasthttp.RequestCtx) {
method := string(ctx.Method())
if method == "CONNECT" {
// https
haddleHTTPS(ctx)
return
}
// http
haddleHTTP(ctx)
return
}

```

- code change log

1. fix, 修复其他客户端可能拿不到 ctx.Request.Host() 的问题, 使用 ctx.Request.RequestURI() 代替
2. fix, 修复响应不符合规范的问题, 应该使用 `"HTTP/1.0 200 Connection Established\r\n\r\n"`
3. improve, 使用 `io.Copy` 代替手工读写

- 教训 /经验

1. 还是得多看文档
2. 抓一个正常的请求看看

- 最后

还得得感谢各位大佬们
2022-01-02 08:17:49 +08:00
回复了 meiyoumingzi6 创建的主题 程序员 如何使用 GO 实现一个简单的 HTTP(S) PROXY
@0o0O0o0O0o 是的,当时是为了 debug 打印内容了😂
1  2  3  4  5  6  7  8  9  10 ... 13  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3040 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 31ms · UTC 13:57 · PVG 21:57 · LAX 05:57 · JFK 08:57
Developed with CodeLauncher
♥ Do have faith in what you're doing.