"리눅스 윈도우 다 되는 Golang 프로그램 만들기"의 두 판 사이의 차이

 
62번째 줄: 62번째 줄:


==참고==
==참고==
* https://www.digitalocean.com/community/tutorials/how-to-build-go-executables-for-multiple-platforms-on-ubuntu-16-04
* https://github.com/minio/minio/tree/202d0b64eb5fb503310ee4ae5116bbdf3219257d/internal/mountinfo
* https://github.com/minio/minio/tree/202d0b64eb5fb503310ee4ae5116bbdf3219257d/internal/mountinfo



2023년 2월 27일 (월) 17:23 기준 최신판

1 개요[ | ]

리눅스 윈도우 다 되는 Golang 프로그램
main.go
package main

import (
	"fmt"
)

func main() {
	total, err := GetDiskTotalBytes()
	if err != nil {
		panic(err)
	}
	fmt.Println(total)
}
main_linux.go
//go:build linux
// +build linux

package main

import "golang.org/x/sys/unix"

func GetDiskTotalBytes() (int, error) {
	var stat unix.Statfs_t
	err := unix.Statfs("/", &stat)
	if err != nil {
		return -1, err
	}
	return int(int64(stat.Blocks) * stat.Bsize), nil
}
main_windows.go
//go:build windows
// +build windows

package main

import "golang.org/x/sys/windows"

func GetDiskTotalBytes() (int, error) {
	var free, total, available uint64
	pathPtr, err := windows.UTF16PtrFromString(`C:\`)
	if err != nil {
		return -1, err
	}
	err = windows.GetDiskFreeSpaceEx(pathPtr, &free, &total, &available)
	if err != nil {
		return -1, err
	}
	return int(total), nil
}

2 참고[ | ]

문서 댓글 ({{ doc_comments.length }})
{{ comment.name }} {{ comment.created | snstime }}