上一篇,我们已经搭建好了开发要用的基础环境:Go开发基础环境搭建, 今天我们要开始用GoLand实操关于Go的代码开发。
创建工程
File > New > Project
其中 game为项目名称
在项目目录下会自动生成一个文件:go.mod ,模块是相关Go包的集合。modules是源代码交换和版本控制的单元。go命令直接支持使用modules,包括记录和解析对其他模块的依赖性。后面会提及。
一开始内容如下:
module gamego 1.20
如果是没有这个文件,就需要去生成,go mod init {projectName}
比如:
go mod init game
go mod tidy
第一个类 main.go
一般 go的类名都为小写,并且都叫main.go,
package gameimport "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程序的打包发布。