blob: 95d225444fa1d8854e2b4fd128c291dfdccd8245 [file] [log] [blame]
Robert Griesemer18b829b2008-03-11 17:07:25 -07001// $G $F.go && $L $F.$A && ./$A.out
2
3// Copyright 2009 The Go Authors. All rights reserved.
4// Use of this source code is governed by a BSD-style
5// license that can be found in the LICENSE file.
6
Rob Pikebf14ef62008-07-07 10:03:10 -07007package main
Robert Griesemer18b829b2008-03-11 17:07:25 -07008
9const
10 a_const = 0
Russ Cox08ca30b2008-12-19 03:05:37 -080011
Robert Griesemer18b829b2008-03-11 17:07:25 -070012const (
13 pi = /* the usual */ 3.14159265358979323;
Robert Griesemere31ee762008-03-12 13:12:40 -070014 e = 2.718281828;
Robert Griesemerfcf5b152008-03-12 14:57:03 -070015 mask1 int = 1 << iota;
16 mask2 = 1 << iota;
17 mask3 = 1 << iota;
18 mask4 = 1 << iota;
Robert Griesemer18b829b2008-03-11 17:07:25 -070019)
20
Russ Cox839a6842009-01-20 14:40:40 -080021type (
Robert Griesemere31ee762008-03-12 13:12:40 -070022 Empty interface {};
Robert Griesemer18b829b2008-03-11 17:07:25 -070023 Point struct {
Robert Griesemere31ee762008-03-12 13:12:40 -070024 x, y int;
25 };
26 Point2 Point
27)
Robert Griesemerfcf5b152008-03-12 14:57:03 -070028
Rob Pikebf14ef62008-07-07 10:03:10 -070029func (p *Point) Initialize(x, y int) *Point {
Rob Pike27fb2ab2008-06-06 12:57:00 -070030 p.x, p.y = x, y;
Rob Pikebf14ef62008-07-07 10:03:10 -070031 return p;
Robert Griesemerfcf5b152008-03-12 14:57:03 -070032}
33
34func (p *Point) Distance() int {
Rob Pike27fb2ab2008-06-06 12:57:00 -070035 return p.x * p.x + p.y * p.y;
Robert Griesemerfcf5b152008-03-12 14:57:03 -070036}
37
Robert Griesemer18b829b2008-03-11 17:07:25 -070038var (
39 x1 int;
40 x2 int;
41 u, v, w float
42)
43
44func foo() {}
45
46func min(x, y int) int {
Rob Pike27fb2ab2008-06-06 12:57:00 -070047 if x < y { return x; }
48 return y;
Robert Griesemer18b829b2008-03-11 17:07:25 -070049}
50
51func swap(x, y int) (u, v int) {
52 u = y;
53 v = x;
Rob Pike27fb2ab2008-06-06 12:57:00 -070054 return;
Robert Griesemer18b829b2008-03-11 17:07:25 -070055}
56
57func control_structs() {
Russ Cox55645042009-01-06 15:19:02 -080058 var p *Point = new(Point).Initialize(2, 3);
Robert Griesemerfcf5b152008-03-12 14:57:03 -070059 i := p.Distance();
60 var f float = 0.3;
Robert Griesemere31ee762008-03-12 13:12:40 -070061 for {}
62 for {};
63 for j := 0; j < i; j++ {
64 if i == 0 {
65 } else i = 0;
Rob Pike27fb2ab2008-06-06 12:57:00 -070066 var x float;
Robert Griesemere31ee762008-03-12 13:12:40 -070067 }
Robert Griesemerfcf5b152008-03-12 14:57:03 -070068 foo: // a label
Robert Griesemer9bc7b082008-05-08 17:12:15 -070069 var j int;
70 switch y := 0; true {
Robert Griesemerfcf5b152008-03-12 14:57:03 -070071 case i < y:
Robert Griesemerd2490e72008-03-19 15:45:07 -070072 fallthrough;
Robert Griesemerfcf5b152008-03-12 14:57:03 -070073 case i < j:
74 case i == 0, i == 1, i == j:
75 i++; i++;
76 goto foo;
77 default:
78 i = -+-+i;
Rob Pike27fb2ab2008-06-06 12:57:00 -070079 break;
Robert Griesemer18b829b2008-03-11 17:07:25 -070080 }
81}
Rob Pikebf14ef62008-07-07 10:03:10 -070082
83func main() {
84}