mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
print array (not just *array) using %v
TBR=rsc DELTA=34 (33 added, 0 deleted, 1 changed) OCL=21718 CL=21718
This commit is contained in:
parent
eb32228627
commit
b0d62676d2
2 changed files with 34 additions and 1 deletions
|
|
@ -232,3 +232,17 @@ export func TestStructPrinter(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export func TestArrayPrinter(t *testing.T) {
|
||||||
|
a := []int{1, 2, 3, 4, 5};
|
||||||
|
want := "[1 2 3 4 5]";
|
||||||
|
out := fmt.sprintf("%v", a);
|
||||||
|
if out != want {
|
||||||
|
t.Errorf("sprintf(%%v, array) = %q, want %q", out, want);
|
||||||
|
}
|
||||||
|
want = "&" + want;
|
||||||
|
out = fmt.sprintf("%v", &a);
|
||||||
|
if out != want {
|
||||||
|
t.Errorf("sprintf(%%v, &array) = %q, want %q", out, want);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -305,6 +305,14 @@ func getArrayPtr(v reflect.Value) (val reflect.ArrayValue, ok bool) {
|
||||||
return nil, false;
|
return nil, false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func getArray(v reflect.Value) (val reflect.ArrayValue, ok bool) {
|
||||||
|
switch v.Kind() {
|
||||||
|
case reflect.ArrayKind:
|
||||||
|
return v.(reflect.ArrayValue), true;
|
||||||
|
}
|
||||||
|
return nil, false;
|
||||||
|
}
|
||||||
|
|
||||||
// Convert ASCII to integer. n is 0 (and got is false) if no number present.
|
// Convert ASCII to integer. n is 0 (and got is false) if no number present.
|
||||||
|
|
||||||
func parsenum(s string, start, end int) (n int, got bool, newi int) {
|
func parsenum(s string, start, end int) (n int, got bool, newi int) {
|
||||||
|
|
@ -365,7 +373,7 @@ func (p *P) printField(field reflect.Value) (was_string bool) {
|
||||||
if v, ok := getPtr(field); v == 0 {
|
if v, ok := getPtr(field); v == 0 {
|
||||||
s = "<nil>"
|
s = "<nil>"
|
||||||
} else {
|
} else {
|
||||||
// pointer to array?
|
// pointer to array? (TODO(r): holdover; delete?)
|
||||||
if a, ok := getArrayPtr(field); ok {
|
if a, ok := getArrayPtr(field); ok {
|
||||||
p.addstr("&[");
|
p.addstr("&[");
|
||||||
for i := 0; i < a.Len(); i++ {
|
for i := 0; i < a.Len(); i++ {
|
||||||
|
|
@ -380,6 +388,17 @@ func (p *P) printField(field reflect.Value) (was_string bool) {
|
||||||
s = p.fmt.uX64(uint64(v)).str();
|
s = p.fmt.uX64(uint64(v)).str();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
case reflect.ArrayKind:
|
||||||
|
if a, ok := getArray(field); ok {
|
||||||
|
p.addstr("[");
|
||||||
|
for i := 0; i < a.Len(); i++ {
|
||||||
|
if i > 0 {
|
||||||
|
p.addstr(" ");
|
||||||
|
}
|
||||||
|
p.printField(a.Elem(i));
|
||||||
|
}
|
||||||
|
p.addstr("]");
|
||||||
|
}
|
||||||
case reflect.StructKind:
|
case reflect.StructKind:
|
||||||
p.add('{');
|
p.add('{');
|
||||||
v := field.(reflect.StructValue);
|
v := field.(reflect.StructValue);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue