Go 1.16 et package local

Ou module ....

a marqué ce sujet comme résolu.

Bonjour,

Comment importe-t-on un package local depuis la dernière version de GoLang (1.16) ?

Voilà comment mon projet est découpé :

davy/
├── server.go
├── config
│   ├── config.go
│   ├── config.json
│   └── go.mod
├── src
│   ├── dir.tmpl
│   └── request.tmpl
└── static
    ├── ban.svg
    └── pink.svg

Basiquement, server.go est le package main. L’essentiel est dedans. Le package config gère ce qui est lié à la configuration du serveur. src contient les patrons des pages et static les ressources statiques.

Bref, normalement, j’importe simplement le package local config depuis server.go avec :

import "./config"

Depuis 1.16, j’ai ce message : cannot find module for path.

Précisément l’erreur est : build command-line-arguments: cannot find module for path _/home/ache/git/davy/config.

Les modules me semblent-t-ils sont fait pour le partage publique. Ça ne m’intéresse pas, c’est de la programmation modulaire locale. config n’a aucun intérêt à part pour ce projet.

Bien-sûr, je pourrais faire go mod init, blabla, crée un sous module config. Au final j’obtiendrais ça :

module ache.one/davy


require (
  ache.one/davy/config v0.0.0
)

go 1.16

replace ache.one/davy/config => ./config

Mais ce n’est pas la manière propre de faire, …, si ?

Bon WE \o

+0 -0

Ok, je me répond à moi même :

https://github.com/golang/go/issues/26645#issuecomment-408572701

Du coup, il n’y a qu’un seul fichier go.mod à créer :

davy/
├── server.go
├── go.mod
├── config
│   ├── config.go
│   ├── config.json
│   └── go.mod
├── src
│   ├── dir.tmpl
│   └── request.tmpl
└── static
    ├── ban.svg
    └── pink.svg

Et il contient :

module davy

go 1.16

L’import se fait de la manière suivante :

import "davy/config"

Je ne comprend pas pourquoi ce n’est pas dans les notes de release de la version 1.16 mais bon.

+0 -0

Je ne comprend pas pourquoi ce n’est pas dans les notes de release de la version 1.16 mais bon.

ache

Parce que ça n’a pas changé depuis Go 1.11. La seule chose qui a bougé c’est que les modules ne sont plus en option.

Edit : Par contre je ne comprends pas pourquoi ton go.mod n’est pas à la racine du projet ?

Ce fichier est plus ou moins comme un requirements.txt en Python, ou un Cargo.toml, il sert à délimiter la racine du module (ton projet, en gros), et à répertorier ses dépendances et leurs versions.

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte