Un puerto GUI del marco de Python to Go. Análisis de rastrillos y bollos

Con Python, tuve que trabajar desde la desesperanza: ML, redes neuronales, secuencias de comandos, fue en eso que fue más conveniente. Pero el tiempo pasa y la ansiedad por la velocidad de su código lo empuja a algo más rápido y confiable.





La tarea de portar el marco de la GUI fue dolorosa, porque mi Unigui universal funcionaba solo desde Python y era universal solo en teoría. En él se desarrolló una API extremadamente lacónica, que debería haberse conservado en la versión Go. Además, la masa de automatismo para generar los datos necesarios no estaba sujeta a portabilidad, ya que Go carece de control de orden de compilación, preprocesador, metaprogramación, lo que garantiza una experiencia Spartan complicada.





La primera dificultad en la que me metĂ­ fue la imposibilidad de asignar directamente campos promocionados (anidados) en y solo en el inicializador de estructura. Si la estructura tiene una estructura anidada sin nombre, entonces se puede acceder a sus campos desde la raĂ­z externa en todas partes, excepto en el inicializador. Por lo que, entre otras cosas, toda la idea de los campos anidados como la sustituciĂłn de la jerarquĂ­a se ha vuelto dudosa y engorrosa de usar. Requerir que el usuario escriba inicializadores anidados largos con tipos innecesarios serĂ­a el colmo de la indecencia. Todas las estructuras de la GUI se han vuelto completamente planas, independientes, aunque existe una jerarquĂ­a clara en Python.





, Go , . , - , , , , , “ API”. , , . , , .   . Type_ a Type(…) *Type_. , , Go .





Go Json . nil ( ), nil nil a / [ ] . , — . k, Google, , == nil, = make(0, []Any). , == nil, reflect != nil. reflect.ValueOf(ptr).IsNil() , , true! , ..





hash. . . . . .





, ? , , Any — interface{}. ! ,  100% — . “ , !” 





. , , ( ) , , . , , . , ( ). Google





 MyField int json:"myfield"



, JSON . — - . ? , , — , , . .. !





  Dart _ . , Go Dart- , . . .  , Google , “” . , , , , ?





, map/filter/.. , RemoveAtIndex, , 1.17 , , , .





? ! fmt.Sprintf. - — , , — “ ”.





  .





  • — . , . , , ML- Go… 





  • /. , , Python-a Go — . — , , , . Python - .





  • / — Go. github ( ), . , Visual C++ ~20 , Edit & Continue . , Edit & Continue Go VS Code , , . --. ..





  • . . Go. , . , , , — . 





  • . , Go , 20% . 70% reflect . . , . . 





  • . ( 8000 ) Python Go.





Go:





package main
import . "github.com/Claus1/unigui-go"		

func screenTest(user* User)* Screen_{	
	table := Table("Videos",0, nil, []string{"Video", "Duration",  "Links", "Mine"},
	SeqSeq(Seq("opt_sync1_3_0.mp4", "30 seconds",  "@Refer to signal1", true),
		Seq("opt_sync1_3_0.mp4", "37 seconds",  "@Refer to signal8", false)))
			
	cleanButton := Button("Clean table", nil, "")
	selector := Select("Select", "All", nil, []string{"All","Based","Group"})
	block := Block("X Block", Seq(cleanButton, selector), table)
	block.Icon = "api"
	return Screen(block)	
}
func main(){			
	//register screens
	Register(screenTest, "Main", 0, "insights")	
	Start()
}
      
      



Python:





from unigui import *
name = "Main" #name of screen to show
icon = 'blur_linear' #MD icon of screen to show
order = 0 #order in the program menu
table = Table('Videos', 0, headers = ['Video', 'Duration',  'Links', 'Mine'],rows = [
    ['opt_sync1_3_0.mp4', '30 seconds',  '@Refer to signal1', True],
    ['opt_sync1_3_0.mp4', '37 seconds',  '@Refer to signal8', False]    
])
block = Block('X Block',
    [           
        Button('Clean table'),
        Select('Select', value='All', options=['All','Based','Group'])
    ], table, icon = 'api')
blocks = [block] #what to show on the screen
start('Test app')

      
      



¿Seguiré usando Go? ¿Dónde voy a bajar del submarino ... y realmente quiero que Crystal, Nim y otros lenguajes simples y avanzados entren en producción y le den a Go un péndulo? Hasta ahora, lamentablemente, no veo una alternativa en el nicho de la producción ligera para el desarrollo de software productivo. ¡Paz!





Enlaces para curiosos:





→ Ir 





→ Python 








All Articles