V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  body007  ›  全部回复第 11 页 / 共 14 页
回复总数  273
1 ... 3  4  5  6  7  8  9  10  11  12 ... 14  
@cheng6563 你得了解 go 的引用类型,chan 是引用类型,直接返回就是引用。作为返回值,引用类型本身类似指针,返回的就是引用。作为参数在引用类型加指针貌似只有需要修改引用类型的时候才用到吧。
结构体统统用指针,普通类型用值。因为结构体你不知道啥时候加需求往里面加大类型,而且结构体一般会到处传,如果所有地方都用值传递,每次赋值都内存拷贝一份也是有开销的,指针的话只拷贝指针地址更快。

另外 https://www.cnblogs.com/janbar/p/17072751.html 这篇文章探讨了直接赋值的深拷贝问题,即使你值传递,结构体内部有指针,那么这些指针在赋值时也是赋值指针地址。如果用值值类型,你到时候还得思考结构体内部哪些字段是深拷贝,哪些是浅拷贝。

http 提供下面方式克隆对象,就是因为值传递内部字段也存在浅拷贝问题,需要编写深拷贝代码。与其值传递增加心智负担,还不如无脑指针传递。
func (r *Request) Clone(ctx context.Context) *Request {

综上所述,我觉得结构体一律用指针。

我在用的 [go-zero]( https://github.com/zeromicro/go-zero/pull/1211/files#diff-a650192c5b74f391823e44c0b326c07abe5c2544ab386b1ce73ce6b293d78a4c) 框架,在这次改动中将参数值传递改为指针传递,导致我某次升级改了好多文件代码,连大佬都觉得结构体指针传递好些吧。


如果你明确的知道你需要值传递,并且清楚这个对象赋值后内部字段存在浅拷贝也不会影响逻辑,那么可以用值传递。
https://i.imgur.com/rXEcjzD.png
https://i.imgur.com/Snpu7k7.png

建议统一下,我用 git 仓库安装,结果配置好了报错,提示包不存在😂
172 天前
回复了 xlinux 创建的主题 问与答 关于接口参数处理
我们的前端更奇葩,要求他多传的字段我后端要帮他存着,后面详情接口得原样给他返回,我直呼好家伙啊。
172 天前
回复了 hankli 创建的主题 分享创造 全栈程序员看过来~节省你的时间利器!
@hankli #12 嗯嗯,期待后续更新。主要是 fnm 那种创建链接目录的思想让我觉得优秀,能做到每个打开的终端都支持不同版本。
172 天前
回复了 hankli 创建的主题 分享创造 全栈程序员看过来~节省你的时间利器!
@hankli #10 用过 https://github.com/Schniz/fnm ,其中我觉得好的功能就是每个打开的终端都可以使用特定版本,cd 到项目目录自动读取该目录文件自动切换到项目需要的版本。你的这个仓库支持么?我还没细看你这个仓库功能呢。
172 天前
回复了 hankli 创建的主题 分享创造 全栈程序员看过来~节省你的时间利器!
https://github.com/moqsien/gvc

这个库貌似也想做你要做的事。
@theprimone #10 secret 也得保密传输啊,泄露了就等于裸奔了,最好的方式就是定期更新。我自己用自建的 trilium 笔记,自己写 js 代码生成验证码,不用关心自动获取 secret , 我自己也够用了额。

https://i.imgur.com/ESAKaAV.png
@theprimone #7 可以去 github 搜 2fa ,一大堆的命令行生成工具,要的就是本地生成验证码。
@theprimone #7 本来就是啊。OTP 运行的代码建议都在客户端,避免被中间人获取,不然怎么安全嘛,30 秒内有效就更严格的阻止安全问题了。
@huntzhan #5 你这个不科学,密码通过网络传输过,违背 OTP 的初衷。验证码 30 秒内有效,在客户端本地计算才安全。https://github.com/iamyuthan/2FA-Solver ,这里有个纯前端的项目,生成的代码也不复杂。
179 天前
回复了 yujianwjj 创建的主题 Go 编程语言 go 大小写对导出的影响
@nagisaushio 就是要讨论字段 I 被导出,外部可以调用,而 inner 类型不是导出的情况,我只是列出了一种场景吧。
@zed1018 这个感觉不错,单文件部署
https://github.com/go-acme/lego/releases
179 天前
回复了 yujianwjj 创建的主题 Go 编程语言 go 大小写对导出的影响
复制某个 GPT 的回答。

非导出类型包含导出字段的应用场景是合法的。这种情况通常出现在需要将结构体值传递给其他包以进行处理的情况下。为了让其他包能够访问字段,这些字段必须是导出的,但结构体类型本身可以保持为非导出。

举个例子,假设你想要生成一个 JSON 响应。你可以创建一个非导出的结构体,然后为了能够使用 `encoding/json` 包,结构体的字段必须是导出的。例如:

```go
type response struct {
Success bool `json:"success"`
Message string `json:"message"`
Data string `json:"data"`
}

func myHandler(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json;charset=UTF-8")
resp := &response{
Success: true,
Message: "OK",
Data: "some data",
}
if err := json.NewEncoder(w).Encode(resp); err != nil {
// 处理错误
}
}
```

在这个例子中,`response` 结构体是非导出的,但它包含了导出的字段。这使得我们可以在 `myHandler` 函数中创建 `response` 结构体的实例,并将其传递给 `encoding/json` 包来生成 JSON 响应。

总的来说,非导出类型包含导出字段的应用场景通常出现在需要将结构体值传递给其他包以进行处理的情况下。
我查了下 sh -s 可以从标准输入中执行脚本,因此你可以将 sh 脚本加密成字符串存在 c 代码中,使用时解密,并启动子进程 sh -s ,然后把脚本传入 stdin 的标准输入就行。

https://i.imgur.com/EcF3e5W.png
180 天前
回复了 unt 创建的主题 程序员 求 FTP+终端+远程在线编辑的终极方案
用 NppFTP 插件,支持 FTP 和 SFTP 。
推荐: https://github.com/jan-bar/EncryptionFile

你只需要保存好私钥不要泄露就行,公钥加密文件,私钥解密文件。
183 天前
回复了 lacklock 创建的主题 程序员 如果你打算全职独立开发,我有一点建议
好文收藏,值得深入学习。
@ludage #1 看了下忽略列表的定义,这难道就是我每次 debuger 进不去 node_modules 目录下面代码的原因么?晚点试试去掉后调试看看。给大佬点赞👍
别用国产浏览器了,这段时间访问 P 站提示无网络,换成 Chrome 就没问题。你猜猜看,用国产浏览器知不知道你在干嘛。
1 ... 3  4  5  6  7  8  9  10  11  12 ... 14  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2345 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 30ms · UTC 04:19 · PVG 12:19 · LAX 21:19 · JFK 00:19
Developed with CodeLauncher
♥ Do have faith in what you're doing.