mirror of https://github.com/golang/go.git
parent
1265a0c22d
commit
f53db3eaa9
|
|
@ -1082,7 +1082,8 @@ Expression syntax is based on that of C but with fewer precedence levels.
|
||||||
Expression "." "(" Type ")" .
|
Expression "." "(" Type ")" .
|
||||||
|
|
||||||
Call = Expression "(" [ ExpressionList ] ")" .
|
Call = Expression "(" [ ExpressionList ] ")" .
|
||||||
Conversion = TypeName "(" [ ExpressionList ] ")" .
|
Conversion = TypeName "(" Expression ")" |
|
||||||
|
"convert" "(" Type "," Expression ")" .
|
||||||
Allocation = "new" "(" Type [ "," Expression ] ")" .
|
Allocation = "new" "(" Type [ "," Expression ] ")" .
|
||||||
|
|
||||||
binary_op = log_op | rel_op | add_op | mul_op .
|
binary_op = log_op | rel_op | add_op | mul_op .
|
||||||
|
|
@ -1211,6 +1212,37 @@ buffered channels, and maps.
|
||||||
|
|
||||||
TODO: argument order for dimensions in multidimensional arrays
|
TODO: argument order for dimensions in multidimensional arrays
|
||||||
|
|
||||||
|
|
||||||
|
Conversions
|
||||||
|
----
|
||||||
|
|
||||||
|
There are three ways to convert a value from one type to another.
|
||||||
|
|
||||||
|
The most general is a call to the intrinsic special function "convert"
|
||||||
|
with arguments the type name and the value to be converted.
|
||||||
|
|
||||||
|
var i int = convert(int, PI * 1000.0);
|
||||||
|
chars_as_ints := convert([]int, "now is the time");
|
||||||
|
|
||||||
|
If the destination type is a known type name, the conversion can be
|
||||||
|
rewritten to look syntactically like a call to a function with that
|
||||||
|
name.
|
||||||
|
|
||||||
|
i := int(PI * 1000.0);
|
||||||
|
s := AStructType(an_interface_variable);
|
||||||
|
|
||||||
|
A conversion can be written as a parenthesized type after a period.
|
||||||
|
Although intended for ease of conversion within a method call chain,
|
||||||
|
this form works in any expression context.
|
||||||
|
|
||||||
|
var s *AStructType = vec.index(2).(*AStructType);
|
||||||
|
fld := vec.index(2).(*AStructType).field;
|
||||||
|
f := 1000.(float);
|
||||||
|
|
||||||
|
TODO: are there parameters to any conversions? go.y has oexpr_list as the
|
||||||
|
contents of a TypeName() conversion; i expected expr instead and that's what
|
||||||
|
the others have.
|
||||||
|
|
||||||
The constant generator 'iota'
|
The constant generator 'iota'
|
||||||
----
|
----
|
||||||
|
|
||||||
|
|
@ -1733,4 +1765,5 @@ TODO
|
||||||
- TODO: type switch?
|
- TODO: type switch?
|
||||||
- TODO: words about slices
|
- TODO: words about slices
|
||||||
- TODO: I (gri) would like to say that sizeof(int) == sizeof(pointer), always.
|
- TODO: I (gri) would like to say that sizeof(int) == sizeof(pointer), always.
|
||||||
|
- TODO: when are two types equal? consider
|
||||||
|
func iterate(f *func(int, interface{}), arg interface{})
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue