go range 源码

  • 2022-07-15
  • 浏览 (902)

golang range 代码

文件路径:/test/ken/range.go

// run

// Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Test 'for range' on arrays, slices, and maps.

package main

const size = 16

var a [size]byte
var p []byte
var m map[int]byte

func f(k int) byte {
	return byte(k * 10007 % size)
}

func init() {
	p = make([]byte, size)
	m = make(map[int]byte)
	for k := 0; k < size; k++ {
		v := f(k)
		a[k] = v
		p[k] = v
		m[k] = v
	}
}

func main() {
	var i int

	/*
	 * key only
	 */
	i = 0
	for k := range a {
		v := a[k]
		if v != f(k) {
			println("key array range", k, v, a[k])
			panic("fail")
		}
		i++
	}
	if i != size {
		println("key array size", i)
		panic("fail")
	}

	i = 0
	for k := range p {
		v := p[k]
		if v != f(k) {
			println("key pointer range", k, v, p[k])
			panic("fail")
		}
		i++
	}
	if i != size {
		println("key pointer size", i)
		panic("fail")
	}

	i = 0
	for k := range m {
		v := m[k]
		if v != f(k) {
			println("key map range", k, v, m[k])
			panic("fail")
		}
		i++
	}
	if i != size {
		println("key map size", i)
		panic("fail")
	}

	/*
	 * key,value
	 */
	i = 0
	for k, v := range a {
		if v != f(k) {
			println("key:value array range", k, v, a[k])
			panic("fail")
		}
		i++
	}
	if i != size {
		println("key:value array size", i)
		panic("fail")
	}

	i = 0
	for k, v := range p {
		if v != f(k) {
			println("key:value pointer range", k, v, p[k])
			panic("fail")
		}
		i++
	}
	if i != size {
		println("key:value pointer size", i)
		panic("fail")
	}

	i = 0
	for k, v := range m {
		if v != f(k) {
			println("key:value map range", k, v, m[k])
			panic("fail")
		}
		i++
	}
	if i != size {
		println("key:value map size", i)
		panic("fail")
	}
}

相关信息

go 源码目录

相关文章

go array 源码

go chan 源码

go chan1 源码

go complit 源码

go convert 源码

go cplx0 源码

go cplx1 源码

go cplx2 源码

go cplx3 源码

go cplx4 源码

0  赞