编辑:我已更新下面的代码示例,以更好地说明问题.
假设我有两个不需要任何功能的仅字段结构.
假设它们代表来自数据库的两种类似的数据:
type Boy struct {
Name string
FavoriteColor string
BirthDay time.Time
}
type Girl struct {
Name string
FavoriteFlower string
BirthDay time.Time
}
Run Code Online (Sandbox Code Playgroud)
我为Boy结构编写了一个函数,根据给定的日期和男孩的信息打印问候语.
假设这是一个占位符,用于更复杂的函数,它根据time.Time字段执行某些操作,并返回int将在应用程序的其他位置使用的函数:
func CheckBirthDayBoy(date time.Time, boy Boy) int {
numDays := 0
if date.Before(boy.BirthDay) {
// Greet how many days before birthday
numDays = int(boy.BirthDay.Sub(date).Hours() / 24)
fmt.Println("Hi, " + boy.Name + "! Only " + strconv.Itoa(numDays) + " days until your birthday! I hear your favorite color is …Run Code Online (Sandbox Code Playgroud) 我正在kubectl apply更新我的Kubernetes容器:
kubectl apply -f /my-app/service.yaml
kubectl apply -f /my-app/deployment.yaml
Run Code Online (Sandbox Code Playgroud)
以下是我的service.yaml:
apiVersion: v1
kind: Service
metadata:
name: my-app
labels:
run: my-app
spec:
type: NodePort
selector:
run: my-app
ports:
- protocol: TCP
port: 9000
nodePort: 30769
Run Code Online (Sandbox Code Playgroud)
以下是我的deployment.yaml:
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
selector:
matchLabels:
run: my-app
replicas: 2
template:
metadata:
labels:
run: my-app
spec:
containers:
- name: my-app
image: dockerhubaccount/my-app-img:latest
ports:
- containerPort: 9000
protocol: TCP
imagePullSecrets:
- name: my-app-img-credentials
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 25% …Run Code Online (Sandbox Code Playgroud) 我们已将 Chalice 应用程序部署到 AWS,并且在调用需要 API 密钥的端点时收到以下响应:
{
"message": "Forbidden"
}
Run Code Online (Sandbox Code Playgroud)
可以毫无问题地调用不需要 API 密钥的端点。
奇怪的是,我们过去能够毫无问题地调用需要 API 密钥的端点,因此我们还考虑是 Chalice 或 AWS 更新导致了该问题。
我们使用 Postman 将 API 密钥作为请求中的标头传递:
x-api-key:我们的 API 密钥的值。
我们也没有在 CloudWatch 中收到任何日志,大概是因为该问题实际上并未调用端点。AWS 在请求到达我们的端点之前就阻止了该请求。
我们的 API 密钥配置如下:
API 密钥:
相关使用计划:
API 密钥和使用计划看起来配置正确,因此我们假设问题不在于 API 密钥本身。
来自“排查 API Gateway 403 禁止错误”文档:
如果 API 密钥无效(或者我们假设不正确),我们将收到以下消息:
“指定的 API 密钥标识符无效”
然而,我们却收到了通用的“Forbidden”错误:
“禁止”
文档仅列出了导致此错误的三种可能原因:
当在 API 中激活 AWS WAF 时,请求将被 Web 应用程序防火墙 (WAF) 过滤阻止。
使用公共 …
api-key amazon-web-services http-status-code-403 aws-lambda chalice
我有以下struct具有可以更新其字段的功能:
type Dog struct {
name string
age int
}
func (dog *Dog) growOld() {
dog.name = "old dog"
dog.age++
}
Run Code Online (Sandbox Code Playgroud)
以上单独工作正常。但是,当struct属于另一个对象并且所述对象告诉struct更新其字段时,更改似乎发生但未应用:
package main
import (
"fmt"
)
type Owner struct {
dog Dog
}
func newOwner(dog Dog) Owner {
var owner Owner
owner.dog = dog
return owner
}
func (owner Owner) tellDogToGrowOld() {
owner.dog.growOld()
}
func main() {
var dog Dog
dog.name = "dog"
owner := newOwner(dog)
owner.tellDogToGrowOld()
fmt.Println(dog) // dog's name is …Run Code Online (Sandbox Code Playgroud) 我从HashMap获取一个对象,修改它,然后在不同的密钥下将其保存到HashMap.但是,我的更改也会影响原始对象.
我的代码如下:
Dog.java:
public class Dog {
public String id = "";
public String name = "";
}
Run Code Online (Sandbox Code Playgroud)
MyApp.java:
import java.util.*;
public class MyApp {
public static void main(String[] args) {
Dog dog1 = new Dog();
dog1.id = "d1";
dog1.name = "dog1";
System.out.println(dog1.id); // d1
System.out.println(dog1.name); // dog1
HashMap<String, Dog> map = new HashMap<>();
map.put(dog1.id, dog1);
Dog dog2 = map.get(dog1.id);
dog2.id = "d2";
dog2.name = "dog2";
System.out.println(dog2.id); // d2
System.out.println(dog2.name); // dog2
map.put(dog2.id, dog2);
System.out.println(dog1.id); // d2
System.out.println(dog1.name); // dog2 …Run Code Online (Sandbox Code Playgroud) go ×2
api-key ×1
aws-lambda ×1
chalice ×1
docker ×1
hashmap ×1
java ×1
kubernetes ×1
struct ×1