go
go copied to clipboard
proposal: Go 2: allow import package name to be put after import path
Go Programming Experience
Intermediate
Other Languages Experience
No response
Related Idea
- [ ] Has this idea, or one like it, been proposed before?
- [ ] Does this affect error handling?
- [ ] Is this about generics?
- [X] Is this change backward compatible? Breaking the Go 1 compatibility guarantee is a large cost and requires a large benefit
Has this idea, or one like it, been proposed before?
No
Does this affect error handling?
No
Is this about generics?
No
Proposal
Allow import package name to be put after import path, i.e allow the following:
import (
"time"
"github.com/xxx/yyy/zzz" myxyzutil
)
Language Spec Changes
-ImportSpec = [ "." | PackageName ] ImportPath .
+ImportSpec = [ "." | PackageName ] ImportPath | ImportPath [ "." | PackageName ] .
Informal Change
No response
Is this change backward compatible?
Yes
Orthogonality: How does this change interact or overlap with existing features?
No response
Would this change make Go easier or harder to learn, and why?
Consider the following change for example:
import (
"fmt"
"net"
"reflect"
"strconv"
"time"
"k8s.io/api/admissionregistration/v1" admissionregistrationv1
"k8s.io/api/admissionregistration/v1alpha1" admissionregistrationv1alpha1
"k8s.io/api/admissionregistration/v1beta1" admissionregistrationv1beta1
"k8s.io/api/apiserverinternal/v1alpha1" apiserverinternalv1alpha1
"k8s.io/api/apps/v1" appsv1
"k8s.io/api/authentication/v1" authenticationv1
"k8s.io/api/authentication/v1alpha1" authenticationv1alpha1
"k8s.io/api/authentication/v1beta1" authenticationv1beta1
"k8s.io/api/authorization/v1" authorizationapiv1
"k8s.io/api/autoscaling/v1" autoscalingapiv1
"k8s.io/api/autoscaling/v2" autoscalingapiv2
"k8s.io/api/batch/v1" batchapiv1
"k8s.io/api/certificates/v1" certificatesapiv1
"k8s.io/api/certificates/v1alpha1" certificatesv1alpha1
"k8s.io/api/coordination/v1" coordinationapiv1
"k8s.io/api/core/v1" apiv1
"k8s.io/api/discovery/v1" discoveryv1
"k8s.io/api/events/v1" eventsv1
"k8s.io/api/networking/v1" networkingapiv1
"k8s.io/api/networking/v1alpha1" networkingapiv1alpha1
"k8s.io/api/node/v1" nodev1
"k8s.io/api/policy/v1" policyapiv1
"k8s.io/api/rbac/v1" rbacv1
"k8s.io/api/resource/v1alpha2" resourcev1alpha2
"k8s.io/api/scheduling/v1" schedulingapiv1
"k8s.io/api/storage/v1" storageapiv1
"k8s.io/api/storage/v1alpha1" storageapiv1alpha1
"k8s.io/api/storage/v1beta1" storageapiv1beta1
"k8s.io/api/storagemigration/v1alpha1" svmv1alpha1
"k8s.io/apimachinery/pkg/runtime/schema"
"k8s.io/apimachinery/pkg/util/net" utilnet
"k8s.io/apiserver/pkg/endpoints/discovery"
"k8s.io/apiserver/pkg/server" genericapiserver
"k8s.io/apiserver/pkg/server/storage" serverstorage
"k8s.io/apiserver/pkg/util/feature" utilfeature
"k8s.io/client-go/discovery" clientdiscovery
"k8s.io/client-go/kubernetes"
"k8s.io/client-go/kubernetes/typed/core/v1" corev1client
"k8s.io/client-go/kubernetes/typed/discovery/v1" discoveryclient
"k8s.io/klog/v2"
"k8s.io/kubernetes/pkg/apis/core" api
"k8s.io/kubernetes/pkg/apis/flowcontrol/v1" flowcontrolv1
"k8s.io/kubernetes/pkg/apis/flowcontrol/v1beta1" flowcontrolv1beta1
"k8s.io/kubernetes/pkg/apis/flowcontrol/v1beta2" flowcontrolv1beta2
"k8s.io/kubernetes/pkg/apis/flowcontrol/v1beta3" flowcontrolv1beta3
"k8s.io/kubernetes/pkg/controlplane/apiserver" controlplaneapiserver
"k8s.io/kubernetes/pkg/controlplane/apiserver/options"
"k8s.io/kubernetes/pkg/controlplane/controller/defaultservicecidr"
"k8s.io/kubernetes/pkg/controlplane/controller/kubernetesservice"
"k8s.io/kubernetes/pkg/controlplane/reconcilers"
"k8s.io/kubernetes/pkg/features"
"k8s.io/kubernetes/pkg/kubeapiserver/options" kubeoptions
"k8s.io/kubernetes/pkg/kubelet/client" kubeletclient
// RESTStorage installers
"k8s.io/kubernetes/pkg/registry/admissionregistration/rest" admissionregistrationrest
"k8s.io/kubernetes/pkg/registry/apiserverinternal/rest" apiserverinternalrest
"k8s.io/kubernetes/pkg/registry/apps/rest" appsrest
"k8s.io/kubernetes/pkg/registry/authentication/rest" authenticationrest
"k8s.io/kubernetes/pkg/registry/authorization/rest" authorizationrest
"k8s.io/kubernetes/pkg/registry/autoscaling/rest" autoscalingrest
"k8s.io/kubernetes/pkg/registry/batch/rest" batchrest
"k8s.io/kubernetes/pkg/registry/certificates/rest" certificatesrest
"k8s.io/kubernetes/pkg/registry/coordination/rest" coordinationrest
"k8s.io/kubernetes/pkg/registry/core/rest" corerest
"k8s.io/kubernetes/pkg/registry/discovery/rest" discoveryrest
"k8s.io/kubernetes/pkg/registry/events/rest" eventsrest
"k8s.io/kubernetes/pkg/registry/flowcontrol/rest" flowcontrolrest
"k8s.io/kubernetes/pkg/registry/networking/rest" networkingrest
"k8s.io/kubernetes/pkg/registry/node/rest" noderest
"k8s.io/kubernetes/pkg/registry/policy/rest" policyrest
"k8s.io/kubernetes/pkg/registry/rbac/rest" rbacrest
"k8s.io/kubernetes/pkg/registry/resource/rest" resourcerest
"k8s.io/kubernetes/pkg/registry/scheduling/rest" schedulingrest
"k8s.io/kubernetes/pkg/registry/storage/rest" storagerest
"k8s.io/kubernetes/pkg/registry/storagemigration/rest" svmrest
)
where all the package name aliases are put after the import path. In this way, I can tell more easily at the glance about what kinds of domains/functionalities are imported. In my opinion, this improves the readability.
Cost Description
No response
Changes to Go ToolChain
No response
Performance Costs
No response
Prototype
No response