Com Python, eu tive que trabalhar para sair da desesperança - ML, redes neurais, scripts, era nele que era mais conveniente. Mas o tempo passa e a ansiedade com a velocidade do seu código o empurra para algo mais rápido e confiável.
A tarefa de portar o framework GUI foi dolorosa, porque meu Unigui universal funcionava apenas em Python e era universal apenas em teoria. Uma API extremamente lacônica foi desenvolvida nele, que deveria ter sido preservada na versão Go. Além disso, a massa de automatismo para geração dos dados necessários não foi sujeita a portabilidade, uma vez que Go não tem controle de ordem de compilação, pré-processador, metaprogramação, o que garantiu uma experiência espartana complicada.
A primeira dificuldade que encontrei foi a impossibilidade de atribuir diretamente campos promouted (aninhados) em e apenas no inicializador de estrutura. Se a estrutura tiver uma estrutura aninhada nĂŁo nomeada, seus campos podem ser acessados ​​da raiz externa em qualquer lugar, exceto para o inicializador. Por causa disso, entre outras coisas, toda a ideia com campos aninhados como com a substituição da hierarquia tornou-se duvidosa e difĂcil de usar. Exigir que o usuário escreva inicializadores aninhados longos com tipos desnecessários seria o cĂşmulo da indecĂŞncia. Todas as estruturas da GUI tornaram-se completamente planas, independentes, embora haja uma hierarquia clara no 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% — . “ , !”
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')
Vou continuar a usar o Go? Onde vou sair do submarino ... e eu realmente quero que Crystal, Nim e outras linguagens simples e avançadas entrem em produção e dêem um pêndulo a Go. Até agora, infelizmente, não vejo alternativa no nicho de produção leve para desenvolvimento de software produtivo. Paz!
Links para os curiosos:
→ Go
→ Python