mirror of
https://github.com/tinygo-org/tinygo.git
synced 2026-08-05 03:27:48 +00:00
examples: clean up examples and add blinky1 for Arduino
Arduino has trouble supporting anything that's not extremely simple, so add a simple blinky example for it. Also, it may be useful anyway.
This commit is contained in:
@@ -0,0 +1,154 @@
|
||||
package main
|
||||
|
||||
// This file is here to test features of the Go compiler.
|
||||
|
||||
import "unicode"
|
||||
|
||||
type Thing struct {
|
||||
name string
|
||||
}
|
||||
|
||||
func (t Thing) String() string {
|
||||
return t.name
|
||||
}
|
||||
|
||||
type Stringer interface {
|
||||
String() string
|
||||
}
|
||||
|
||||
const SIX = 6
|
||||
|
||||
var testmap = map[string]int{"data": 3}
|
||||
|
||||
func main() {
|
||||
println("Hello world from Go!")
|
||||
println("The answer is:", calculateAnswer())
|
||||
println("5 ** 2 =", square(5))
|
||||
println("3 + 12 =", add(3, 12))
|
||||
println("fib(11) =", fib(11))
|
||||
println("sumrange(100) =", sumrange(100))
|
||||
println("strlen foo:", strlen("foo"))
|
||||
|
||||
// map
|
||||
m := map[string]int{"answer": 42, "foo": 3}
|
||||
readMap(m, "answer")
|
||||
readMap(testmap, "data")
|
||||
|
||||
// slice
|
||||
foo := []int{1, 2, 4, 5}
|
||||
println("len/cap foo:", len(foo), cap(foo))
|
||||
println("foo[3]:", foo[3])
|
||||
println("sum foo:", sum(foo))
|
||||
|
||||
// interfaces, pointers
|
||||
thing := &Thing{"foo"}
|
||||
println("thing:", thing.String())
|
||||
printItf(5)
|
||||
printItf(byte('x'))
|
||||
printItf("foo")
|
||||
printItf(*thing)
|
||||
printItf(thing)
|
||||
printItf(Stringer(thing))
|
||||
s := Stringer(thing)
|
||||
println("Stringer.String():", s.String())
|
||||
|
||||
// unusual calls
|
||||
runFunc(hello, 5) // must be indirect to avoid obvious inlining
|
||||
testDefer()
|
||||
testBound(thing.String)
|
||||
func() {
|
||||
println("thing inside closure:", thing.String()) //, len(foo))
|
||||
}()
|
||||
runFunc(func(i int) {
|
||||
println("inside fp closure:", thing.String(), i)
|
||||
}, 3)
|
||||
|
||||
// test library functions
|
||||
println("lower to upper char:", 'h', "->", unicode.ToUpper('h'))
|
||||
}
|
||||
|
||||
func runFunc(f func(int), arg int) {
|
||||
f(arg)
|
||||
}
|
||||
|
||||
func testDefer() {
|
||||
i := 1
|
||||
defer deferred("...run as defer", i)
|
||||
i += 1
|
||||
defer deferred("...run as defer", i)
|
||||
println("deferring...")
|
||||
}
|
||||
|
||||
func deferred(msg string, i int) {
|
||||
println(msg, i)
|
||||
}
|
||||
|
||||
func testBound(f func() string) {
|
||||
println("bound method:", f())
|
||||
}
|
||||
|
||||
func readMap(m map[string]int, key string) {
|
||||
println("map length:", len(m))
|
||||
println("map read:", key, "=", m[key])
|
||||
}
|
||||
|
||||
func hello(n int) {
|
||||
println("hello from function pointer:", n)
|
||||
}
|
||||
|
||||
func strlen(s string) int {
|
||||
return len(s)
|
||||
}
|
||||
|
||||
func printItf(val interface{}) {
|
||||
switch val := val.(type) {
|
||||
case int:
|
||||
println("is int:", val)
|
||||
case byte:
|
||||
println("is byte:", val)
|
||||
case string:
|
||||
println("is string:", val)
|
||||
case Thing:
|
||||
println("is Thing:", val.String())
|
||||
case *Thing:
|
||||
println("is *Thing:", val.String())
|
||||
default:
|
||||
println("is ?")
|
||||
}
|
||||
}
|
||||
|
||||
func calculateAnswer() int {
|
||||
seven := 7
|
||||
return SIX * seven
|
||||
}
|
||||
|
||||
func square(n int) int {
|
||||
return n * n
|
||||
}
|
||||
|
||||
func add(a, b int) int {
|
||||
return a + b
|
||||
}
|
||||
|
||||
func fib(n int) int {
|
||||
if n <= 2 {
|
||||
return 1
|
||||
}
|
||||
return fib(n-1) + fib(n-2)
|
||||
}
|
||||
|
||||
func sumrange(n int) int {
|
||||
sum := 0
|
||||
for i := 1; i <= n; i++ {
|
||||
sum += i
|
||||
}
|
||||
return sum
|
||||
}
|
||||
|
||||
func sum(l []int) int {
|
||||
sum := 0
|
||||
for _, n := range l {
|
||||
sum += n
|
||||
}
|
||||
return sum
|
||||
}
|
||||
Reference in New Issue
Block a user