来源:未知 时间:2019-11-11 10:49 作者:小飞侠 阅读:次
[导读] Go的控制逻辑 for ,即可以用来循环读取数据,又可以当作 while 来控制逻辑,还能迭代操作。 第一种,类似于C sum := 0; for index:=0; index 10 ; index++ { sum += index } 第二种,for 配合 range 可以用...
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:], ";", "\r\n", -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 |
自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习
京ICP备14009008号-1@版权所有www.zixuephp.com
网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com