例如,我试图确保发布请求的正文包含正文的准确结构,如果不是,则应抛出错误
例如我有以下功能
func UpdatePassword(c *fiber.Ctx) error {
type UpdatePasswordData struct {
Password string `json:"password" form:"password"`
NewPassword string `json:"new_password" form:"new_password"`
NewPasswordConfirm string `json:"new_password_confirm" form:"new_password_confirm"`
}
data := UpdatePasswordData{}
if err := c.BodyParser(&data); err != nil {
return err
}
var user models.User
if data.NewPassword != data.NewPasswordConfirm {
c.Status(400)
return c.JSON(fiber.Map{
"message": "passwords do not match",
})
}
email, _ := middlewares.GetUserEmail(c)
newPassword := models.HashPassword(data.NewPassword)
database.DB.Model(&user).Select("Password").Where("email = ?", email).Updates(map[string]interface{}{"Password": newPassword})
return c.JSON(user)
}
Run Code Online (Sandbox Code Playgroud)
POST 请求应该寻找具有此结构的正文
{
"password": "oldpassword",
"new_password": "newpassword",
"new_password_confirm": "newpassword", …Run Code Online (Sandbox Code Playgroud) 我有以下代码:
resp, err = http.Head("http:something.com")
if err != nil {
//do something
}
if resp.StatusCode == http.StatusOK {
// do something
}
Run Code Online (Sandbox Code Playgroud)
由于我没有阅读 的正文,因此resp我假设我不需要像 那样关闭它resp.Body.Close()。我的假设正确吗还是我应该打电话resp.Body.Close()?
我正在尝试使用 GoLang 中的 PropertyList 将 int64 数组保存到数据存储区。
我知道您可以在数据存储中存储数组,尤其是基元数组。所以当我尝试通过 PropertyList 插入它时,我不确定我做错了什么。我的所有其他属性都得到正确保存(它们只是单个基元)。数组导致了这个问题。
arrays properties go google-cloud-datastore google-cloud-platform
我是一个围棋新手。我正在尝试在 MacOS BigSur 上安装 gomobile 进行评估,但无法完成该init步骤。
运行go version回报go version go1.17.6 darwin/amd64
按照说明进行操作,gomobile安装似乎可以正常工作(在明确添加gomobile到我的路径后),但运行init或version失败。
gomobile: go install golang.org/x/mobile/cmd/gobind failed: exit status 1
go install: version is required when current directory is not in a module
Try 'go install golang.org/x/mobile/cmd/gobind@latest' to install the latest version
Run Code Online (Sandbox Code Playgroud)
gomobile version unknown: cannot test gomobile binary: exit status 1, no required module provides package golang.org/x/mobile/cmd/gomobile: go.mod file not found in current directory …Run Code Online (Sandbox Code Playgroud) 我需要解析可能无效或包含一些错误的 UDP 数据包。我想.在字节到字符串转换后替换无效字符,以显示数据包的内容。
我该怎么做?这是我的代码:
func main() {
a := []byte{'a', 0xff, 0xaf, 'b', 0xbf}
s := string(a)
s = strings.Replace(s, string(0xFFFD), ".", 0)
fmt.Println("s: ", s) // I would like to display "a..b."
for _, r := range s {
fmt.Println("r: ", r)
}
rs := []rune(s)
fmt.Println("rs: ", rs)
}
Run Code Online (Sandbox Code Playgroud) 我有一个 Go 应用程序,在根目录和名为“message”的子文件夹中包含许多单元和基准测试。
我执行以下命令从根运行所有单元测试,包括消息和任何其他子文件夹中的单元测试:
go test ./...
Run Code Online (Sandbox Code Playgroud)
我想在基准测试中实现相同的目标,即运行所有测试。以下内容适用于根目录中的内容:
go test -bench .
Run Code Online (Sandbox Code Playgroud)
/messages 文件夹中的基准测试将被忽略,这是预期的。所以我从根目录运行以下命令:
go test -bench ./...
Run Code Online (Sandbox Code Playgroud)
这根本无法识别,Go 似乎执行位于根目录中的单元测试。我什至尝试在命令中指定消息文件夹,如下所示:
go test -bench ./message
Run Code Online (Sandbox Code Playgroud)
……但也失败了。目前,如果我想在消息文件夹中运行基准测试,我必须 cd 进入该文件夹并执行
go test -bench .
Run Code Online (Sandbox Code Playgroud)
像上面一样。
那么正确的做法是什么呢?我如何告诉 Go 在根文件夹和子文件夹中查找基准测试?在 -bench 标志的情况下,正则表达式 arg 如何工作?显然它与单元测试运行程序的正则表达式不同。
我正在尝试运行 WASM Go 过滤器以使用 net/http 模块进行外部 HTTP 调用。Envoy 无法加载 WASM 代码。为什么导入失败?
Envoy/Istio 版本: istio/proxyv2:1.11.4
SDK版本: v0.16.1-0.20220127085108-af57b89bc067
TinyGo版本: tinygo版本0.22.0 darwin/amd64(使用go版本go1.17.6和LLVM版本13.0.0)
2022-01-31T20:34:18.513749Z error envoy wasm Failed to load Wasm module due to a missing import: env.time.resetTimer
2022-01-31T20:34:18.513794Z error envoy wasm Failed to load Wasm module due to a missing import: env.time.stopTimer
2022-01-31T20:34:18.513807Z error envoy wasm Failed to load Wasm module due to a missing import: env.time.startTimer
2022-01-31T20:34:18.513817Z error envoy wasm Failed to load Wasm module due to a missing import: env.sync/atomic.AddInt32 …Run Code Online (Sandbox Code Playgroud) 我创建了同一结构的两个实例,当我比较指向结构实例的两个变量时,输出感到困惑。
package main
import "fmt"
type Person struct {
name string
}
func main() {
p1 := &Person{name: "guru"}
p2 := &Person{name: "guru"}
fmt.Println(p1 == p2) // false, compares by address?
p3 := Person{name: "guru"}
p4 := Person{name: "guru"}
fmt.Println(p3 == p4) // true , why? compares by content?
}
Run Code Online (Sandbox Code Playgroud)
== 运算符的工作原理与重载运算符类似吗?
考虑实验包slices。该软件包是实验性的,因此我知道签名可能会发生变化;我用它来说明问题。
考虑此包中两个函数的签名,slices.Contains并且slices.Grow:
func Contains[E comparable](s []E, v E) bool
func Grow[S ~[]E, E any](s S, n int) S
第一个参数的Contains类型( s[]E的切片)受(可比较的类型)约束。EEcomparable
相反的第一个参数Grow具有类型S(只是S),并S受~[]E(基础类型是 的切片的类型E)约束
然而,具有此类类型参数的函数内部允许执行的操作似乎没有任何实际差异。如果我们声明一些具有相同类型参数的伪函数,我们可以看到两者都编译得很好:
正如预期的那样,在这两个函数中,我们可以len/ cap、append、range、 分配make和 索引[ ]。
func fakeContains[E comparable](s []E, v E) {
fmt.Println(len(s), cap(s))
var e E
fmt.Println(append(s, e))
fmt.Println(make([]E, 4)) …Run Code Online (Sandbox Code Playgroud) 考虑版本 go1.18beta2 linux/amd64 的以下代码片段
\n type Vector[T comparable] struct {\n data_ []T\n }\n \n func (v *Vector[T]) Contains(e T) bool {\n for _, x := range v.data_ {\n if x == e {\n return true\n }\n }\n return false\n }\n \n func TestVector(t *testing.T) {\n v2 := Vector[Vector[int]]{}\n }\nRun Code Online (Sandbox Code Playgroud)\n这不会编译并给出错误:\xe2\x80\x9cVector[int] does not implement comparable\xe2\x80\x9d只是因为Vector没有定义相等运算符。但是,我找不到如何定义它们。
问题:这种创建可比较结构的方法是否不允许,为什么?或者文档还没有写好?
\ngo ×10
generics ×2
arrays ×1
benchmarking ×1
comparison ×1
envoyproxy ×1
go-fiber ×1
go-http ×1
gomobile ×1
istio ×1
pointers ×1
properties ×1
slice ×1
string ×1
struct ×1
testing ×1
tinygo ×1
unit-testing ×1
utf-8 ×1
webassembly ×1