window 平台下go的包导入问题解决

之前window平台下的go的包导入问题一直没搞清楚,今天重点学习了一下,下面是学习记录

参考文档:https://github.com/astaxie/build-web-application-with-golang/blob/master/zh/01.2.md

go的安装 不详细说了,我用的是标准安装包方式

Go标准包安装:Go提供了方便的安装包,支持Windows、Linux、Mac等系统。这种方式适合快速安装,可根据自己的系统位数下载好相应的安装包,一路next就可以轻松安装了。推荐这种方式

 

1.配置环境变量,具体配置如下:

 

 

path配置如下

 

2.新建GOPATH目录

   这里需要注意的是GOPATH目录与安装目录不是一个目录,不要搞混,

 

gocode下的三个目录都是手动新建的,具体含义如下:

 

 

 

3.配置golang 的GOPATH路径

file->setting->Go->GOPATH

4.新建工程 导入包

 

需要注意的几个问题:

 1.项目的路径应该在你设置的GOPATH的src路径下

 2.用goland 开发不需要手动 go build ,goland会在执行的时候自动生产包文件放到 pkg 文件下

 3.在其他包中导入main包会有问题,原因不明,所以最好在main.go中导入其他包

 4.目录名,包名,文件名 是3个不同的概念,包名默认与目录名相同,main.go 的包名应该改为main

 

要记录Windows平台用户的登录和注销时间,可以使用`Win32 API`。`Win32 API`是Windows操作系统中可用的一组应用程序接口,可以让开发人员编写Windows应用程序。以下是在Go中记录Windows平台用户登录和注销时间的一些步骤: 1. 导入必要的: ```go import ( "fmt" "syscall" "time" "unsafe" ) ``` 2. 定义必要的常量和结构体: ```go const ( EVENT_SYSTEM_FOREGROUND = 0x0003 WINEVENT_OUTOFCONTEXT = 0x0000 ) type LASTINPUTINFO struct { cbSize uint32 dwTime uint32 } ``` 3. 创建`Win32 API`的`SetWinEventHook`函数来监视事件: ```go user32 := syscall.NewLazyDLL("user32.dll") procSetWinEventHook := user32.NewProc("SetWinEventHook") procUnhookWinEvent := user32.NewProc("UnhookWinEvent") hwnd := syscall.Handle(0) id := syscall.NewCallback(func(hWinEventHook syscall.Handle, event uint32, hwnd syscall.Handle, idObject int32, idChild int32, dwEventThread uint32, dwmsEventTime uint32) { switch event { case EVENT_SYSTEM_FOREGROUND: fmt.Println("User switched to window", hwnd) // 在这里记录用户登录时间 } }) hook, _, _ := procSetWinEventHook.Call( uintptr(EVENT_SYSTEM_FOREGROUND), uintptr(EVENT_SYSTEM_FOREGROUND), uintptr(0), id, uintptr(0), uintptr(0), uintptr(WINEVENT_OUTOFCONTEXT), ) ``` 4. 记录用户登录时间。可以使用`GetLastInputInfo`函数获取系统上一次用户输入的时间: ```go kernel32 := syscall.NewLazyDLL("kernel32.dll") procGetLastInputInfo := kernel32.NewProc("GetLastInputInfo") lii := LASTINPUTINFO{} lii.cbSize = uint32(unsafe.Sizeof(lii)) procGetLastInputInfo.Call(uintptr(unsafe.Pointer(&lii))) lastInput := time.Duration(lii.dwTime) * time.Millisecond now := time.Now() idleTime := now.Sub(lastInput) fmt.Println("User idle for", idleTime) // 在这里记录用户注销时间 ``` 5. 最后,记得在程序退出时取消事件钩子: ```go procUnhookWinEvent.Call(hook) ``` 这样,您就可以使用Go记录Windows平台用户的登录和注销时间了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值