我使用了包“gopkg.in/go-playground/validator.v9”并阅读了这篇文档。我想验证一段字符串。
有几点: 1 - 变量必须是切片
2 - 最大长度为 10
3 - 切片不应为空
4 - 元素切片是字符串
5 - 每个元素的最大长度为 12
这是代码:
var validate *validator.Validate
func main() {
validate = validator.New()
validateVariable()
}
func validateVariable() {
mySlice := []string{"111","222"}
errs := validate.Var(mySlice , "required,max=10,min=1")
if errs != nil {
fmt.Println(errs)
return
}
Run Code Online (Sandbox Code Playgroud) 我有一个像这个演示这样的数据结构。
type Family struct {
first string
last string
}
type Person struct {
name string
family *Family
}
func main(){
per1 := Person{name:"niki",family:&Familys{first:"yam",last:"bari"}}
Check(per1)
}
Run Code Online (Sandbox Code Playgroud)
和代码:
var validate *validator.Validate
func Check(data interface{}) {
var v = reflect.ValueOf(data)
if v.Kind() == reflect.Struct {
fmt.Println("was a struct")
v = v.FieldByName("family").FieldByName("last")
fmt.Println(v)
}
}
Run Code Online (Sandbox Code Playgroud)
当我不为家庭使用Point时,它会返回“ bari”并且没关系。但是使用point时,会出现此错误。
反射:在ptr值上调用reflect.Value.FieldByName
我进行了很多搜索,但找不到答案可以提供帮助。
我在我的应用程序中使用http://github.com/streadway/amqp包来处理到远程 RabbitMQ 服务器的连接。一切正常,工作正常,但我有一个问题。
连接的当前名称是“ip:port”,因此当存在来自同一 IP+端口的多个连接时,它们变得难以区分。如果您可以为每个连接指定一个名称,那就太好了。
有没有办法为每个连接设置一个不同的友好名称?
我有 3 个通道一起获取数据。我的代码第一次完美运行,但是当我发送另一个数据时,出现错误:在关闭的通道上发送。在 func FillNotCheckedDeliveryCh 该行中,我关闭了通道。如果我不关闭它,应用程序将停止并且不会继续。
func main() {
receiveBulkIdsCh := make(chan int64, 100)
NotCheckedDeliveryCh := make(chan CommonType.BasicRequestParameters, 100)
ResultCh := make(chan CommonType.MessageStateResult, 100)
var wg sync.WaitGroup
wg.Add(4)
/* Every BulkIds that receive from queue , save in receiveBulkIdsChan channel*/
go func() {
defer wg.Done()
PopQueue(receiveBulkIdsCh)
}()
go func() {
defer wg.Done()
for BulkId := range receiveBulkIdsCh {
FillNotCheckedDeliveryCh(data, NotCheckedDeliveryCh)
}
}()
go func() {
defer wg.Done()
for item := range NotCheckedDeliveryCh {
for msgStatus := range DoFuncGetMessageState(item) {
ResultCh …Run Code Online (Sandbox Code Playgroud) 这是我的结构:
type TableFields struct {
Name string
Family string
Age int
}
sample := TableFields{
Name: "bill",
Family: "yami",
Age: 25,
}
Run Code Online (Sandbox Code Playgroud)
这是我用来描述问题的非常简单的示例。
我想sample使用map接收到的键和值更改结构中的值。每次我收到的map键和值都会不同。如何使用map来编辑sample结构?
例如:
updateTheseFieldsWithTheseVals := make(map[string]string)
updateTheseFieldsWithTheseVals["family"] = "yamie"
// this is my way
for key,val := range updateTheseFieldsWithTheseVals {
// sample.Family=yamie works, but is not the answer I am looking for
// sample.key = val *This solution is not possible*
oldValue := reflect.Indirect(reflect.ValueOf(get)).FieldByName(key).String()
fmt.Println(oldValue) // result is …Run Code Online (Sandbox Code Playgroud)