创建第一个Go的程序Hello Kitty

简介: 创建第一个Go的程序Hello Kitty

上一篇,我们已经搭建好了开发要用的基础环境:Go开发基础环境搭建, 今天我们要开始用GoLand实操关于Go的代码开发。

创建工程

File > New > Project

其中 game为项目名称

在项目目录下会自动生成一个文件:go.mod ,模块是相关Go包的集合。modules是源代码交换和版本控制的单元。go命令直接支持使用modules,包括记录和解析对其他模块的依赖性。后面会提及。

一开始内容如下:

module game
go 1.20

如果是没有这个文件,就需要去生成,go mod init {projectName}

比如:

go mod init game
go mod tidy

第一个类 main.go

一般 go的类名都为小写,并且都叫main.go,

package game
import "fmt"
func main() {
  fmt.Println("Welcome to the game of life!")
}

执行go run main.go会报错

附上参数表:

参数名 格式 含义
-o -o file 指定编译后二进制文件名
-importcfg -importcfg file 从文件中读取倒入配置
-s -s 省略符号表并调试信息
-w -w 省略 DWARF 符号表
-buildmode -buildmode mode 设置构建模式 - 默认为 exe
-buildid -buildid id 将ID记录为Go工具链的构建ID
-extld - extld linker 设置外部链接器 - 默认为 clang 或者 gcc
-work -work 设置该参数后不会在程序结束后删掉编译的临时文件,可用于参看编译生成的文件
-n - n 加上该参数可以查看编译的过程,但不会继续执行编译后的二进制文件
-x -x 加上该参数可以查看编译的过程,会继续执行编译后的二进制文件

编码规范

The 'main' file has the non-main package or does not contain the 'main' function

这是因为没声明main包,把package game 改成package main 就可以了。

PS E:\go-workspace\game> go run main.go
Welcome to the game of life!

在这过程种,可能会遇到如下异常:

Q1.windows下使用endless报错:undefined: syscall.SIGUSR1

go run main.go
# github.com/fvbock/endless
vendor\github.com\fvbock\endless\endless.go:64:11: undefined: syscall.SIGUSR1 
vendor\github.com\fvbock\endless\endless.go:65:11: undefined: syscall.SIGUSR2 
vendor\github.com\fvbock\endless\endless.go:68:11: undefined: syscall.SIGTSTP 
vendor\github.com\fvbock\endless\endless.go:111:13: undefined: syscall.SIGUSR1
vendor\github.com\fvbock\endless\endless.go:112:13: undefined: syscall.SIGUSR2
vendor\github.com\fvbock\endless\endless.go:115:13: undefined: syscall.SIGTSTP
vendor\github.com\fvbock\endless\endless.go:119:13: undefined: syscall.SIGUSR1
vendor\github.com\fvbock\endless\endless.go:120:13: undefined: syscall.SIGUSR2
vendor\github.com\fvbock\endless\endless.go:123:13: undefined: syscall.SIGTSTP
vendor\github.com\fvbock\endless\endless.go:224:11: undefined: syscall.Kill   
vendor\github.com\fvbock\endless\endless.go:224:11: too many errors

windows 下的信号没有 SIGUSR1、SIGUSR2 等,为了不轻易的抛弃 windows 环境 (没有勇气换 mac)。目前用了一个 ditty 的办法解决:

在 go 的安装目录修改 Go\src\syscall\types_windows.go,83行左右,增加如下代码:

var signals = [...]string{
    // 这里省略N行。。。。
    /** 兼容windows start */
    16: "SIGUSR1",
    17: "SIGUSR2",
    18: "SIGTSTP",
    /** 兼容windows end */
}
/** 兼容windows start */
func Kill(...interface{}) {
    return;
}
const (
    SIGUSR1 = Signal(0x10)
    SIGUSR2 = Signal(0x11)
    SIGTSTP = Signal(0x12)
)
/** 兼容windows end */

Q2: unsupported architecture of windows/i386 - only windows/amd64 is supported

在终端执行如下:

go env -w GOARCH=amd64

总结:

本文讲述了关于用GoLand开发第一个Go程序,下一篇我们将说说如何进行Go程序的打包发布

目录
相关文章
|
2月前
|
Linux 测试技术 编译器
在go程序中的交叉编译
【7月更文挑战第9天】本文介绍Go 交叉编译允许在一种平台上构建适用于多平台的二进制文件。`go build -cover`用于覆盖率分析,`-coverpkg`控制分析的包范围,生成的二进制文件运行后,覆盖率数据会写入`GOCOVERDIR`指定的目录。
143 14
在go程序中的交叉编译
|
3月前
|
存储 安全 测试技术
【Go语言精进之路】构建高效Go程序:了解map实现原理并高效使用
【Go语言精进之路】构建高效Go程序:了解map实现原理并高效使用
48 3
|
3月前
|
存储 监控 Go
【Go语言精进之路】构建高效Go程序:了解切片实现原理并高效使用
【Go语言精进之路】构建高效Go程序:了解切片实现原理并高效使用
54 3
|
1月前
|
Linux Shell Go
如何构建和安装 Go 程序
如何构建和安装 Go 程序
28 1
|
20天前
|
存储 缓存 安全
|
20天前
|
编译器 Go 开发者
|
1月前
|
Go
在Go中如何停止程序
在Go中如何停止程序
|
1月前
|
Go 数据库 UED
[go 面试] 同步与异步:程序执行方式的不同之处
[go 面试] 同步与异步:程序执行方式的不同之处
|
1月前
|
设计模式 Java 编译器
Go - 基于逃逸分析来提升程序性能
Go - 基于逃逸分析来提升程序性能
30 2
|
2月前
|
自然语言处理 算法 Go
理解在go程序的初始化顺序和MVS
【7月更文挑战第9天】本文介绍Go程序初始化顺序:按导入顺序执行`init()`,先变量定义、常量、再执行`init()`,最后`main()`. 运行时使用`GOCOVERDIR`保存覆盖率数据。
82 1
理解在go程序的初始化顺序和MVS