Week 1 Days 1-4
This commit is contained in:
commit
477a79264b
30
.gitignore
vendored
Normal file
30
.gitignore
vendored
Normal file
@ -0,0 +1,30 @@
|
||||
*.swp
|
||||
*~
|
||||
converter/converter
|
||||
example-wordcount/example-wordcount
|
||||
go-cat/go-cat
|
||||
go-cp/go-cp
|
||||
.git/hooks/post-update.sample
|
||||
.git/hooks/pre-commit.sample
|
||||
.git/hooks/prepare-commit-msg.sample
|
||||
.git/hooks/applypatch-msg.sample
|
||||
.git/hooks/pre-receive.sample
|
||||
.git/hooks/pre-push.sample
|
||||
.git/hooks/pre-applypatch.sample
|
||||
.git/hooks/update.sample
|
||||
.git/hooks/commit-msg.sample
|
||||
.git/hooks/pre-rebase.sample
|
||||
fizzbuzz/fizzbuzz
|
||||
go-hello/go-hello
|
||||
example-file/example-file
|
||||
w1d1ex31/w1d1ex31
|
||||
sandbox/sandbox
|
||||
example-center/example-center
|
||||
shape/shape
|
||||
example-clumps/example-clumps
|
||||
file-wordcount/example-wordcount
|
||||
file-wordcount/file-wordcount
|
||||
avatar/avatar
|
||||
w1d2ex1/w1d2ex1
|
||||
swap/swap
|
||||
w1d1ex2/w1d1ex2
|
60
avatar/main.go
Normal file
60
avatar/main.go
Normal file
@ -0,0 +1,60 @@
|
||||
package main
|
||||
|
||||
import "fmt"
|
||||
import "log"
|
||||
import "os"
|
||||
import "strings"
|
||||
|
||||
var users = map[string]map[string]string{
|
||||
"meutel": map[string]string{
|
||||
"avatar_url": "https://git.meutel.net/avatars/1",
|
||||
"full_name": "Meutel",
|
||||
},
|
||||
"ARCHIVES": map[string]string{
|
||||
"avatar_url": "https://git.meutel.net/avatars/2",
|
||||
},
|
||||
}
|
||||
|
||||
const defaultAvatar = "https://git.meutel.net/img/avatar_default.png"
|
||||
|
||||
func avatarUrl(username string) string {
|
||||
if url, ok := users[username]["avatar_url"]; ok {
|
||||
return url
|
||||
} else {
|
||||
return defaultAvatar
|
||||
}
|
||||
}
|
||||
func fullName(username string) (string, bool) {
|
||||
if user, ok := users[username]; ok {
|
||||
if name, ok2 := user["full_name"]; ok2 {
|
||||
return name, true
|
||||
} else {
|
||||
return username, true
|
||||
}
|
||||
} else {
|
||||
return "Unknown", false
|
||||
}
|
||||
}
|
||||
|
||||
func main() {
|
||||
if len(os.Args) < 2 {
|
||||
log.Fatalln("Needs user name argument")
|
||||
}
|
||||
name := os.Args[1]
|
||||
// avatarId := 1
|
||||
html := `<!DOCTYPE html>
|
||||
<html>
|
||||
<head><title>Profile</title></head>
|
||||
<body>
|
||||
<h1>{{ name }}</h1>
|
||||
<img src="{{ avatarUrl }}"/>
|
||||
</body>
|
||||
</html>`
|
||||
full, exists := fullName(name)
|
||||
if !exists {
|
||||
fmt.Fprintln(os.Stderr, "Unknown user "+name)
|
||||
}
|
||||
html = strings.Replace(html, "{{ name }}", full, 1)
|
||||
html = strings.Replace(html, "{{ avatarUrl }}", avatarUrl(name), 1)
|
||||
fmt.Println(html)
|
||||
}
|
76
converter/main.go
Normal file
76
converter/main.go
Normal file
@ -0,0 +1,76 @@
|
||||
package main
|
||||
|
||||
import "fmt"
|
||||
import "log"
|
||||
import "os"
|
||||
import "strconv"
|
||||
import "strings"
|
||||
|
||||
const (
|
||||
markerMiles = "mi"
|
||||
markerKm = "km"
|
||||
markerFeet = "ft"
|
||||
markerMeter = "m"
|
||||
MilesToKm float64 = 1.609344
|
||||
FeetsToMeters float64 = 3.28084
|
||||
)
|
||||
|
||||
var (
|
||||
inUnit string
|
||||
inVal float64
|
||||
asMeter float64
|
||||
err error
|
||||
convVal float64
|
||||
)
|
||||
|
||||
func main() {
|
||||
if len(os.Args) < 3 {
|
||||
log.Fatalln("Needs 2 arguments")
|
||||
}
|
||||
input := os.Args[1]
|
||||
convTo := os.Args[2]
|
||||
|
||||
switch {
|
||||
case strings.HasSuffix(input, markerKm):
|
||||
inUnit = markerKm
|
||||
case strings.HasSuffix(input, markerFeet):
|
||||
inUnit = markerFeet
|
||||
case strings.HasSuffix(input, markerMeter):
|
||||
inUnit = markerMeter
|
||||
case strings.HasSuffix(input, markerMiles):
|
||||
inUnit = markerMiles
|
||||
default:
|
||||
log.Fatalln("Invalid input:", input)
|
||||
}
|
||||
inVal, err = strconv.ParseFloat(input[:len(input)-len(inUnit)], 64)
|
||||
if err != nil {
|
||||
log.Fatalln("Invalid input number", err)
|
||||
}
|
||||
|
||||
switch inUnit {
|
||||
case markerMiles:
|
||||
asMeter = inVal * MilesToKm * 1000
|
||||
case markerKm:
|
||||
asMeter = inVal * 1000
|
||||
case markerFeet:
|
||||
asMeter = inVal * FeetsToMeters
|
||||
case markerMeter:
|
||||
asMeter = inVal
|
||||
}
|
||||
|
||||
// fmt.Println(inVal, inUnit, asMeter, convTo)
|
||||
|
||||
switch convTo {
|
||||
case markerMiles:
|
||||
convVal = asMeter / (MilesToKm * 1000)
|
||||
case markerKm:
|
||||
convVal = asMeter / 1000
|
||||
case markerFeet:
|
||||
convVal = asMeter / FeetsToMeters
|
||||
case markerMeter:
|
||||
convVal = asMeter
|
||||
default:
|
||||
log.Fatalln("Invalid unit: " + convTo)
|
||||
}
|
||||
fmt.Printf("%.2f%s\n", convVal, convTo)
|
||||
}
|
46
example-center/main.go
Normal file
46
example-center/main.go
Normal file
@ -0,0 +1,46 @@
|
||||
package main
|
||||
|
||||
import "fmt"
|
||||
|
||||
func average(nums []float64) float64 {
|
||||
if len(nums) == 0 {
|
||||
return 0
|
||||
}
|
||||
var sum float64
|
||||
for _, i := range nums {
|
||||
sum += i
|
||||
}
|
||||
return sum / float64(len(nums))
|
||||
}
|
||||
|
||||
func filter(nums []float64, comp func(float64, float64) bool) []float64 {
|
||||
if len(nums) == 0 {
|
||||
return make([]float64, 0)
|
||||
}
|
||||
val, idxVal := nums[0], 0
|
||||
for idx, num := range nums {
|
||||
if comp(num, val) {
|
||||
val, idxVal = num, idx
|
||||
}
|
||||
}
|
||||
nums = append(nums[:idxVal], nums[idxVal+1:]...)
|
||||
return nums
|
||||
}
|
||||
|
||||
func centeredAverage(nums ...float64) float64 {
|
||||
nums = filter(nums, func(a float64, b float64) bool {
|
||||
return a > b
|
||||
})
|
||||
nums = filter(nums, func(a float64, b float64) bool {
|
||||
return a < b
|
||||
})
|
||||
return average(nums)
|
||||
}
|
||||
|
||||
func main() {
|
||||
fmt.Println(centeredAverage())
|
||||
fmt.Println(centeredAverage(1, 2, 3, 4, 100))
|
||||
fmt.Println(centeredAverage(1))
|
||||
fmt.Println(centeredAverage(1, 1))
|
||||
fmt.Println(centeredAverage(1, 1, 1))
|
||||
}
|
26
example-clumps/main.go
Normal file
26
example-clumps/main.go
Normal file
@ -0,0 +1,26 @@
|
||||
package main
|
||||
|
||||
import "fmt"
|
||||
|
||||
func countClumps(sl []int) uint {
|
||||
var count uint
|
||||
var prevs [2]int
|
||||
for idx, val := range sl {
|
||||
if (idx == 1 && val == prevs[1]) || (idx > 1 && val == prevs[1] && prevs[0] != prevs[1]) {
|
||||
count++
|
||||
}
|
||||
prevs[0] = prevs[1]
|
||||
prevs[1] = val
|
||||
}
|
||||
return count
|
||||
}
|
||||
|
||||
func main() {
|
||||
fmt.Println(countClumps([]int{2, 2, 2, 3, 4, 4}))
|
||||
fmt.Println(countClumps([]int{1, 1, 2, 1, 1}))
|
||||
fmt.Println(countClumps([]int{1, 1, 1, 1, 1}))
|
||||
fmt.Println(countClumps([]int{0, 1, 1, 1, 1}))
|
||||
fmt.Println(countClumps([]int{0, 0}))
|
||||
fmt.Println(countClumps([]int{0}))
|
||||
fmt.Println(countClumps([]int{1, 1, 2, 3, 1, 4, 1, 1}))
|
||||
}
|
32
example-file/main.go
Normal file
32
example-file/main.go
Normal file
@ -0,0 +1,32 @@
|
||||
package main
|
||||
|
||||
import "fmt"
|
||||
import "io"
|
||||
import "io/ioutil"
|
||||
import "log"
|
||||
import "os"
|
||||
import "strings"
|
||||
|
||||
var err *error
|
||||
|
||||
func readMe(r io.Reader) {
|
||||
content, err := ioutil.ReadAll(r)
|
||||
if err != nil {
|
||||
log.Fatalln(err)
|
||||
}
|
||||
fmt.Printf("%s\n", content)
|
||||
}
|
||||
|
||||
func main() {
|
||||
f, err := os.Open("/home/meutel/tmp/hello.txt")
|
||||
if err != nil {
|
||||
log.Fatalln(err)
|
||||
}
|
||||
defer f.Close()
|
||||
fmt.Println(f.Name())
|
||||
fmt.Println(f.Stat())
|
||||
|
||||
readMe(f)
|
||||
strreader := strings.NewReader("c'est cool")
|
||||
readMe(strreader)
|
||||
}
|
20
example-wordcount/main.go
Normal file
20
example-wordcount/main.go
Normal file
@ -0,0 +1,20 @@
|
||||
package main
|
||||
|
||||
import "fmt"
|
||||
import "os"
|
||||
import "strings"
|
||||
|
||||
func wc(text string) map[string]uint {
|
||||
words := make(map[string]uint)
|
||||
for _, word := range strings.Fields(text) {
|
||||
words[word]++
|
||||
}
|
||||
return words
|
||||
}
|
||||
|
||||
func main() {
|
||||
input := strings.Join(os.Args[1:], " ")
|
||||
fmt.Println(input)
|
||||
fmt.Println(strings.Repeat("-", 80))
|
||||
fmt.Println(wc(input))
|
||||
}
|
35
file-wordcount/main.go
Normal file
35
file-wordcount/main.go
Normal file
@ -0,0 +1,35 @@
|
||||
package main
|
||||
|
||||
import "fmt"
|
||||
import "io"
|
||||
import "io/ioutil"
|
||||
import "log"
|
||||
import "os"
|
||||
import "strings"
|
||||
|
||||
func wc(r io.Reader) map[string]uint {
|
||||
words := make(map[string]uint)
|
||||
if text, err := ioutil.ReadAll(r); err != nil {
|
||||
log.Fatalln(err)
|
||||
} else {
|
||||
for _, word := range strings.Fields(string(text)) {
|
||||
words[word]++
|
||||
}
|
||||
}
|
||||
return words
|
||||
}
|
||||
|
||||
func openFile(path *string) *os.File {
|
||||
f, err := os.Open(os.Args[1])
|
||||
if err != nil {
|
||||
log.Fatalln(err)
|
||||
}
|
||||
return f
|
||||
}
|
||||
func main() {
|
||||
if len(os.Args) <= 1 {
|
||||
log.Fatalln("Missing file")
|
||||
}
|
||||
f := openFile(&os.Args[1])
|
||||
fmt.Println(wc(f))
|
||||
}
|
19
fizzbuzz/main.go
Normal file
19
fizzbuzz/main.go
Normal file
@ -0,0 +1,19 @@
|
||||
package main
|
||||
|
||||
import "fmt"
|
||||
|
||||
func main() {
|
||||
for i := 1; i <= 100; i++ {
|
||||
mod3 := i % 3
|
||||
mod5 := i % 5
|
||||
if mod3+mod5 == 0 {
|
||||
fmt.Println("FizzBuzz")
|
||||
} else if mod3 == 0 {
|
||||
fmt.Println("Fizz")
|
||||
} else if mod5 == 0 {
|
||||
fmt.Println("Buzz")
|
||||
} else {
|
||||
fmt.Println(i)
|
||||
}
|
||||
}
|
||||
}
|
46
go-cat/main.go
Normal file
46
go-cat/main.go
Normal file
@ -0,0 +1,46 @@
|
||||
package main
|
||||
|
||||
import "fmt"
|
||||
import "io"
|
||||
import "io/ioutil"
|
||||
import "log"
|
||||
import "os"
|
||||
import "strings"
|
||||
|
||||
var err error
|
||||
var reader io.Reader
|
||||
|
||||
func openFile(path *string) *os.File {
|
||||
f, err := os.Open(os.Args[1])
|
||||
if err != nil {
|
||||
log.Fatalln(err)
|
||||
}
|
||||
return f
|
||||
}
|
||||
|
||||
func readMe(r *io.Reader) {
|
||||
if content, err := ioutil.ReadAll(*r); err != nil {
|
||||
log.Fatalln(err)
|
||||
} else {
|
||||
fmt.Printf("%s", content)
|
||||
}
|
||||
}
|
||||
|
||||
func main() {
|
||||
if len(os.Args) <= 1 {
|
||||
var content string
|
||||
if _, err := fmt.Scanln(&content); err != nil {
|
||||
log.Fatalln(err)
|
||||
}
|
||||
reader = strings.NewReader(content)
|
||||
} else {
|
||||
readers := []io.Reader{}
|
||||
for i := 1; i < len(os.Args); i++ {
|
||||
f := openFile(&os.Args[i])
|
||||
defer f.Close()
|
||||
readers = append(readers, f)
|
||||
}
|
||||
reader = io.MultiReader(readers...)
|
||||
}
|
||||
readMe(&reader)
|
||||
}
|
51
go-cp/main.go
Normal file
51
go-cp/main.go
Normal file
@ -0,0 +1,51 @@
|
||||
package main
|
||||
|
||||
import "fmt"
|
||||
import "os"
|
||||
import "log"
|
||||
import "io"
|
||||
|
||||
var err error
|
||||
var from, to *os.File
|
||||
|
||||
const bufSize = 64 * 1024
|
||||
|
||||
func copyFile(src io.Reader, dst io.Writer) error {
|
||||
buf := make([]byte, bufSize)
|
||||
for {
|
||||
n, er := src.Read(buf)
|
||||
if er != nil || n == 0 {
|
||||
if er != nil && er != io.EOF {
|
||||
return fmt.Errorf("Read error: %v:", er)
|
||||
}
|
||||
break
|
||||
}
|
||||
_, wer := dst.Write(buf[:n])
|
||||
if wer != nil {
|
||||
return fmt.Errorf("Write error: %v:", wer)
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func main() {
|
||||
if len(os.Args) != 3 {
|
||||
log.Fatalln("Usage: go-cp from to")
|
||||
}
|
||||
from, err = os.Open(os.Args[1])
|
||||
if err != nil {
|
||||
log.Fatalln("Error open", err)
|
||||
}
|
||||
defer from.Close()
|
||||
|
||||
to, err = os.Create(os.Args[2])
|
||||
if err != nil {
|
||||
log.Fatalln("Error open", err)
|
||||
}
|
||||
defer to.Close()
|
||||
// err = copyFile(from, to)
|
||||
_, err = io.Copy(from, to)
|
||||
if err != nil {
|
||||
log.Fatalln(err)
|
||||
}
|
||||
}
|
12
go-hello/half.txt
Normal file
12
go-hello/half.txt
Normal file
@ -0,0 +1,12 @@
|
||||
package main
|
||||
|
||||
import "fmt"
|
||||
|
||||
func half(i int) (int, bool) {
|
||||
return i / 2, i%2 == 0
|
||||
}
|
||||
|
||||
func main() {
|
||||
fmt.Println(half(1))
|
||||
fmt.Println(half(2))
|
||||
}
|
12
go-hello/main.go
Normal file
12
go-hello/main.go
Normal file
@ -0,0 +1,12 @@
|
||||
package main
|
||||
|
||||
import "fmt"
|
||||
|
||||
func visit(nums []int, callback func(...interface{}) (int, error)) {
|
||||
for _, n := range nums {
|
||||
callback(n)
|
||||
}
|
||||
}
|
||||
func main() {
|
||||
visit([]int{1, 2, 3, 4, 5}, fmt.Println)
|
||||
}
|
16
go-hello/max.txt
Normal file
16
go-hello/max.txt
Normal file
@ -0,0 +1,16 @@
|
||||
package main
|
||||
|
||||
import "fmt"
|
||||
|
||||
func main() {
|
||||
Max := func(nums ...int) int {
|
||||
max := -1 << 63
|
||||
for _, i := range nums {
|
||||
if max < i {
|
||||
max = i
|
||||
}
|
||||
}
|
||||
return max
|
||||
}
|
||||
fmt.Println(Max(3, 2, 1))
|
||||
}
|
21
go-hello/min_slice.txt
Normal file
21
go-hello/min_slice.txt
Normal file
@ -0,0 +1,21 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
)
|
||||
|
||||
func main() {
|
||||
x := []int{
|
||||
48, 96, 86, 68,
|
||||
57, 82, 63, 70,
|
||||
37, 34, 83, 27,
|
||||
19, 97, 9, 17,
|
||||
}
|
||||
min := x[0]
|
||||
for _, i := range x {
|
||||
if i < min {
|
||||
min = i
|
||||
}
|
||||
}
|
||||
fmt.Println(min)
|
||||
}
|
32
go-hello/old
Normal file
32
go-hello/old
Normal file
@ -0,0 +1,32 @@
|
||||
// doc package
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strconv"
|
||||
"strings"
|
||||
)
|
||||
|
||||
const unicode = "songe d'une nuit d'été"
|
||||
|
||||
func main() {
|
||||
fmt.Println(strings.ToTitle(unicode))
|
||||
fmt.Println(strings.ToUpper(unicode))
|
||||
fmt.Println(strings.Replace(unicode, "été", "hiver", -1))
|
||||
|
||||
test := ""
|
||||
//test := "0777"
|
||||
fmt.Println(strconv.ParseInt(test, 8, 0))
|
||||
|
||||
fmt.Println(strconv.Quote(unicode))
|
||||
|
||||
sl := []int{1, 2, 3}
|
||||
sl2 := append(sl, 4, 5)
|
||||
sl[0] = 9
|
||||
fmt.Println(sl)
|
||||
fmt.Println(sl2)
|
||||
|
||||
sl3 := make([]int, 2)
|
||||
copy(sl3, sl2[2:])
|
||||
fmt.Println(sl3)
|
||||
}
|
73
shape/main.go
Normal file
73
shape/main.go
Normal file
@ -0,0 +1,73 @@
|
||||
package main
|
||||
|
||||
import "fmt"
|
||||
import "math"
|
||||
|
||||
type Rectangle struct {
|
||||
x1, y1, x2, y2 float64
|
||||
}
|
||||
|
||||
func (r *Rectangle) length() float64 {
|
||||
return distance(r.x1, r.y1, r.x1, r.y2)
|
||||
}
|
||||
func (r *Rectangle) width() float64 {
|
||||
return distance(r.x1, r.y1, r.x2, r.y1)
|
||||
}
|
||||
|
||||
func (r *Rectangle) area() float64 {
|
||||
return r.length() * r.width()
|
||||
}
|
||||
func (r *Rectangle) perimeter() float64 {
|
||||
return 2*r.length() + 2*r.width()
|
||||
}
|
||||
|
||||
type Circle struct {
|
||||
x float64
|
||||
y float64
|
||||
r float64
|
||||
}
|
||||
|
||||
func (c *Circle) area() float64 {
|
||||
return math.Pi * c.r * c.r
|
||||
}
|
||||
func (c *Circle) perimeter() float64 {
|
||||
return 2 * math.Pi * c.r
|
||||
}
|
||||
|
||||
type Shape interface {
|
||||
area() float64
|
||||
perimeter() float64
|
||||
}
|
||||
|
||||
type MultiShape struct {
|
||||
shapes []Shape
|
||||
}
|
||||
|
||||
func (m *MultiShape) area() float64 {
|
||||
var area float64
|
||||
for _, s := range m.shapes {
|
||||
area += s.area()
|
||||
}
|
||||
return area
|
||||
}
|
||||
func (m *MultiShape) perimeter() float64 {
|
||||
var perimeter float64
|
||||
for _, s := range m.shapes {
|
||||
perimeter += s.perimeter()
|
||||
}
|
||||
return perimeter
|
||||
}
|
||||
|
||||
func distance(x1, y1, x2, y2 float64) float64 {
|
||||
a := x2 - x1
|
||||
b := y2 - y1
|
||||
return math.Sqrt(a*a + b*b)
|
||||
}
|
||||
|
||||
func main() {
|
||||
c := &Circle{x: 1, y: 1, r: 4}
|
||||
r := &Rectangle{x2: 4, y2: 10}
|
||||
ms := MultiShape{[]Shape{c, r}}
|
||||
fmt.Println("Area", ms.area())
|
||||
fmt.Println("Perimeter", ms.perimeter())
|
||||
}
|
49
swap/main.go
Normal file
49
swap/main.go
Normal file
@ -0,0 +1,49 @@
|
||||
package main
|
||||
|
||||
import "fmt"
|
||||
|
||||
func swap(x, y *int) {
|
||||
*x, *y = *y, *x
|
||||
/*
|
||||
tmp := *x
|
||||
*x = *y
|
||||
*y = tmp
|
||||
*/
|
||||
}
|
||||
|
||||
func rotate(ptrs ...*int) {
|
||||
if len(ptrs) == 0 {
|
||||
return
|
||||
}
|
||||
tmp := *ptrs[0]
|
||||
for i := 1; i < len(ptrs); i++ {
|
||||
*ptrs[i-1] = *ptrs[i]
|
||||
}
|
||||
*ptrs[len(ptrs)-1] = tmp
|
||||
}
|
||||
|
||||
func main() {
|
||||
x := 1
|
||||
y := 2
|
||||
swap(&x, &y)
|
||||
fmt.Println("x =", x)
|
||||
fmt.Println("y =", y)
|
||||
|
||||
a := 1
|
||||
b := 2
|
||||
c := 3
|
||||
rotate(&a, &b, &c)
|
||||
fmt.Println("a =", a)
|
||||
fmt.Println("b =", b)
|
||||
fmt.Println("c =", c)
|
||||
|
||||
rotate(&a, &b, &c)
|
||||
fmt.Println("a =", a)
|
||||
fmt.Println("b =", b)
|
||||
fmt.Println("c =", c)
|
||||
|
||||
rotate(&a, &b, &c)
|
||||
fmt.Println("a =", a)
|
||||
fmt.Println("b =", b)
|
||||
fmt.Println("c =", c)
|
||||
}
|
12
w1d1ex2/main.go
Normal file
12
w1d1ex2/main.go
Normal file
@ -0,0 +1,12 @@
|
||||
package main
|
||||
|
||||
import "fmt"
|
||||
|
||||
var (
|
||||
input string
|
||||
)
|
||||
|
||||
func main() {
|
||||
fmt.Scanf("%s", &input)
|
||||
fmt.Println("Hello ", input)
|
||||
}
|
14
w1d1ex31/main.go
Normal file
14
w1d1ex31/main.go
Normal file
@ -0,0 +1,14 @@
|
||||
package main
|
||||
|
||||
import "fmt"
|
||||
|
||||
var input float32
|
||||
|
||||
const MilesToKm = 1.6
|
||||
|
||||
func main() {
|
||||
fmt.Println("Enter miles:")
|
||||
fmt.Scanf("%f", &input)
|
||||
fmt.Println(input, " miles is about ", input*MilesToKm, " km")
|
||||
|
||||
}
|
32
w1d2ex1/main.go
Normal file
32
w1d2ex1/main.go
Normal file
@ -0,0 +1,32 @@
|
||||
package main
|
||||
|
||||
import "fmt"
|
||||
import "os"
|
||||
import "strconv"
|
||||
|
||||
var miles float64
|
||||
|
||||
const (
|
||||
MilesToKm float64 = 1.609344
|
||||
width = 20
|
||||
titleMiles = "| Miles: "
|
||||
titleKm = "| Km: "
|
||||
)
|
||||
|
||||
func main() {
|
||||
if miles, err := strconv.ParseFloat(os.Args[1], 64); err == nil {
|
||||
fmtMiles := strconv.FormatFloat(miles, 'f', 2, 64)
|
||||
fmtKm := strconv.FormatFloat(miles*MilesToKm, 'f', 2, 64)
|
||||
|
||||
fmt.Println("<!DOCTYPE html>")
|
||||
fmt.Println("<html>")
|
||||
fmt.Println(" <head><title>Miles to Kilometers</title></head>")
|
||||
fmt.Println(" <body>")
|
||||
fmt.Println(" <p>Miles:", fmtMiles, "</p>")
|
||||
fmt.Println(" <p>Kilometers:", fmtKm, "</p>")
|
||||
fmt.Println(" </body>")
|
||||
fmt.Println("</html>")
|
||||
} else {
|
||||
panic(err)
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user