1. ホーム
  2. go

[解決済み] SDL2 パッケージを提供する必要なモジュールはありません。

2022-02-15 10:37:20

質問

sdl2 パッケージを以下の場所からインポートしようとしています。 https://github.com/veandco/go-sdl2 . Windows版readme.mdに記載されている全ての手順に従いました。mingw64をインストールし、cmdで実行します。

go get -v github.com/veandco/go-sdl2/sdl

動作は問題ないのですが、試しにやってみると

go run .\sdl2.go

こんなエラーが出ました。

sdl2.go:4:2: no required module provides package github.com/veandco/go-sdl2/sdl: working directory is not part of a module

私の別のコンピュータでは完璧に動作しますが、このリポジトリをクローンして、別のラップトップにパッケージをインストールすると、多くの問題が発生しました。このケースについてより多くの情報を得るために、私のテストソースをここに置きました。

package main

import (
    "github.com/veandco/go-sdl2/sdl"
    "fmt"
)

const winWidth, winHeight int = 800, 600



type color struct {
    r, g, b byte
}

func setPixel(x, y int, c color, pixels []byte) {
    index := (y * winWidth + x) * 4

    if index < len(pixels)-4 && index >= 0 {
    pixels[index] = c.r
    pixels[index+1] = c.g
    pixels[index+2] = c.b
    }
}

func main() {
    winWidth := 800
    winHeight := 600

    window,err := sdl.CreateWindow("Testing SDL2", sdl.WINDOWPOS_UNDEFINED, sdl.WINDOWPOS_UNDEFINED,
        int32(winWidth) ,int32(winHeight), sdl.WINDOW_SHOWN)
    if err != nil {
        fmt.Println(err)
        return 
    }
    defer window.Destroy()

    renderer, err := sdl.CreateRenderer(window, -1, sdl.RENDERER_ACCELERATED)
    if err != nil {
        fmt.Println(err)
        return
    }
    defer renderer.Destroy()

    tex, err  := renderer.CreateTexture(sdl.PIXELFORMAT_ABGR8888, sdl.TEXTUREACCESS_STREAMING, int32(winWidth), int32(winHeight))
    if err != nil {
        fmt.Println(err)
        return
    }
    defer tex.Destroy()

    pixels := make([]byte, winWidth*winHeight*4)

    for y := 0; y < winHeight; y++ {
        for x := 0; x < winWidth; x++ {
            setPixel(x,y, color{byte(x % 255),byte(y % 255), 0}, pixels)
        }
    }
    tex.Update(nil,pixels,winWidth*4)
    renderer.Copy(tex,nil,nil)
    renderer.Present()

    sdl.Delay(2000)

} 

解決方法は?

によると Go 1.16 の新しいモジュールの変更点 ブログ

go コマンドは、go.mod が存在しない場合でも、デフォルトでモジュールを考慮したモードでパッケージをビルドするようになりました。これは、すべてのプロジェクトでモジュールを使用するための大きな一歩です。

ブログで提案されているように、GO111MODULEの値をautoに変更します。 go env -w GO111MODULE=auto を実行すると、問題が解決します。