毕业设计一周一记05

go语言遍历数组

使用range

func (this *ShopController) Get() {
	this.TplName = "shop.html"
	var classfies []*models.Classify
	var err error
	classfies, err = models.GetClassifyAll(1)
	if err != nil {
		beego.Error(err)
	}
	for classItem := range classfies {
		classfies[classItem].Children, err = models.GetClassifyAll(classfies[classItem].Id)

		fmt.Println("显示分类:")
		fmt.Println(classItem)
	}
	this.Data["classfies"] = classfies
}

 range遍历slice切片时返回值为int型数值,而不是切片类型的变量

 

问题二:

分类的结构设计选用方案:

type Classify struct {
	Id       int
	Name     string
	Father   *Classify   `orm:"rel(fk)"`
	Children []*Classify `orm:"reverse(many)"`
}

 

自身和自身形成一对多关系映射,形成分类的多级分类

 

知识点:

chan通道

ch:=make(chan 数据类型)
ch <- 数值 //发送数值2给这个通道
x:=<-ch //从通道里读取值,并把读取的值赋值给x变量
<-ch //从通道里读取值,然后忽略

通道我们还可以使用内置的 close 函数关闭。
close(ch)

 

使用 make 函数初始化的时候,只有一个参数,其实 make 还可以有第二个参数,用于指定通道的大小。默认没有第二个参数的时候,通道的大小为0,这种通道也被成为 无缓冲通道
ch := make(chan int, 3)

 单向通道

定义单向通道也很简单,只需要在定义的时候,带上 <-


var send chan<- int //只能发送
var receive <-chan int //只能接收

 知识点二:

go语言类型断言:

value, ok := em.(T)

 

其中em为interface{}类型 T是要断言的类型。

类型断言表示的意义是:em(类型为interface{})的变量是否可以改变为,真实类型是否为T.

em代表要判断的变量 

T代表被判断的类型

value代表返回的值

ok代表em类型是否可以改变为T

 

知识点:

go语言net/http包中
type Response struct {
    Status     string // e.g. "200 OK"
    StatusCode int    // e.g. 200
    Proto      string // e.g. "HTTP/1.0"
    ProtoMajor int    // e.g. 1
    ProtoMinor int    // e.g. 0
    Header Header
    Body io.ReadCloser
    ContentLength int64
    TransferEncoding []string
    Close bool
    Trailer Header

    // 用于获取本相应所发送的请求
    // Request's Body is nil (having already been consumed).
    // 为客户机请求填充
    Request *Request


    TLS *tls.ConnectionState
}

 


知识点:

atomic

原子操作

posted @ 2017-11-22 18:58  木子金帛  阅读(246)  评论(0编辑  收藏  举报