Beego之Beego参数配置

1、beego参数配置

配置模块是基础模块之一,对不同类型的配置文件提供了一种抽象。

beego目前支持INIXMLJSONYAML格式的配置文件解析,但是默认采用了INI格式解析,用户可以通过简

单的配置就可以获得很大的灵活性。同时也支持以 etcd 作为远程配置中心。

1.1 默认配置解析

BConfig 是默认的 Web 配置实例。默认情况下,Beego 会解析当前应用下的 conf/app.conf 文件,用于初始

web.BConfig

通过这个文件你可以初始化很多 beego 的默认参数:

appname = beepkg
httpaddr = "127.0.0.1"
httpport = 9090
runmode ="dev"
autorender = false
recoverpanic = false
viewspath = "myview"

这里需要注意的是,配置项并没有使用驼峰命名,而是保持了全小写。但是不同的配置格式,也可以支持驼峰命名

和下划线命名。例如 JSON 的配置格式,则只跟你结构体里面 json 标签的取值有关。

它们都维护在结构体 beego/server/web#Config

上面这些参数会替换 beego 默认的一些参数,beego 的参数主要有哪些,请参考:

https://godoc.org/github.com/beego/beego#pkg-constants

https://pkg.go.dev/github.com/beego/beego?utm_source=godoc#pkg-types

BConfig就是beego里面的默认的配置,也是结构体 beego/server/web#Config 的实例。

你也可以直接通过web.BConfig.AppName="beepkg"这样来修改,和上面的配置效果一样,只是一个在代码里面

写死了,而配置文件就会显得更加灵活。

你也可以在配置文件中配置应用需要用的一些配置信息,例如下面所示的数据库信息:

mysqluser = "root"
mysqlpass = "rootpass"
mysqlurls = "127.0.0.1"
mysqldb   = "beego"

那么你就可以通过如下的方式获取设置的配置信息:

beego.AppConfig.String("mysqluser")
beego.AppConfig.String("mysqlpass")
beego.AppConfig.String("mysqlurls")
beego.AppConfig.String("mysqldb")

各种Config拥有的方法都是一样的,具体可以参考Config API

https://github.com/beego/beego/blob/develop/core/config/config.go

Config的方法如下:

  • Set(key, val string) error
  • String(key string) (string, error)
  • Strings(key string) ([]string, error)
  • Int(key string) (int, error)
  • Int64(key string) (int64, error)
  • Bool(key string) (bool, error)
  • Float(key string) (float64, error)
  • DefaultString(key string, defaultVal string) string
  • DefaultStrings(key string, defaultVal []string) []string
  • DefaultInt(key string, defaultVal int) int
  • DefaultInt64(key string, defaultVal int64) int64
  • DefaultBool(key string, defaultVal bool) bool
  • DefaultFloat(key string, defaultVal float64) float64
  • DIY(key string) (interface{}, error)
  • GetSection(section string) (map[string]string, error)
  • Unmarshaler(prefix string, obj interface{}, opt …DecodeOption) error
  • Sub(key string) (Configer, error)
  • OnChange(key string, fn func(value string))
  • SaveConfigFile(filename string) error

Config的使用方法:

package mainimport ("github.com/beego/beego/v2/core/config""log"
)func main() {cnf, err := config.NewConfig("ini", "../conf/app.conf")if err != nil {log.Println(err)} else {port, _ := cnf.String("httpport")// 2023/02/19 17:46:25 9090log.Println(port)}
}
package mainimport ("github.com/beego/beego/v2/server/web""log"
)const ConfigFile = "./conf/app.conf"func main() {err := web.LoadAppConfig("ini", ConfigFile)if err != nil {log.Println("An error occurred:", err)}val, _ := web.AppConfig.Int("httpport")// 2023/02/21 09:34:17 load config name is 9090log.Println("load config name is", val)
}

可以重复调用多次LoadAppConfig,如果后面的文件和前面的 key 冲突,那么以最新加载的为最新值。

在使用ini类型的配置文件中, key 支持section::key模式。

你可以用Default*方法返回默认值。

Web 模块封装了配置模块,可以参考Web 配置。

这里有一些使用的注意事项:

1、所有的Default*方法,在key不存在,或者查找的过程中,出现error,都会返回默认值;

2、DIY直接返回对应的值,而没有做任何类型的转换。当你使用这个方法的时候,你应该自己确认值的类型。只

有在极少数的情况下你才应该考虑使用这个方法;

3、GetSection会返回section所对应的部分配置。section如何被解释,取决于具体的实现;

4、Unmarshaler会尝试用当且配置的值来初始化obj。需要注意的是,prefix的概念类似于section

5、Sub类似与GetSection,都是尝试返回配置的一部分。所不同的是,GetSection将结果组织成map,而

Sub将结果组织成Config实例;

6、OnChange主要用于监听配置的变化。对于大部分依赖于文件系统的实现来说,都不支持。具体而言,我们设

计这个主要是为了考虑支持远程配置;

7、SaveConfigFile尝试将配置导出成为一个文件;

8、某些实现支持分段式的key。比如说a.b.c这种,但是,并不是所有的实现都支持,也不是所有的实现都采

.作为分隔符。这是一个历史遗留问题,为了保留兼容性,我们无法在这方面保持一致。

也可以手动初始化全局实例,以指定不同的配置类型,例如说启用etcd

config.InitGlobalInstance("etcd", "etcd address")

1.2 不同级别的配置

在配置文件里面支持 section,可以有不同的runmode的配置,默认优先读取runmode下的配置信息,例如下面

的配置文件:

appname = beepkg
httpaddr = "127.0.0.1"
httpport = 9090
runmode ="dev"
autorender = false
recoverpanic = false
viewspath = "myview"
[dev]
httpport = 8080
[prod]
httpport = 8088
[test]
httpport = 8888

上面的配置文件就是在不同的 runmode 下解析不同的配置,例如在 dev 模式下,httpport 是 8080,在 prod 模

式下是 8088,在 test 模式下是 8888。其他配置文件同理。解析的时候优先解析 runmode 下的配置,然后解析

默认的配置。

读取不同模式下配置参数的方法是模式::配置参数名,比如:beego.AppConfig.String("dev::mysqluser")

package mainimport ("github.com/beego/beego/v2/core/config""log"
)func main() {cnf, err := config.NewConfig("ini", "../conf/app1.conf")if err != nil {log.Println(err)} else {// 2023/02/19 18:33:52 8088 <nil>log.Println(cnf.String("prod::httpport"))}
}

对于自定义的参数,需使用GetConfig(typ, key string, defaultVal interface{})来获取指定 runmode

下的配置(需1.4.0 以上版本),typ 为参数类型,key 为参数名,defaultVal 为默认值。

package mainimport (beego "github.com/beego/beego/v2/server/web""log"
)func main() {// beego.GetConfig可以获取系统配置和自定义配置// beego.AppConfig.String可以获取系统配置和自定义配置// 但是beego.AppConfig.String在项目启动的时候才可以读取自定义配置// 2023/02/19 22:14:36 myproject <nil>log.Println(beego.GetConfig("String", "appname", "myapp"))// 2023/02/19 22:14:36 9090 <nil>log.Println(beego.GetConfig("Int", "httpport", "8080"))// 2023/02/19 22:15:45 root:root@tcp(127.0.0.1:3306)/test <nil>log.Println(beego.GetConfig("String", "mysqlurl", ""))// 2023/02/19 22:24:13  <nil>log.Println(beego.AppConfig.String("mysqluser"))// 2023/02/19 22:24:13 9090 <nil>log.Println(beego.AppConfig.String("httpport"))beego.AppConfig.Set("mode", "dev")// 2023/02/19 22:31:09 dev <nil>log.Println(beego.AppConfig.String("mode"))// 2023/02/19 22:31:09 dev <nil>log.Println(beego.GetConfig("String", "mode", "test"))
}

1.3 多个配置文件

INI 格式配置支持 include 方式,引用多个配置文件,例如下面的两个配置文件效果同上:

app.conf:

appname = beepkg
httpaddr = "127.0.0.1"
httpport = 9090
include "app2.conf"

app2.conf:

runmode ="dev"
autorender = false
recoverpanic = false
viewspath = "myview"
[dev]
httpport = 8080
[prod]
httpport = 8088
[test]
httpport = 8888

1.4 支持环境变量配置

配置文件解析支持从环境变量中获取配置项,配置项格式:${环境变量}。例如下面的配置中优先使用环境变量中

配置的 runmode 和 httpport,如果有配置环境变量 ProRunMode 则优先使用该环境变量值。如果不存在或者为

空,则使用 dev 作为 runmode。app.conf:

runmode  = "${ProRunMode||dev}"
httpport = "${ProPort||9090}"

1.5 系统默认参数

beego 中带有很多可配置的参数,我们来一一认识一下它们,这样有利于我们在接下来的 beego 开发中可以充分

的发挥他们的作用(你可以通过在 conf/app.conf 中设置对应的值,不区分大小写)。

详细的字段含义可以直接参考源码Config 定义:

https://github.com/beego/beego/blob/develop/server/web/config.go

1.5.1 基础配置
  • BConfig 保存了所有 beego 里面的系统默认参数,你可以通过 web.BConfig 来访问和修改底下的所有配置

    信息。

    配置文件路径,默认是应用程序对应的目录下的 conf/app.conf,用户可以在程序代码中加载自己的配

    置文件 beego.LoadAppConfig("ini", "conf/app2.conf") 也可以加载多个文件,只要你调用多次就

    可以了,如果后面的文件和前面的 key 冲突,那么以最新加载的为最新值。

1.5.2 App 配置
  • AppName

    应用名称,默认是 beego。通过 bee new 创建的是创建的项目名。

    web.BConfig.AppName = "beego"

  • RunMode

    应用的运行模式,可选值为 proddev 或者 test。 默认是 dev,为开发模式,在开发模式下出错会提示

    友好的出错页面,如前面错误描述中所述。

    web.BConfig.RunMode = "dev"

  • RouterCaseSensitive

    是否路由忽略大小写匹配,默认是 true,区分大小写。

    web.BConfig.RouterCaseSensitive = true

  • ServerName

    beego 服务器默认在请求的时候输出 server 为 beego。

    web.BConfig.ServerName = "beego"

  • RecoverPanic

    是否异常恢复,默认值为 true,即当应用出现异常的情况,通过 recover 恢复回来,而不会导致应用异常退

    出。

    web.BConfig.RecoverPanic = true

  • CopyRequestBody

    是否允许在 HTTP 请求时,返回原始请求体数据字节,默认为 false (GET or HEAD or 上传文件请求除外)。

    web.BConfig.CopyRequestBody = false

  • EnableGzip

    是否开启 gzip 支持,默认为 false 不支持 gzip,一旦开启了 gzip,那么在模板输出的内容会进行 gzip 或者

    zlib 压缩,根据用户的 Accept-Encoding 来判断。

    web.BConfig.EnableGzip = false

    Gzip允许用户自定义压缩级别、压缩长度阈值和针对请求类型压缩:

    1、压缩级别,gzipCompressLevel = 9,取值为 1~9,如果不设置为 1(最快压缩)

    2、压缩长度阈值,gzipMinLength = 256,当原始内容长度大于此阈值时才开启压缩,默认为 20B(ngnix

    默认长度)

    3、请求类型,includedMethods = get;post,针对哪些请求类型进行压缩,默认只针对 GET 请求压缩

  • MaxMemory

    文件上传默认内存缓存大小,默认值是 1 << 26(64M)。

    web.BConfig.MaxMemory = 1 << 26

  • EnableErrorsShow

    是否显示系统错误信息,默认为 true。

    web.BConfig.EnableErrorsShow = true

  • EnableErrorsRender

    是否将错误信息进行渲染,默认值为 true,即出错会提示友好的出错页面,对于 API 类型的应用可能需要将

    该选项设置为 false 以阻止在 dev 模式下不必要的模板渲染信息返回。

1.5.3 Web配置
  • AutoRender

    是否模板自动渲染,默认值为 true,对于 API 类型的应用,应用需要把该选项设置为 false,不需要渲染模

    板。

    web.BConfig.WebConfig.AutoRender = true

  • EnableDocs

    是否开启文档内置功能,默认是 false

    web.BConfig.WebConfig.EnableDocs = true

  • FlashName

    Flash 数据设置时 Cookie 的名称,默认是 BEEGO_FLASH

    web.BConfig.WebConfig.FlashName = "BEEGO_FLASH"

  • FlashSeperator

    Flash 数据的分隔符,默认是 BEEGOFLASH

    web.BConfig.WebConfig.FlashSeparator = "BEEGOFLASH"

  • DirectoryIndex

    是否开启静态目录的列表显示,默认不显示目录,返回 403 错误。

    web.BConfig.WebConfig.DirectoryIndex = false

  • StaticDir

    静态文件目录设置,默认是static

    可配置单个或多个目录:

    1、单个目录, StaticDir = download,相当于 beego.SetStaticPath("/download","download")

    2、多个目录, StaticDir = download:down download2:down2,相当于

    beego.SetStaticPath("/download","down")beego.SetStaticPath("/download2","down2")

    web.BConfig.WebConfig.StaticDir

  • StaticExtensionsToGzip

    允许哪些后缀名的静态文件进行 gzip 压缩,默认支持 .css 和 .js

    web.BConfig.WebConfig.StaticExtensionsToGzip = []string{".css", ".js"}

    等价 config 文件中

    StaticExtensionsToGzip = .css, .js
    
  • TemplateLeft

    模板左标签,默认值是{{

    web.BConfig.WebConfig.TemplateLeft="{{"

  • TemplateRight

    模板右标签,默认值是}}

    web.BConfig.WebConfig.TemplateRight="}}"

  • ViewsPath

    模板路径,默认值是 views。

    web.BConfig.WebConfig.ViewsPath="views"

  • EnableXSRF

    是否开启 XSRF,默认为 false,不开启。

    web.BConfig.WebConfig.EnableXSRF = false

  • XSRFKEY

    XSRF 的 key 信息,默认值是 beegoxsrf。 EnableXSRF=true 才有效

    web.BConfig.WebConfig.XSRFKEY = "beegoxsrf"

  • XSRFExpire

    XSRF 过期时间,默认值是 0,不过期。

    web.BConfig.WebConfig.XSRFExpire = 0

  • CommentRouterPath

    CommentRouterPath 注解路由所在位置。默认值是controllers。 Beego 会在启动的时候扫描下面的文件

    生成了路由。 web.BConfig.WebConfig.CommentRouterPath = "controllers"

1.5.4 监听配置
  • Graceful

    是否开启热升级,默认是 false,关闭热升级。

    web.BConfig.Listen.Graceful=false

  • ServerTimeOut

    设置 HTTP 的超时时间,默认是 0,不超时。

    web.BConfig.Listen.ServerTimeOut=0

  • ListenTCP4

    监听本地网络地址类型,默认是TCP6,可以通过设置为true设置为TCP4。

    web.BConfig.Listen.ListenTCP4 = true

  • EnableHTTP

    是否启用 HTTP 监听,默认是 true。

    web.BConfig.Listen.EnableHTTP = true

  • HTTPAddr

    应用监听地址,默认为空,监听所有的网卡 IP。

    web.BConfig.Listen.HTTPAddr = ""

  • HTTPPort

    应用监听端口,默认为 8080。

    web.BConfig.Listen.HTTPPort = 8080

  • EnableHTTPS

    是否启用 HTTPS,默认是 false 关闭。当需要启用时,先设置 EnableHTTPS = true,并设置 HTTPSCertFile

    HTTPSKeyFile

    web.BConfig.Listen.EnableHTTPS = false

  • HTTPSAddr

    应用监听地址,默认为空,监听所有的网卡 IP。

    web.BConfig.Listen.HTTPSAddr = ""

  • HTTPSPort

    应用监听端口,默认为 10443

    web.BConfig.Listen.HTTPSPort = 10443

  • HTTPSCertFile

    开启 HTTPS 后,ssl 证书路径,默认为空。

    web.BConfig.Listen.HTTPSCertFile = "conf/ssl.crt"

  • HTTPSKeyFile

    开启 HTTPS 之后,SSL 证书 keyfile 的路径。

    web.BConfig.Listen.HTTPSKeyFile = "conf/ssl.key"

  • EnableAdmin

    是否开启进程内监控模块,默认 false 关闭。

    web.BConfig.Listen.EnableAdmin = false

  • AdminAddr

    监控程序监听的地址,默认值是 localhost 。

    web.BConfig.Listen.AdminAddr = "localhost"

  • AdminPort

    监控程序监听的地址,默认值是 8088 。

    web.BConfig.Listen.AdminPort = 8088

  • EnableFcgi

    是否启用 fastcgi, 默认是 false。

    web.BConfig.Listen.EnableFcgi = false

  • EnableStdIo

    通过fastcgi 标准I/O,启用 fastcgi 后才生效,默认 false。

    web.BConfig.Listen.EnableStdIo = false

1.5.5 Session配置
  • SessionOn

    session 是否开启,默认是 false。

    web.BConfig.WebConfig.Session.SessionOn = false

  • SessionProvider

    session 的引擎,默认是 memory,详细参见 session 模块

    web.BConfig.WebConfig.Session.SessionProvider = ""

  • SessionName

    存在客户端的 cookie 名称,默认值是 beegosessionID。

    web.BConfig.WebConfig.Session.SessionName = "beegosessionID"

  • SessionGCMaxLifetime

    session 过期时间,默认值是 3600 秒。

    web.BConfig.WebConfig.Session.SessionGCMaxLifetime = 3600

  • SessionProviderConfig

    配置信息,根据不同的引擎设置不同的配置信息,详细的配置请看下面的引擎设置,详细参见session模块。

  • SessionCookieLifeTime

    session 默认存在客户端的 cookie 的时间,默认值是 3600 秒。

    web.BConfig.WebConfig.Session.SessionCookieLifeTime = 3600

  • SessionAutoSetCookie

    是否开启SetCookie,默认值 true 开启。

    web.BConfig.WebConfig.Session.SessionAutoSetCookie = true

  • SessionDomain

    session cookie 存储域名,默认空。

    web.BConfig.WebConfig.Session.SessionDomain = ""

1.5.6 Log配置
  • AccessLogs

    是否输出日志到 Log,默认在 prod 模式下不会输出日志,默认为 false 不输出日志。此参数不支持配置文件

    配置。

    web.BConfig.Log.AccessLogs = false

  • FileLineNum

    是否在日志里面显示文件名和输出日志行号,默认 true。此参数不支持配置文件配置。

    web.BConfig.Log.FileLineNum = true

  • Outputs

    日志输出配置,参考 logs 模块,console file 等配置,此参数不支持配置文件配置。

    web.BConfig.Log.Outputs = map[string]string{"console": ""}

    or

    web.BConfig.Log.Outputs["console"] = ""

1.5 支持的格式

注意,所以的相对文件路径,都是从你的工作目录开始计算! 其次,除了默认的 INI 格式,其余格式都需要采用

匿名引入的方式引入对应的包。

1.5.1 INI格式

INI 是配置模块的默认格式,同时它支持使用include的方式,加载多个配置文件。

app.ini:

appname = beepkg
httpaddr = "127.0.0.1"
httpport = 9090
include "app2.ini"

app2.ini:

runmode ="dev"
autorender = false
recoverpanic = false
viewspath = "myview"[dev]
httpport = 8080
[prod]
httpport = 8088
[test]
httpport = 8888
package mainimport ("github.com/beego/beego/v2/core/config""log"
)func main() {cfg, err := config.NewConfig("ini", "../conf/app.ini")if err != nil {log.Fatalln(err)}val, _ := cfg.String("viewspath")// 2023/02/19 20:19:40 auto load config viewspath is myviewlog.Println("auto load config viewspath is", val)
}
1.5.2 JSON

JSON只需要指定格式,并且不要忘了使用匿名引入的方式引入 JSON 的实现:

{"app": {"name": "myapp","port": "8080"}
}
package mainimport ("github.com/beego/beego/v2/core/config"// 千万不要忘了_ "github.com/beego/beego/v2/core/config/json""github.com/beego/beego/v2/core/logs"
)var (ConfigFile = "../conf/app.json"
)func main() {err := config.InitGlobalInstance("json", ConfigFile)if err != nil {logs.Critical("An error occurred:", err)panic(err)}val, _ := config.String("app::name")// 2023/02/19 20:24:15.969 [I]  load config appname is myprojectlogs.Info("load config appname is", val)
}
1.5.3 YAML

别忘了匿名引入YAML 的实现:

app:name: myappport: 8080
package mainimport ("github.com/beego/beego/v2/core/config"// never forget this_ "github.com/beego/beego/v2/core/config/yaml""github.com/beego/beego/v2/core/logs"
)var (ConfigFile = "../conf/app.yaml"
)func main() {err := config.InitGlobalInstance("yaml", ConfigFile)if err != nil {logs.Critical("An error occurred:", err)panic(err)}val, _ := config.String("app.name")// 2023/02/19 20:31:27.837 [I]  load config name is myapplogs.Info("load config name is", val)
}
1.5.4 XML

别忘了匿名引入 XML 的实现,要注意,所有的配置项都要放在config这个顶级节点之内:

# 从源码上看xml目前不支持嵌套
<?xml version="1.0" encoding="UTF-8" ?>
<config><app><name>myapp</name><port>8080</port></app>
</config>
<?xml version="1.0" encoding="UTF-8" ?>
<config><name>myapp</name><port>8080</port>
</config>
package mainimport ("github.com/beego/beego/v2/core/config"// never forget this_ "github.com/beego/beego/v2/core/config/xml""github.com/beego/beego/v2/core/logs"
)var (ConfigFile = "../conf/app.xml"
)func main() {err := config.InitGlobalInstance("xml", ConfigFile)if err != nil {logs.Critical("An error occurred:", err)panic(err)}val, _ := config.String("name")// 2023/02/19 20:49:16.509 [I]  load config name is myapplogs.Info("load config name is", val)
}
1.5.5 TOML

别忘了匿名引入 TOML 的实现:

[app]
name = "myapp"
port = 8080
package main
import ("github.com/beego/beego/v2/core/config"// never forget this_ "github.com/beego/beego/v2/core/config/toml""github.com/beego/beego/v2/core/logs"
)var (ConfigFile = "../conf/app.toml"
)func main() {err := config.InitGlobalInstance("toml", ConfigFile)if err != nil {logs.Critical("An error occurred:", err)panic(err)}val, _ := config.String("app.name")logs.Info("load config name is", val)
}
1.5.6 Etcd

别忘了匿名引入 ETCD 的实现:

package mainimport ("github.com/beego/beego/v2/core/config"_ "github.com/beego/beego/v2/core/config/etcd""log"
)func main() {err := config.InitGlobalInstance("etcd", `{"endpoints": ["127.0.0.1:2379"],"username": "root"}`)if err != nil {log.Println("An error occurred:", err)}val, _ := config.String("username")log.Println("load config username is", val)
}

InitGlobalInstance(name string, cfg string)cfg 是一个 JSON 配置,它对应于:

type Config struct {// Endpoints is a list of URLs.Endpoints []string `json:"endpoints"`// AutoSyncInterval is the interval to update endpoints with its latest members.// 0 disables auto-sync. By default auto-sync is disabled.AutoSyncInterval time.Duration `json:"auto-sync-interval"`// DialTimeout is the timeout for failing to establish a connection.DialTimeout time.Duration `json:"dial-timeout"`// DialKeepAliveTime is the time after which client pings the server to see if// transport is alive.DialKeepAliveTime time.Duration `json:"dial-keep-alive-time"`// DialKeepAliveTimeout is the time that the client waits for a response for the// keep-alive probe. If the response is not received in this time, the connection is closed.DialKeepAliveTimeout time.Duration `json:"dial-keep-alive-timeout"`// MaxCallSendMsgSize is the client-side request send limit in bytes.// If 0, it defaults to 2.0 MiB (2 * 1024 * 1024).// Make sure that "MaxCallSendMsgSize" < server-side default send/recv limit.// ("--max-request-bytes" flag to etcd or "embed.Config.MaxRequestBytes").MaxCallSendMsgSize int// MaxCallRecvMsgSize is the client-side response receive limit.// If 0, it defaults to "math.MaxInt32", because range response can// easily exceed request send limits.// Make sure that "MaxCallRecvMsgSize" >= server-side default send/recv limit.// ("--max-request-bytes" flag to etcd or "embed.Config.MaxRequestBytes").MaxCallRecvMsgSize int// TLS holds the client secure credentials, if any.TLS *tls.Config// Username is a user name for authentication.Username string `json:"username"`// Password is a password for authentication.Password string `json:"password"`// RejectOldCluster when set will refuse to create a client against an outdated cluster.RejectOldCluster bool `json:"reject-old-cluster"`// DialOptions is a list of dial options for the grpc client (e.g., for interceptors).// For example, pass "grpc.WithBlock()" to block until the underlying connection is up.// Without this, Dial returns immediately and connecting the server happens in background.DialOptions []grpc.DialOption// Context is the default client context; it can be used to cancel grpc dial out and// other operations that do not have an explicit context.Context context.Context// Logger sets client-side logger.// If nil, fallback to building LogConfig.Logger *zap.Logger// LogConfig configures client-side logger.// If nil, use the default logger.// TODO: configure gRPC loggerLogConfig *zap.Config// PermitWithoutStream when set will allow client to send keepalive pings to server without any active streams(RPCs).PermitWithoutStream bool `json:"permit-without-stream"`// TODO: support custom balancer picker
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/640341.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

qml中的信号槽的几种方式

1、信号处理器 当对应的信号发射时&#xff0c;信号处理器(就是QtWidgets中的槽函数)会被qml引擎自动调用。 在qml的对象定义中添加一个信号&#xff0c;则自动在对象定义中添加一个相应的对象处理器&#xff0c;只不过没有具体的代码实现。 如下所示&#xff0c;在Rectangle类…

C++之void*指针

先看一个例子 #ifndef _Aspect_Handle_HeaderFile#define _Aspect_Handle_HeaderFile​#ifdef _WIN32 typedef void* HANDLE; typedef HANDLE Aspect_Handle;#else typedef unsigned long Aspect_Handle;#endif /* _WIN32 */​#endif /* _Aspect_Handle_Header…

基于SpringBoot+vue的在线视频教育平台的设计与实现,附源码,数据库

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝30W、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

【文件处理】spring boot 文件处理

接收文件 PostMappingpublic result<String> add(MultipartFile file) throws IOException {// 得到目标文件夹File directory new File("file");//如果文件夹不存在就创建if(!directory.exists()){directory.mkdirs();}//文件名称String fileName file.getO…

性能进阶:使用JMeter进行websocket测试【建议收藏】

本次测试案例主要是分享如何使用JMeter进行websocket协议下的聊天接口性能测试。 包含websocket插件的下载安装、线程组及sampler的设置、csv参数化和组建分布式测试的方法、如何通过调整参数来获得发压机的最大并发数以及对测试过程的总结。 整篇文章只侧重介绍进行websocke…

Linux中的软件包管理器yum

目录 1.什么是软件包 2.关于 rzsz 3.查看软件包 4.如何安装软件 5.如何卸载软件 1.什么是软件包 ● 在Linux下安装软件, 一个通常的办法是下载到程序的源代码, 并进行编译, 得到可执行程序. ● 但是这样太麻烦了, 于是有些人把一些常用的软件提前编译好, 做成软件包(可以理…

阿里云优惠券领取入口、使用教程,2024优惠券更新

阿里云优惠代金券领取入口&#xff0c;阿里云服务器优惠代金券、域名代金券&#xff0c;在领券中心可以领取当前最新可用的满减代金券&#xff0c;阿里云百科aliyunbaike.com分享阿里云服务器代金券、领券中心、域名代金券领取、代金券查询及使用方法&#xff1a; 阿里云优惠券…

C语言_存储结构实现_线性表

#include <stdio.h> #include <stdlib.h>#define MAX_SIZE 100 // 定义线性表的最大长度typedef struct {int data[MAX_SIZE]; // 用数组存储数据元素int length; // 线性表的当前长度 } SqList;// 函数声明 void initList(SqList *list); // 初始化线性表 int ins…

Linux下修改系统的运行级别

借助命令ll /etc/system/system/default.target可以查看当前的系统运行的级别&#xff1a;以下图为例运行级别就是3 但如果系统运行的级别默认为图形时&#xff0c;要将图形级别改为文本级别&#xff0c;可以按照下边两种方法运行&#xff1a; 1、重新设置链接文件 这个方法需…

wy的leetcode刷题记录_Day74

wy的leetcode刷题记录_Day74 声明 本文章的所有题目信息都来源于leetcode 如有侵权请联系我删掉! 时间&#xff1a;2024-1-22 前言 目录 wy的leetcode刷题记录_Day74声明前言670. 最大交换题目介绍思路代码收获 670. 最大交换 今天的每日一题是&#xff1a;670. 最大交换 …

03-常用编程概念

上一篇&#xff1a;02-编程猜谜游戏 本章介绍几乎所有编程语言中都会出现的概念&#xff0c;以及它们在 Rust 中的工作原理。许多编程语言的核心都有许多共同点。本章介绍的概念都不是 Rust 独有的&#xff0c;但我们会在 Rust 的上下文中讨论这些概念&#xff0c;并解释使用这…

Pymol-电子密度图展示方法-PDB数据库已发表结构和自己晶体解析得到的结构密度图

简单来说&#xff0c;想要用PyMol展示电子密度图可以归为以下两种&#xff1a; 一是展示PDB数据库中已发表数据的结构和Map的方式 以6sps.pdb为例&#xff0c;在pymol中导入该数据密度图时&#xff0c;可以无需下载对应的密度文件&#xff0c;直接用fetch即可&#xff1a; Py…

二维码地址门牌管理系统:预约安全、智能生活

文章目录 前言一、访客预约功能二、安全性保障三、智慧小区生活 前言 二维码地址门牌管理系统的出现不仅提升了小区的安全性&#xff0c;还为访客提供了更便捷的预约服务&#xff0c;让亲朋好友轻松进入小区。 一、访客预约功能 该系统提供了访客预约功能&#xff0c;业主可为…

关于Unity插件TriLib使用的一点儿心得

最近做一个项目的时候&#xff0c;由于要求动态加载fbx或者glb等格式文件&#xff0c;而我们自己开发加载插件难度又有点大&#xff0c;所以最后使用了TriLib这个插件&#xff0c;现在说一点使用心得。 由于文件加载之后要对加载的内容进行复制&#xff0c;比如加载一个柱子&am…

【Docker】部署和运行青龙面板:一个支持python3、javaScript、shell、typescript 的定时任务管理面板

引言 青龙面板是一个支持python3、javaScript、shell、typescript 的定时任务管理面板。 步骤 拉取镜像 从 Docker Hub 上拉取最新的 “qinglong” 镜像。 docker pull whyour/qinglong:latest启动容器 使用刚刚拉取的镜像来启动一个新的 Docker 容器。 docker run -dit \-v…

pikachu验证码绕过第三关攻略

打开pikachu靶场第三关&#xff1a; 挂上代理&#xff0c;随便输入账户密码&#xff1a; 返回bp。进行放包发现显示token错误。 每一次登录的返回包会带有token相关数据用于下一次的登录认证&#xff1a; 进行替换token值&#xff1a; 替换完成开始进行检点的爆破&#xff1a;…

准备的一些爬虫面试题

最近准备试试外面的市场&#xff0c;找找看外面的岗位&#xff0c;给自己找点后路&#xff0c;防止到时候被裁被动。 我将面试题分为基于scrapy框架与普通爬虫【requests/aiohttp等开发的爬虫】 普通爬虫面试题 列举反爬虫机制 (1) UA 检测&#xff0c;请求头合法性 (2) Rob…

Python使用HTTP代理进行API请求的优化

在Python中&#xff0c;HTTP代理是一种常用的技术&#xff0c;用于控制和修改HTTP请求和响应。通过使用HTTP代理&#xff0c;我们可以更好地控制网络请求的行为&#xff0c;提高安全性、隐私性和效率。下面我们将详细介绍如何在Python中使用HTTP代理进行API请求的优化。 一、减…

10分钟快速上手LLM大模型Python前端开发(三)之显示模块(二)

【计划昵称全网统一&#xff0c;代码随想随记&#xff0c;知乎无法立即修改&#xff0c;&#xff0c;】 微信公众号&#xff1a;leetcode_algos_life&#xff0c;代码随想随记 小红书&#xff1a;412408155 CSDN&#xff1a;https://blog.csdn.net/woai8339?typeblog &#xf…

反序列化字符串逃逸(上篇)

首先&#xff0c;必须先明白&#xff0c;这个点并不难&#xff0c;我给大家梳理一遍就会明白。 反序列化字符串逃逸就是序列化过程中逃逸出来字符&#xff0c;是不是很简单&#xff0c;哈哈哈&#xff01; 好了&#xff0c;不闹了&#xff0c;其实&#xff1a; 这里你们只要懂…