Ein GUI-Port des Frameworks von Python to Go. Analyse von Rechen und Brötchen

Mit Python musste ich aus Hoffnungslosigkeit heraus arbeiten - ML, neuronale Netze, Skripte, darauf war es bequemer. Aber die Zeit vergeht und die Angst vor der Geschwindigkeit Ihres Codes treibt Sie zu etwas Schnellerem und ZuverlÀssigerem.





Die Portierung des GUI-Frameworks war schmerzhaft, da mein universelles Unigui nur mit Python arbeitete und nur theoretisch universell war. Darin wurde eine extrem lakonische API entwickelt, die in der Go-Version beibehalten werden sollte. DarĂŒber hinaus wurde die Masse des Automatismus zur Erzeugung der erforderlichen Daten seitdem nicht portiert Go fehlt die Kontrolle der Kompilierungsreihenfolge, der PrĂ€prozessor und die Metaprogrammierung, was eine schwierige spartanische Erfahrung garantiert.





Die erste Schwierigkeit, auf die ich stieß, war die Unmöglichkeit, promouted (verschachtelte) Felder direkt im und nur im Strukturinitialisierer zuzuweisen. Wenn die Struktur eine unbenannte verschachtelte Struktur hat, kann auf ihre Felder von der Ă€ußeren Wurzel ĂŒberall zugegriffen werden, mit Ausnahme des Initialisierers. Unter anderem aufgrund dessen ist die gesamte Idee mit verschachtelten Feldern wie dem Ersetzen der Hierarchie sowohl zweifelhaft als auch umstĂ€ndlich geworden. Zu verlangen, dass der Benutzer lange verschachtelte Initialisierer mit unnötigen Typen schreibt, wĂ€re die Höhe der UnanstĂ€ndigkeit. Alle GUI-Strukturen sind völlig flach und unabhĂ€ngig geworden, obwohl es in Python eine klare Hierarchie gibt.





, 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')

      
      



Werde ich Go weiterhin verwenden? Wo soll ich aus dem U-Boot aussteigen? Und ich möchte wirklich, dass Crystal, Nim und andere einfache, fortgeschrittene Sprachen in die Produktion einbrechen und Go ein Pendel geben. Leider sehe ich in der Nische der Lichtproduktion fĂŒr die Entwicklung produktiver Software leider keine Alternative dazu. Frieden!





Links fĂŒr Neugierige:





→ Los 





→ Python 








All Articles