数组和切片有什么区别?
数组适合用于需要固定长度、且不需要动态变化的集合。切片更灵活,适用于需要动态变化大小的集合,并且可以方便地引用和操作部分数据。二者区别:
特性 | 数组(Array) | 切片(Slice) |
---|---|---|
长度 | 固定,声明时必须指定 | 动态,可根据需要调整 |
类型 | [N]Type,其中 N 是长度 | []Type,不包含长度 |
内存分配 | 在编译时确定,连续内存块 | 基于数组实现,包含指针、长度和容量 |
传递方式 | 值传递,拷贝整个数组 | 引用传递,传递底层数组的引用 |
切片操作 | 不支持 | 支持,可以获取子切片 |
使用场景 | 需要固定大小的集合 | 需要动态调整大小的集合,或高效传递大数据量的集合 |
内置函数支持 | 不支持 append 等内置函数 | 支持 append、copy 等内置函数 |
关于Windows下使用cgo交叉编译linux程序
可参考:
Windows golang cgo交叉编译 linux arm64
Windows golang cgo交叉编译 linux x86_64
图形化界面选择
在Golang的GUI框架选择上,有几个值得推荐的框架:
- Fyne:Fyne是一个跨平台的GUI库,支持Windows、macOS、Linux和移动端平台。它以简单易用、快速开发和跨平台为主要特点,提供了易于使用的API和可视化构建工具,同时支持许多UI组件和布局选项。
- Walk:Walk是专门为Windows平台设计的GUI库,它提供了大量的UI控件和布局选项。Walk采用Go的语言风格和结构体设计方式,使得开发者可以快速地创建复杂的窗口应用程序。它的优点在于完整性强、功能齐全、灵活性高。
- gotk3:gotk3是Golang的GTK+3封装库,提供了完整的GTK+3 API支持。GTK+3是一个跨平台的GUI工具包,在Linux上得到广泛应用。使用gotk3可以在Golang中轻松创建GTK+3应用程序,其优点在于功能齐全、稳定性好。
- GOVCL:GOVCL是另一个跨平台的GUI包,它提供了与Windows VCL库相似的功能,适用于构建Windows应用程序界面。GOVCL结合了Golang的高效性能和VCL的丰富控件,适合需要开发Windows特定界面的项目。
- Gio UI:Gio UI支持多个操作系统,包括Windows、macOS、iOS和Linux,它提供了与Gio库的集成,适合开发跨平台应用程序。Gio UI的特点包括易于使用和良好的性能。
Header.Set和Header.Add的区别
user,pass := "test","test"
url := "https://www.hackall.cn"
data := fmt.Sprintf(`username=%s&password=%s`,user,pass)
req, err := http.NewRequest("POST",url,strings.NewReader(data))
if err != nil {
fmt.Println(err.Error())
}
req.Header.Add("Cookie","username=test")
req.Header.Set("client-version","1.5.0")
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
fmt.Println(err)
}
defer resp.Body.Close()
Add和Set是http.Header类型提供的两个不同的方法,它们用于操作请求头,但行为有所不同:
- Add方法用于添加请求头字段。如果字段已存在,Add会追加新的值到现有的字段值列表中,而不是替换它们。
- Set方法用于设置请求头字段。无论该字段是否已存在,Set都会替换现有的字段值为新值。
打包带图标和详情的程序
Windows
可以使用go-winres。
优点是简单好用,缺点是图标像素不能太大,太大会有锯齿,不太美观,且不支持ico文件。
还可以使用MingGW的windres。需要的环境和资源:
- MingGW
- Go
- rc文件
- ico文件
rc文件内容如下:
1 VERSIONINFO
FILEVERSION 1,0,0,0
PRODUCTVERSION 1,0,0,0
FILEOS 0x40004
FILETYPE 0x1
{
BLOCK "StringFileInfo"
{
BLOCK "040904B0"
{
VALUE "CompanyName", "HackAllSec"
VALUE "FileDescription", "Test"
VALUE "FileVersion", "1.0.0.0"
VALUE "InternalName", ""
VALUE "LegalCopyright", "Copyright (C)2024 www.hackall.cn. All rights reserved."
VALUE "OriginalFilename", ""
VALUE "ProductName", "TEST"
VALUE "ProductVersion", "1.0.0.0"
}
}
BLOCK "VarFileInfo"
{
VALUE "Translation", 0X0409, 0X04B0
}
}
IDI_ICON1 ICON "icon.ico"
内容说明请参考微软文档:StringFileInfo BLOCK 语句
然后生成syso
文件:
windres -o demo.syso demo.rc
然后正常build即可。优点是支持ico,缺点是大图标也会产生锯齿,不太美观。
Comments | NOTHING