我正在尝试使用i18l设置网站的前端翻译.这是我在前端/配置上放置的i18l.php文件
<?php
return [
'sourcePath' => 'frontend',
'languages' => ['en-US', 'pt-BR'] , //Add languages to the array for the language files to be generated.
'translator' => 'Yii::t',
'sort' => false,
'removeUnused' => false,
'only' => ['*.php'],
'except' => [
'.svn',
'.git',
'.gitignore',
'.gitkeep',
'.hgignore',
'.hgkeep',
'/messages',
'/vendor',
],
'format' => 'php',
'messagePath' => 'frontend' . DIRECTORY_SEPARATOR . 'translations',
'overwrite' => true,
];
Run Code Online (Sandbox Code Playgroud)
在这里我的main.php也在前端
(...)
'language' => 'en-US',
'components' => [
'i18n' => [
'translations' => [
'app*' => [
'class' …Run Code Online (Sandbox Code Playgroud) 我有以下代码,它执行外部命令并输出到控制台的两个字段等待用户输入。一个用于用户名,另一个用于密码,然后我手动添加了它们。
谁能给我一个关于如何写入标准输入以便从程序内部输入这些输入的提示?
对我来说棘手的部分是有两个不同的字段在等待输入,我很难弄清楚如何一个接一个地填写。
login := exec.Command(cmd, "login")
login.Stdout = os.Stdout
login.Stdin = os.Stdin
login.Stderr = os.Stderr
err := login.Run()
if err != nil {
fmt.Fprintln(os.Stderr, err)
}
Run Code Online (Sandbox Code Playgroud)
解决方案:
login := exec.Command(cmd, "login")
var b bytes.Buffer
b.Write([]byte(username + "\n" + pwd + "\n"))
login.Stdout = os.Stdout
login.Stdin = &b
login.Stderr = os.Stderr
Run Code Online (Sandbox Code Playgroud) 我正在实现在两个不同容器上运行的两个服务(服务器和客户端),并尝试使用gRPC在它们之间进行通信。
如果我将服务器部署为容器,而不在容器上运行客户端,则一切正常。但是,如果将客户端部署在其他容器上,则会Error #01: could not retrieve restaurant's list: rpc error: code = Unavailable desc = grpc: the connection is unavailable出现错误。
我缺少使用gRPC交流两个不同容器的步骤?
PS:我想暂时不使用Kubernetes。
服务器
func Serve() {
log.Println("serving...")
port := ":50051"
lis, err := net.Listen("tcp", port)
if err != nil {
log.Fatalf("failed to listen on port %s: %v", port, err)
}
s := grpc.NewServer()
server := server{}
RegisterNeo4BaconServer(s, server)
if err := s.Serve(lis); err != nil {
log.Fatal("could not serve: ", err)
}
}
Run Code Online (Sandbox Code Playgroud)
生成文件
image: ## …Run Code Online (Sandbox Code Playgroud) 在要测试的软件包中,我有一个init函数,该函数可以加载配置文件,其中包含一些我想用来运行应用程序的内容。但是,我不想在运行单元测试时触发此init函数。
有什么方法可以跳过或阻止在单元测试期间调用此init函数?
一些片段来说明这个问题:
func init() {
var err error // Necessary to prevent config variable shadowing
config, err = loadConfig("./client/config.yml")
if err != nil {
log.Fatal(err)
}
}
func loadConfig(filepath string) (*Config, error) {
viper.SetConfigFile(filepath)
if err := viper.ReadInConfig(); err != nil {
return nil, fmt.Errorf("Error loading config file: %s", err)
}
(...)
}
// New returns a Config value(!)
func New() Config {
return *config
}
Run Code Online (Sandbox Code Playgroud)
一个测试用例:
func TestNew(t *testing.T) {
expected := &Config{}
observed := New()
if !reflect.DeepEqual(observed, …Run Code Online (Sandbox Code Playgroud)