gopls版本
构建信息 ----------- golang.org/x/tools/gopls v0.15.0-pre.1 golang.org/x/tools/gopls@v0.15.0-pre.1 h1:u87rDKpsE6ax0cASyD9mJW9If25TtW0IupV6vKDDevg= github.com/BurntSushi/toml@v1.2.1 h1:9F2/+DoOYIOksmaJFPw1tGFy1eDnIJXg+UHjuD8lTak= github.com/google/go-cmp@v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= golang.org/x/exp/typeparams@v0.0.0-20221212164502-fae10dda9338 h1:2O2DON6y3XMJiQRAS1UWU+54aec2uopH3x7MAiqGW 6Y= golang.org/x/mod@v0.14.0 h1:dGoOF9QVLYng8IHTm7BAyWqCqSheQ5pYWGhzW00YJr0= golang.org/x/sync@v0.5.0 h1:60k92dhOjHxJkrqnwsfl8KuaHbn/5dl0lUPUklKo3qE= golang.org/x/telemetry@v0.0.0-20231114163143-69313e640400 h1:brbkEFfGwNGAEkykUOcryE/JiHUMMJouzE0fWWmz/QU= golang.org/x/text@v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= golang.org/x/tools@v0.16.2-0.20240105173808-36a523fefd90 h1:3dw2Y1Aes2o83VYvSZSPc+p70AuT9zvNCTBHCvUUZrE= golang.org/x/vuln@v1.0.1 h1:KUas02EjQK5LTuIx1OylBQdKKZ9jeugs+HiqO5HormU= honnef.co/go/tools@v0.4.5 h1:YGD4H+SuIOOqsyoLOpZDWcieM28W47/zRO7f+9V3nvo= mvdan.cc/gofumpt@v0.4.0 h1:JVf4NN1mIpHogBj7ABpgOyZc65/UUOkKQFkoURsz4MM= mvdan.cc/xurls/v2@v2.4.0 h1:tzxjVAj+wSBmDcF6zBB7/myTy3gX9xvi8Tyr28AuQgc= go: go1.21.5
go env
GO111MODULE=''
GOARCH='arm64'
GOBIN=''
GOCACHE='/Users/toad/Library/Caches/go-build'
GOENV='/Users/toad/Library/Application Support/go/env'
GOEXE=''
GOEXPERIMENT=''
GOFLAGS=''
GOHOSTARCH='arm64'
GOHOSTOS='darwin'
GOINSECURE=''
GOMODCACHE='/Users/toad/work/pkg/mod'
GONOPROXY=''
GONOSUMDB=''
GOOS='darwin'
GOPATH='/Users/toad/work'
GOPRIVATE=''
GOPROXY='https://goproxy.cn,direct'
GOROOT='/Users/toad/go/go1.21.5'
GOSUMDB='sum.golang.org'
GOTMPDIR=''
GOTOOLCHAIN='auto'
GOTOOLDIR='/Users/toad/go/go1.21.5/pkg/tool/darwin_arm64'
GOVCS=''
GOVERSION='go1.21.5'
GCCGO='gccgo'
AR='ar'
CC='cc'
CXX='clang++'
CGO_ENABLED='1'
GOMOD='/Users/toad/work/demo1/go.mod'
GOWORK=''
CGO_CFLAGS='-O2 -g'
CGO_CPPFLAGS=''
CGO_CXXFLAGS='-O2 -g'
CGO_FFLAGS='-O2 -g'
CGO_LDFLAGS='-O2 -g'
PKG_CONFIG='pkg-config'
GOGCCFLAGS='-fPIC -arch arm64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -ffile-pref
ix-map=/var/folders/g1/tgmnlrdn3vxgv08kdgh9vpkw0000gn/T/go-build2737097617=/tmp/go-build -gno-record-gcc-switch
es -fno-common'
你做了什么?
在 a=b
中调用代码操作
type AA struct {
CCC string
EEE string
BBB int
}
type BB struct {
CCC string
BBB int
DDD string
}
func main() {
var (
a AA
b BB
)
a=b
}
你看到了什么?
没有代码操作。
你期望看到什么?
有支持自动转换的代码操作。
func main() {
var (
a AA
b BB
)
a = AA{
CCC: b.CCC,
BBB: b.BBB,
}
}
编辑器和设置
- 无响应*
日志
- 无响应*
4条答案
按热度按时间5kgi1eie1#
@gopherbot, please add label FeatureRequest
niwlg2el2#
请描述您希望此功能如何精确工作的详细方式?如果b中的任何字段名称与a中的字段匹配,是否应生成一个复合字面量Map这些字段?如果B中存在具有匹配名称和类型的方法,我们是否应该调用它们?
我认为这样的功能很少需要。您是否发现您经常使用这个功能?
dphi5xsq3#
@findleyr
我觉得这样的功能很少需要。你发现你会经常使用这个功能吗?
是的,我经常使用这个功能。
在我们的服务中,不同层之间使用不同的结构体。
例如:
如果在b中有任何字段名与a中的字段名匹配,生成一个复合字面量Map这些字段?
是的。
处理复合数据结构会很好。
像B.UserID -> A.User.ID
如果B中有与A中同名且类型相同的方法,我们应该调用它们吗?
是的。
它应该支持以Get开头的方法。我经常需要将
protobuf
中的结构转换为我自己的结构。nhhxz33t4#
关于这个,有什么新消息吗?
如果你同意的话,我很乐意提供该功能的实现。