草庐IT

go - 如何 reflect.New slice 并将其 reflect.AppendSlice 到源 slice

我想reflect.New一个[]interface{},比如[]int,并将它追加到另一个slice中。我的代码肯定有错误,但我不知道如何改正,也不知道如何深入理解reflect.New和reflect.AppendSlice的用法。packagemainimport("fmt""reflect")funcmain(){vara[]intvarvaluereflect.Value=reflect.ValueOf(&a)if!value.CanSet(){fmt.Println("gohere",value.CanSet())value=value.Elem()fmt.Println(

go - 如何将结构 slice 转换为字符串 slice ?

这里是新的go用户。我有一部分这个结构对象:typeTagRowstruct{Tag1stringTag2stringTag3string}产生的slice如下:[{abc}{def}{gh}]我想知道如何将生成的slice转换为字符串slice,例如:["a""b""c""d""e""f""g""h"]我试着像这样迭代:for_,row:=rangetagRows{for_,t:=rangerow{fmt.Println("tagis",t)}但是我得到:cannotrangeoverrow(typeTagRow)非常感谢您的帮助。 最佳答案

Golang slice 追加

我在使用Golang附加到我的slice时遇到问题。这是我的代码:funcMatchBeaconWithXY(whttp.ResponseWriter,r*http.Request)([]types.BeaconDataXY,error){context:=appengine.NewContext(r)returnBeaconData:=[]types.BeaconDataXY{}beacondata,err:=GetBeaconData(w,r)iferr!=nil{log.Errorf(context,"errorgettingbeacondata%v",err)w.WriteHe

go - 如何将结构 slice 作为指向函数的指针传递并修改它?

我有一段结构[]student,我想用函数修改它的内容。typestudentstruct{namestringageint}students:=[]student{{"Doraemon",30},{"KingKong",25},}因此,我决定将其作为指针传递。我可以知道如何将slice作为函数的引用传递吗?funcaddAge(s*[]student)error{//thiscodehaserror//everyoneadd2yearsoldfori,e:=range*s{s[i].age=s[i].age+2}//makethefirststudentmucholders[0].a

pointers - 变量中的 slice 指针在追加期间更改行为

我有点困惑为什么在尝试从Go中的slice中删除元素时会发生这种情况。作为一个简化的例子,我有以下数据结构:typePersonstruct{Namestring}typePeople[]Person我想添加一个方法来从具有people.Remove("Sam")的人员列表中删除具有特定名称的人员:func(p*People)Remove(namestring){fori,person:=range*p{ifperson.Name==name{//Doesn'twork*p=append(*p[:i],*p[i+1:]...)}}}我认为这可行,但以这种方式引用slice元素会返回编译

pointers - 附加到 slice 的元素的地址

我想创建元素,将其添加到slice并通过其地址更改它。我希望来自外部的元素的变化也会改变一片。但是添加之后,创建了一个新的slice。我使用序列化,所以使用地址slice是不合适的,而且元素的添加发生在不同的goroutines中,所以访问最后添加的元素也不合适。packagemainimport("fmt")funcmain(){vara[]intb:=1fmt.Println("oldaddr:",&b)//oldaddr:0x10414020a=append(a,b)fmt.Println("newaddr:",&a[0])//newaddr:0x10414028}playgol

go - 'Slice bounds out of range' - 分割 slice 时出错

我想运行一堆goroutine来将大量的.csv文件插入到postgres数据库中。我将.csv文件读取到一个对象,然后尝试将该对象分成10个部分。当文件数量恰好可以被10整除时,这非常有效,但如果不是,我会得到一个panic:runtimeerror:sliceboundsoutofrange。如果i+len(fis)/gophers返回一个float,这将是明智的,但事实并非如此。当我使用Goland-IDE的Debug模式时,i以及i+len(fis)/gophers的结果都是完整的整数。关于为什么会发生此错误的任何线索?我最感兴趣的是为什么会发生这种情况背后的理论,但也很好奇是

validation - 如何验证字符串 slice

我使用了包“gopkg.in/go-playground/validator.v9”并且我阅读了这个doc.我想验证一段字符串。Therearesomepoints:1-Variablemustbeslice2-Maxlenis103-Sliceshouldnotbenull4-elementslicearestring5-Maxlengthofeveryelementis12这是代码:varvalidate*validator.Validatefuncmain(){validate=validator.New()validateVariable()}funcvalidateVaria

go - 如何在 Reflect.FieldByName() 中读取 slice

我将数据传递给具有输入类型接口(interface)的函数。这段代码:main(){SampleData:=Input{Recipients:[]string{"abc","efg"},Msg:string("Testmessage"),}InsertInSendTBL(SampleData)}typeInputstruct{Recipients[]stringMsgstringsenderstring}typeOutputstruct{Recipients[]stringMsgstringreciverstring}funcInsertInSendTBL(Datainterface{

go - 在 Go 中创建一个任意 slice 类型的 stringer 方法

刚接触Golang。所以我在Go之旅中读到了关于stringer的内容,我想知道是否有任何方法可以为任何类型的slice定义一个通用的自定义Stringer()?例如:packagemainimport"fmt"typeIntSlice[]intfunc(aIntSlice)String()string{returnfmt.Sprintf("len%d\tcap%d",len(a),cap(a))}funcmain(){a:=[40]int{}sa:=IntSlice(a[:])fmt.Println(unsafe.Sizeof(a),"\t",unsafe.Sizeof(sa),""