github.com/gop9/olt@v0.0.0-20200202132135-d956aad50b08/gio/app/internal/window/runmain.go (about) 1 // SPDX-License-Identifier: Unlicense OR MIT 2 3 // +build android darwin,ios 4 5 package window 6 7 // Android only supports non-Java programs as c-shared libraries. 8 // Unfortunately, Go does not run a program's main function in 9 // library mode. To make Gio programs simpler and uniform, we'll 10 // link to the main function here and call it from Java. 11 12 import ( 13 "sync" 14 _ "unsafe" // for go:linkname 15 ) 16 17 //go:linkname mainMain main.main 18 func mainMain() 19 20 var runMainOnce sync.Once 21 22 func runMain() { 23 runMainOnce.Do(func() { 24 // Indirect call, since the linker does not know the address of main when 25 // laying down this package. 26 fn := mainMain 27 go fn() 28 }) 29 }