go - 在go lang中使用一个函数的变量在另一个函数中

标签 go kubernetes go-templates

    package main

import (
   "encoding/json"
  // "flag"
    //"fmt"
    "strconv"
  "html/template"
  "time"
  // "log"
  "strings"
  "net/http"
  "k8s.io/apimachinery/pkg/apis/meta/v1"
  "k8s.io/client-go/kubernetes"
  "k8s.io/client-go/tools/clientcmd"
)


type microservice_details struct{
  Deployment_name string `json:"Deployment_name"`
  Namespace string        `json:"Namespace"`
  Image_tag string

}

type namespace_details struct {   
  Namespace []string 
}

var templates = template.Must(template.ParseGlob("./*.html"))

var label_name string
var namespace string
var microservice ="/microservice/"
var detailed_view="/detailed/"
var kube_config_path="/home/saivamsi/.kube/config"


var config, _ = clientcmd.BuildConfigFromFlags("", kube_config_path)
var clientset, _ = kubernetes.NewForConfig(config)

func main() {
  templates = template.Must(template.ParseGlob("./*.html"))
  http.Handle("/css/", http.StripPrefix("/css/", http.FileServer(http.Dir("css"))))
      http.Handle("/jpeg/", http.StripPrefix("/jpeg/", http.FileServer(http.Dir("css"))))
      http.HandleFunc("/", homepage)
      http.HandleFunc(microservice, Deployment)

      http.ListenAndServe(":8801",nil)

}

func homepage(w http.ResponseWriter, r *http.Request){
  namespace,_:=clientset.CoreV1().Namespaces().List(v1.ListOptions{})
  namespace_tmp := namespace_details{}        
           for _,s := range namespace.Items{
             namespace_tmp.Namespace = append(namespace_tmp.Namespace,s.Name)
           }
           templates.ExecuteTemplate(w,"homepage2.html",namespace_tmp)

}

func Deployment(w http.ResponseWriter, r *http.Request){

  name := r.URL.Path[len(microservice):]           
  var array2  []microservice_details 
  deploy,_ := clientset.AppsV1().Deployments(name).List(v1.ListOptions{})
        microservice_tmp := microservice_details{}
      microservice_tmp.Namespace=name
    for _, d := range deploy.Items {
     microservice_tmp.Deployment_name =d.Name

     for _, deployment_containers := range d.Spec.Template.Spec.Containers {

image_tag:= deployment_containers.Image [strings.IndexByte(deployment_containers.Image':')+ 1:]
microservice_tmp.Image_tag =图像标签
}
array2 = append(array2,microservice_tmp)
}
b,_:= json.Marshal(array2)
json.Unmarshal([] byte(b),&array2)
       templates.ExecuteTemplate(w ,"microservices2.html",array2) 

}

如何在部署中使用主页功能的命名空间变量
我需要在go模板中使用它们。

我必须在microservices.html中使用该命名空间。我尝试了很多
的东西,但没有工作。

最佳答案

Go is lexically scoped使用块。这意味着在函数ABC()中声明的任何变量都无法从其他函数Xyz()访问。

如果需要这种“共享”,则必须全局定义namespacehomepage变量,或先通过引用homepage传递它,然后再通过deployment传递它。

关于go - 在go lang中使用一个函数的变量在另一个函数中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60162959/

相关文章:

go - 如何在 Golang gRPC 中获取客户端 IP 地址和用户代理?

go - 在非默认目录中安装 Go 包

Gorm AutoMigrate() 和 CreateTable() 不工作

multithreading - 如果 goroutines 涉及用户空间线程,阻塞操作是否会导致整个线程的上下文切换?

kubernetes - 使用 Minikube kubectl 创建部署时的未知图像标志

amazon-web-services - 面临将 EFS 卷附加到 Kubernetes pod 的问题

kubernetes - 带有选择器的 headless 服务没有获得端点

go - 全局模板数据

戈兰 : Custom template "block" functions?

html - 如何在 Golang 模板中打印新行?