golang / go

The Go programming language
https://go.dev
BSD 3-Clause "New" or "Revised" License
122.89k stars 17.52k forks source link

x/mobile: gomobile bind: add flag to disable package name prefix in iOS classes #32573

Open ealymbaev opened 5 years ago

ealymbaev commented 5 years ago

What version of Go are you using (go version)?

$ go version
go version go1.12.5 darwin/amd64

Does this issue reproduce with the latest release?

Yes

What operating system and processor architecture are you using (go env)?

go env Output
$ go env
GOARCH="amd64"
GOBIN=""
GOCACHE="/Users/ealymbaev/Library/Caches/go-build"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOOS="darwin"
GOPATH="/Users/ealymbaev/go"
GOPROXY=""
GORACE=""
GOROOT="/usr/local/Cellar/go/1.12.5/libexec"
GOTMPDIR=""
GOTOOLDIR="/usr/local/Cellar/go/1.12.5/libexec/pkg/tool/darwin_amd64"
GCCGO="gccgo"
CC="clang"
CXX="clang++"
CGO_ENABLED="1"
GOMOD="/Users/ealymbaev/projects/go-fee-rate-kit/go.mod"
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/var/folders/k6/bvkt3fss5y16k_y3vyftfq1h0000gp/T/go-build635284137=/tmp/go-build -gno-record-gcc-switches -fno-common"

When binding an iOS framework with:

gomobile bind -target ios some-package

in generated header files all classes DO have prefix of package name. I tried using -prefix flag, but it adds even additional prefix to class names.

I need a way to remove package name prefix, so the class name remain exactly the same as in Go code.

hyangah commented 5 years ago

Is it not possible to directly use the gobind instead of gomobile bind and replace/modify the generated names to your liking?

BTW we chose to include the package names in name generation because in Go, package names are important part of exported names (e.g. Go code uses fmt.Fprintf, not Fprintf), and even choosing the right package name is often discussed in various Go best-practice docs. e.g. https://blog.golang.org/package-names

triztian commented 5 years ago

I think requiring a prefix (defaulting to the package name) is ok, however being able to completely override it would be nice:

in generated header files all classes DO have prefix of package name. I tried using -prefix flag, but it adds even additional prefix to class names.

I've found myself in the situation in which I'd like to have different prefix but to do so I've got to rename the package abc statements in all of the files.

ToJen commented 4 years ago

Is there a solution or work around to this? Android doesn't have this issue?

MaggieNgWu commented 3 years ago

Is there a solution around to this?

Artanidos commented 1 year ago

Is there a solution or work around to this? Android doesn't have this issue?

Same issue on Android. I have to do imports like this:

import lib.Lib
import database.Database

In Kotlin and Java we normally use a reverse uri for package names to avoid naming conflicts:

import at.crowdware.lib
import at.crowdware.database
yfwz100 commented 1 year ago

Is there any progress? Now it conflicts with android's code generation strategy. In Android, the imported client doesn't have prefix while iOS has.