小编Flo*_*ish的帖子

防止Go中的重复功能仅限现场结构

编辑:我已更新下面的代码示例,以更好地说明问题.

假设我有两个不需要任何功能的仅字段结构.

假设它们代表来自数据库的两种类似的数据:

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)

code-duplication go

3
推荐指数
1
解决办法
67
查看次数

Kubernetes:使用“最新”标签时,kubectl apply不会更新pod

我正在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)

docker kubernetes

3
推荐指数
3
解决办法
2955
查看次数

AWS:对于需要 API 密钥的端点,始终从 API 网关获取“消息”:“禁止”

我们已将 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 密钥:

  • ID:我们钥匙的 ID。
  • 名称:我们钥匙的名称。
  • API 密钥:我们的密钥的值。
  • 已启用:已启用

相关使用计划:

  • ID:我们计划的 ID。
  • 名称:我们计划的名称。
  • 节流:无节流。
  • 配额:无配额。

API 密钥和使用计划看起来配置正确,因此我们假设问题不在于 API 密钥本身。

来自“排查 API Gateway 403 禁止错误”文档:

如果 API 密钥无效(或者我们假设不正确),我们将收到以下消息:

“指定的 API 密钥标识符无效”

然而,我们却收到了通用的“Forbidden”错误:

“禁止”

文档仅列出了导致此错误的三种可能原因:

  1. 当在 API 中激活 AWS WAF 时,请求将被 Web 应用程序防火墙 (WAF) 过滤阻止。

  2. 使用公共 …

api-key amazon-web-services http-status-code-403 aws-lambda chalice

2
推荐指数
1
解决办法
7555
查看次数

当另一个对象告诉 Struct 更新时,Struct 字段不更新

我有以下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)

struct go

1
推荐指数
1
解决办法
402
查看次数

Java - 防止HashMap影响原始值

我从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)

java hashmap pass-by-reference

0
推荐指数
1
解决办法
123
查看次数