golang notes(2)

1, IDE (goland)

One may need 'jetbrains-agent-latest.zip': 

链接: https://pan.baidu.com/s/1Ze1TUhByRNX7BkAU8mNpIw 提取码: dx2k

 

2, defer

<Defer, Panic, and Recover> is an excellent doc:  https://www.cnblogs.com/kaid/p/9698477.html

 

3, Execise: Slices

package main

import (
	//"fmt"
	"golang.org/x/tour/pic"
)

func Pic(dx, dy int) [][]uint8 {
	var p [][]uint8 = make([][]uint8, dx)

	for i := 0; i < dx; i++ {
		p[i] = make([]uint8, dy)
		for j :=0; j < dy; j++ {
			p[i][j] = uint8(i*j)
		}
	}

	return p
}

func main() {
    //fmt.Println(Pic(16, 16))
    pic.Show(Pic)
}

The result output looks like:

IMAGE:iVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAIAAADTED8xAACAAElEQVR42uy9B3jUVfb/P7r21dVVdy1r74o1o
//omitted
348mQMB8NVXuvpRP57MgQD4+mtd/agfT+ZAAPz1r7r6UT+ezIEA+OYbXf2oH0/mQAD87W+6+lE/nsyBAPj2W139qB9P5kAAfPedrn7UjydzIADu3dPVj/rxZI7/HwAA//9vd4RSMvSyIgAAAABJRU5ErkJggg==

From here(https://*.com/questions/18553246/tour-golang-org36-the-functionality-implemented-by-pic-show), we can see the implementation of pic.Show:

Funny thing is it ends up printing the string "IMAGE:" followed by the base64 encoded string. Seems that play.golang.org parses the output converting this to an img tag. Try the following example: http://play.golang.org/p/RZPqp164eS 

 

Since the program needs import a 3rd-party package: golang.org/x/tour/pic, make sure to create a go.mod first:

(07:30 dabs@CNU1343VF8 slices) > ls
go.mod  slices  slices.go

(07:30 dabs@CNU1343VF8 slices) > cat go.mod
module slices

(07:30 dabs@CNU1343VF8 slices) > go build slices.go
go: finding module for package golang.org/x/tour/pic
go: found golang.org/x/tour/pic in golang.org/x/tour v0.0.0-20200508155540-0608babe047d

 

4, Execise: Maps

package  main

import (
	//"fmt"
	"strings"
	"golang.org/x/tour/wc"
)

func main() {
	wc.Test(WordCount)
}

func WordCount(s string) map[string]int {
	m := make(map[string]int)
	tokens := strings.Fields(s)
	for _, word := range tokens {
		v, ok := m[word]
		if ok {
			m[word] = v + 1
		} else {
			m[word] = 1
		}
	}

	return m
}

Output looks like:

PASS
 f("I am learning Go!") = 
  map[string]int{"Go!":1, "I":1, "am":1, "learning":1}
PASS
 f("The quick brown fox jumped over the lazy dog.") = 
  map[string]int{"The":1, "brown":1, "dog.":1, "fox":1, "jumped":1, "lazy":1, "over":1, "quick":1, "the":1}
PASS
 f("I ate a donut. Then I ate another donut.") = 
  map[string]int{"I":2, "Then":1, "a":1, "another":1, "ate":2, "donut.":2}
PASS
 f("A man a plan a canal panama.") = 
  map[string]int{"A":1, "a":2, "canal":1, "man":1, "panama.":1, "plan":1}

5, Execise: Fibonacci closures

package main

import (
	"fmt"
)

func main() {
	f := fibonacci()
	for i := 0; i < 10; i++ {
		fmt.Println(f())
	}
}

func fibonacci() func() int {
	var fibs []int
	return func() int {
		var v int
		i := len(fibs)
		switch {
		case i == 0 || i == 1:
			v = 1
			fibs = append(fibs, v)
		default:
			v = fibs[i-1] + fibs[i-2]
			fibs = append(fibs, v)
		}

		return v
	}
}

Output looks like:

1
1
2
3
5
8
13
21
34
55

 

上一篇:[Notes] 2020.6.11 每日一题


下一篇:Mac文件隐藏工具