草庐IT

变化率

全部标签

go - 为什么 unmarshal 使 golang 中的对象类型发生变化

我想编写一个mockData方法,它可以接受多种类型的参数并根据其json数据返回相应的对象。代码如下:funcMockData(jsonPathstring,vinterface{})(interface{},error){varretinterface{}data,_:=ioutil.ReadFile(jsonPath)switchv.(type){caseReq:ret=Req{}fmt.Printf("\n===beforeUnmarshal==%T===\n",ret)err=json.Unmarshal(data,&ret)iferr!=nil{...}fmt.Printf

pointers - 函数指针参数变化

我正在尝试编写一些使用指针参数更改结构片段的函数。我在GoPlayground中用这种类型的代码做了一些Playground,我发现我有一些错误,但我不知道什么是管理它的最佳方法packagemainimport"fmt"typePersonstruct{namestring}funcdoSomething(person*Person){person.name="John"}funcmain(){varpersons[]Personp:=Person{name:"David"}persons=append(persons,p)doSomething(&p)fmt.Println(per

go - 追加时 Go slice 容量如何变化?

这个问题在这里已经有了答案:Howthesliceisenlargedbyappend?Isthecapacityalwaysdoubled?(2个答案)关闭3年前。运行示例TheGoTour在服务器上(目前版本为1.12.7),如果新的slice长度大于当前支持数组的长度,我发现slice的容量加倍到2的下一次幂。如果我在我的机器上运行相同的程序(Windows上的版本1.10.3),slice容量将变为下一个二的倍数。为什么不同?是因为Go版本还是运行时实现?容量变化是确定性的吗?远程服务器上的输出是这样的len=0cap=0[]len=1cap=2[0]len=2cap=2[01

go - 迭代时我在 slice 中范围变化的值

我有一个[]int可以覆盖。当我迭代时,我得到了一个键/值。我还想访问我正在迭代的slice。我不明白为什么slice会发生变化。funcmain(){varrows[]stringrows=append(rows,"123","456")for_,row:=rangerows{row:=formatRow(row)fmt.Println("sentrow:",row)//我不明白为什么slice值是[1,2,3]然后是[1,2,3]然后是[1,3,3]。它似乎永远不会改变。 最佳答案 slice是类似引用的类型。当您将它传递给某个

json - 编码/解码后的结构变化

我目前遇到的问题是在将结构保存到json文件然后从json文件打开结构后,结构的属性以某种方式发生了轻微的变化。在structN中,有时A和B可以指向同一个J,但是经过encode再decode后指向不同的J值。在编码之前返回true(预期)。解码后,它返回false(不是预期的)fmt.Println("issamepointer",n.A[0]==n.B[0])这是应该发生的吗?有没有解决的办法。谢谢。typeNstruct{A[]*JB[]*JC[]*J}func(n*N)Save(namestring){name="radacted.json"err:=os.Remove(na

go - 由于 slice 中的项目数正在变化,如何安全地从 slice 中删除项目

在我遍历用户slice后,我需要根据某些条件从slice中删除一些用户。我将多次遍历此用户slice,慢慢删除一些元素。我从其他语言了解到,在循环时从集合中删除项目是不安全的。所以我正在做的是将我想要删除的元素存储在maptoMutate中。原始循环完成后,我会继续尝试从slice中删除元素。toMutate:=make(map[int]User,100)foridx,u:=rangec.users{ifsomeCondition{toMutate[idx]=u}}然后我调用此函数从用户的slice中删除项目。foridx,u:=rangetoMutate{c.users=append

go - 如何创建自定义哈希码以确定数据是否已发生变化

假设我有一个包含int64和bool的结构类型,以及具有更多int64和bool类型字段的嵌入式类型。typeT1struct{f1int64f2int64f3boolT2T2}typeT2struct{f4int64f5int64f6bool}现在使用所有结构字段/属性,我想生成一个哈希码。这样做的目的是为了确定实例的内容是否已更改,但比较之前/之后的哈希码值。因此,如果T1实例已更改,即它自己的任何属性,则哈希值应该不同。 最佳答案 你可以使用类似的东西:func(t*T1)Hash()uint64{hb:=make([]byt

mysql - Docker mysql 数据不反射(reflect)变化

我在尝试使用docker运行mysql时遇到了一些问题。我用这个例子https://github.com/gpuenteallott/golang-mysql-docker-setup/blob/master/docker-compose.yml这就像一个魅力。所以我可以登录续集专业主机127.0.0.1:3306。用户名,密码=gotest。工作完美。然后我想更改数据库名称并详细登录,我将docker-compose.yaml文件更改为如下所示app_database:build:context:.dockerfile:docker/db/Dockerfileports:-"3306

go - 删除 slice 中的元素导致原始 slice 发生变化?

我只是展示代码,很简单,goplay:packagemainimport("fmt")funcmain(){a:=[]int{1,2,3,4,5,6}fori:=0;i在上面的代码中,我有一个slice,我想循环删除它的元素。我希望的输出是:2345613456123561234612345但是我得到了:[23456][24566][24666][24666][24666][24666]为什么?go的document说,如果slice的容量不够,它将为元素重新分配,我什至更改了原始slice中的任何内容...谁能解释一下这是怎么发生的? 最佳答案

json - Go Lang 如何用可以变化的类型表示 Json

这个问题在这里已经有了答案:DecodinggenericJSONobjectstooneofmanyformats(1个回答)关闭5年前。我需要解码一个具有可更改值的json对象。作为示例,典型的对象将定义以下属性:{"entityName":"exampleProperty","properties":[{"name":"property1","type":"string","value":"TestValue"},{"name":"property2","type":"float","value":"12.5"},{"name":"property3","type":"integ