我想了解如何构建用 Go 语言编写的应用程序。如果你写入命令go build
,则只会编译一个可执行文件。这就是运行应用程序所需的全部内容吗?例如,在 C# 中,如果您构建一个项目,将出现一个单独的发布文件夹,其中将包含所有依赖项。已发布的 Go 应用程序的所有依赖项存储在哪里?
Maggot
Asked:
2025-04-22 14:46:43 +0000 UTC
我正在编写一个处理字母 Z 的函数:如果 Z 用作独立单词,则将其转换为“z”,如果它是单词的一部分,则将其转换为“z”。
在处理字母之前,会应用一个替换字母组合的函数,例如“sh”->“ш”等等。这就是为什么我使用符文而不是字符串进行处理(这允许更正确地解释字节)。如何从函数返回一个可能的值——一个符文或一个符文数组?
源代码:
func Zhandler(a string, i int) (rune || []rune) {
if i == 0 && utf8.RuneCountInString(a) == 1 {
return []rune{'з', 'э', 'т'}
}
return 'з'
}
dvj
Asked:
2025-03-16 15:24:27 +0000 UTC
我在 GitHub 上有两个私人存储库,我将第二个存储库用作第一个存储库中的库。两者都是私人的。
我创建了一个部署密钥,将带有 rsa 的公钥放在那里,第二个密钥中的私钥就在项目的根目录中,然后我将它复制到容器中并尝试直接通过 git clone 进行安装,因为它无法通过 https 工作并且它要求使用 ssh。
但是它告诉我没有访问权限,我已经挣扎了2天了,我写信给你,救命,这是当前的docker文件。
key_pb - 这不是一个公共页面,而是一个 protobuff 库
FROM golang:1.24 AS builder
RUN apt-get update && apt-get install -y make
WORKDIR /app
COPY ./key_pb /root/.ssh/key_pb
RUN ls /root/.ssh/
RUN ssh-keyscan github.com >> /root/.ssh/known_hosts
RUN cat /root/.ssh/known_hosts
RUN ssh -T [email protected]
RUN git clone [email protected]:linus/torvalds.git .
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN go build -o main ./cmd
EXPOSE 8096
EXPOSE 8095
CMD ["make", "migrate_pg", "&&", "make", "migrate_ch", "&&", "./main"]
Maggot
Asked:
2025-03-21 16:20:24 +0000 UTC
我有一个将单词从英语翻译成俄语的代码。我还有一个包含数组数组的 JSON 文件,用于检查音译器的运行情况。以下是测试代码:
func TestMain(t *testing.T) {
b, err := os.ReadFile("../json/testcases.json")
if err != nil {
fmt.Println("Ошибка записи данных:", err)
}
var testTranslit [][]string
err = json.Unmarshal(b, &testTranslit)
if err != nil {
fmt.Print("Ошибка десириализации файла")
}
for _, v := range testTranslit {
assert.EqualValues(t, strings.ToLower(v[1]), mainTest(v[0]))
}
在终端完成测试后我得到以下结果:
expected: "мантра" actual : "мэнтра" Diff: --- Expected +++ Actual @@ -1 +1 @@ -мантра +мэнтра
是否可以通过仅保留预期值和实际值来获得格式化的测试结果?
书中的例子
func main() {
var count1 *int
count2:= new(int)
countTemp:= 5
count3:= &countTemp
t:= &time.Time{}
fmt.Printf("count1: %#v\n", count1)
fmt.Printf("count2: %#v\n", count2)
fmt.Printf("count3: %#v\n", count3)
fmt.Printf("time: %#v\n", t)
}
在输出中我们得到
count1: (*int)(nil)
count2: (*int)(0xc00000a0c8)
count3: (*int)(0xc00000a0e0)
time: time.Date(1, time.January, 1, 0, 0, 0, 0, time.UTC)
指向 countTemp 的指针和指向时间的指针有什么区别,为什么我们从时间中获取值