• Go Walk教程 - 流程控制(for)


    Go的控制逻辑 for ,即可以用来循环读取数据,又可以当作 while 来控制逻辑,还能迭代操作。

    第一种,类似于C

    sum := 0;
    for index:=0; index < 10 ; index++ {
    sum += index
    }
    

    第二种,for 配合 range 可以用于读取 slice 和 map 的数据,与一些语言的foreach类似:

    for k,v:=range map {
    fmt.Println("map's key:",k)
    fmt.Println("map's val:",v)
    }
    

    第三种,控制逻辑,代替了while的功能

    sum := 1
    for sum < 1000 {
    sum += sum
    }
    

    还有一个就是死循环,

    i := 0
    for {
    if i > 10 {
    break
    }
    fmt.Println(i)
    i++
    }
    

    用 break 终止当前循环

    break 和 continue

     break 操作是跳出当前循环, continue 是跳过本次循环继续下一个循环。

    for i := 0 ; i < 10 ; i++ {
    if i > 5 {
    break ← 终止这个循环,只打印 0 到 5
    }
    println(i)
    }
    

    利子:

    // Copyright 2012 The Walk Authors. All rights reserved.
    // Use of this source code is governed by a BSD-style
    // license that can be found in the LICENSE file.
    
    package main
    
    import (
    	"fmt"
    	"log"
    	"os"
    	"strings"
    )
    
    import (
    	"github.com/lxn/walk"
    	. "github.com/lxn/walk/declarative"
    )
    
    func main() {
    	mw := &MyMainWindow{model: NewEnvModel()}
    
    	if _, err := (MainWindow{
    		AssignTo: &mw.MainWindow,
    		Title:    "Walk ListBox Example",
    		MinSize:  Size{240, 320},
    		Size:     Size{300, 400},
    		Layout:   VBox{MarginsZero: true},
    		Children: []Widget{
    			VSplitter{
    				Children: []Widget{
    					ListBox{AssignTo: &mw.lb,Model:mw.model,OnCurrentIndexChanged: mw.lb_CurrentIndexChanged,OnItemActivated:mw.lb_ItemActivated,},
    					TextEdit{AssignTo: &mw.te,ReadOnly: true,},
    				},
    			},
    		},
    	}.Run()); err != nil {
    		log.Fatal(err)
    	}
    }
    
    type MyMainWindow struct {
    	*walk.MainWindow
    	model *EnvModel
    	lb    *walk.ListBox
    	te    *walk.TextEdit
    }
    
    func (mw *MyMainWindow) lb_CurrentIndexChanged() {
    	i := mw.lb.CurrentIndex()
    	item := &mw.model.items[i]
    
    	mw.te.SetText(item.value)
    
    	fmt.Println("CurrentIndex: ", i)
    	fmt.Println("CurrentEnvVarName: ", item.name)
    }
    
    func (mw *MyMainWindow) lb_ItemActivated() {
    	value := mw.model.items[mw.lb.CurrentIndex()].value
    
    	walk.MsgBox(mw, "Value", value, walk.MsgBoxIconInformation)
    }
    
    type EnvItem struct {
    	name  string
    	value string
    }
    
    type EnvModel struct {
    	walk.ListModelBase
    	items []EnvItem
    }
    
    func NewEnvModel() *EnvModel {
    	env := os.Environ()
    
    	m := &EnvModel{items: make([]EnvItem, len(env))}
    
    	for i, e := range env {
    		j := strings.Index(e, "=")
    		if j == 0 {
    			continue
    		}
    		name := e[0:j]
    		value := strings.Replace(e[j+1:], ";", "
    ", -1)
    
    		m.items[i] = EnvItem{name, value}
    	}
    
    	return m
    }
    
    func (m *EnvModel) ItemCount() int {
    	return len(m.items)
    }
    
    func (m *EnvModel) Value(index int) interface{} {
    	return m.items[index].name
    }
    

    walk利子  

      

    ——

    布局:

    1、MainWindow

    Layout:  

    VBox{},垂直(vertical)

    HBox{},水平(horizontal)

    2、Splitter(分流器)

    VSplitter,垂直(vertical)

    HSplitter,水平(horizontal)

    注:Layout作为MainWindow的一个属性,而VSplitter、HSplitter作为一个独立控件

    3、Composite(组合),也是作为一个控件

    他有一个Layout属性,

    Layout:Grid{Row:3,Columns: 2}//三行二列的网状结构,如果是1行或1列可以省略Row或Columns

  • 相关阅读:
    select查询语句
    springboot的热部署
    springboot入门
    java学习之Semaphore信号量
    Java学习之自定义线程池
    java学习之生产者消费者模式
    sql通过其中一个字段计算另一个字段的值
    activeMq用mysql实现持久化方式
    idea创建Hystrix入门实例
    idea创建Eureka Server入门实例
  • 原文地址:https://www.cnblogs.com/gobuild/p/5986647.html
Copyright © 2020-2023  润新知