SpringBoot 在线协同办公小程序开发 全栈式项目实战

180 阅读4分钟

download:SpringBoot 在线协同办公小程序开发 全栈式项目实战

未来,在线协同办公将成为一种常态化的工作方式。本课程将采用最流行的前后端分离架构设计,应用 SpringBoot+uniapp 技术栈开发一款在线协同办公的小程序。让你掌握未来趋势型业务 + 前后端综合技术栈,带你实现全技术栈的综合提升。

**

技术要求

1.HTML / CSS 基础 2.JS 交互知识 3.基本的 Vue 知识 4.JavaWeb 相关知识

**

**

环境参数

SpringBoot 2.3、uni-app2.9 开发工具:IDEA、HBuilderX

      1. package main

      2. import (

      3. // "fmt"

      4. "os"

      5. "flag" // command line option parser

      6. )

      7. var nFlag = flag.Bool("n", true, "末尾能否换行")

      8. func main() {

      9. flag.Parse(); // 解析命令行选项

      10. s := "";

      11. for i := 0; i < flag.NArg(); i++ {

      12. if i > 0 {

      13. s += " " // 单词之间用空格距离开来

      14. }

      15. s += flag.Arg(i)

      16. }

      17. if *nFlag { // 换行与否

      18. s += "\n"

      19. }

      20. // fmt.Println(flag.Args());

      21. os.Stdout.WriteString(s);

      22. }

      23. // results in cmd:

      24. > go run hello.go -n=false good morning

      25. good morning

      26. > go run hello.go -n=true good morning

      27. good moring

      28. > go run hello.go good morning

      29. good moring

      30. >

      这个是从上面的那个——如何处置命令行参数——问题衍生出来的程序。 main 函数不像 c/c++/java 等带有参数能够处置命令行参数,go 有本人的办法。

      flag 包担任处置命令行参数。这里完成的一个相似 echo 的命令,将命令行参数一个一个输出,关于最后能否换行,我们来个选项 -n=false 或是 -n=true 来决议;默许带有换行。

      flag.Bool 就是获取这个 -n 选项,true/false ?运用参数前运用 flag.Parse 获取这些选项和参数,然后能够运用 flag.Args() 这个片段来处置参数,或是运用 flag.NArg() 和 flag.Arg(i) —— 一个是长度,一个是详细的值,来停止处置。

      这里运用的是 os 包的 Stdout.WriteString 停止的输出,也能够运用 fmt 包中的函数停止输出。

    1. 斐波拉契闭包

      1. package main

      2. // fib returns a function that returns

      3. // successive Fibonacci numbers.

      4. func fib() func() int {

      5. a, b := 0, 1

      6. return func() int {

      7. a, b = b, a+b

      8. return a

      9. }

      10. }

      11. func main() {

      12. f := fib()

      13. // Function calls are evaluated left-to-right.

      14. println(f(), f(), f(), f(), f())

      15. }

      斐波拉契跟闭包其实嚒神马关系!斐波拉契数列是灰常知名的数列:1、1、2、3、5、8、13、...;从第三个数开端每个数均是前面两个数的和,而前两个数都是 1。习气 c、c++ 等言语的话,e 们普通会用个循环来迭代求;go 当然也能够,不过这里运用的闭包的技术,鄙人赶脚是很巧妙的用法。

      fib 是个函数,它有两个部分变量 a、b,返回值是个函数,这个函数运用着 a、b;返回值是函数如今很多言语都支持或是准备支持了,javascript、F#等等。按 c 言语的传统,函数调用完,部分(自动)变量 a、b 销毁,不能运用;但是在 go 中当 fib 返回的函数中不断在运用 fib 中的两个部分/暂时变量 —— 这实践就是闭包,然后会发作神马状况呢?会将这两个变量的生存期延长,也就是说只需返回的函数还有用,这两个变量就在运用;所以,第一次调用 f、第二次调用 f 都在运用这两个变量,这两个变量的值也不断在变化,每调用一次 f ,f 返回的 a 就是一个斐波拉契数,调用几次就返回第几个 Fibonacci 数。

      程序逻辑就是上面所说,不过这个例子还阐明 go 的函数声明的问题,func 标明是个函数,然后写函数名,加上参数,而函数的返回值类型写在后面;函数名假如么有的话,那就是匿名函数!

    2. 皮亚诺整数

      1. // Peano integers are represented by a linked

      2. // list whose nodes contain no data

      3. // (the nodes are the data).

      4. // en.wikipedia.org/wiki/Peano_…

      5. // This program demonstrates the power of Go's

      6. // segmented stacks when doing massively

      7. // recursive computations.

      8. package main

      9. import "fmt"

      10. // Number is a pointer to a Number

      11. type Number *Number

      12. // The arithmetic value of a Number is the

      13. // count of the nodes comprising the list.

      14. // (See the count function below.)

      15. // -------------------------------------

      16. // Peano primitives

      17. func zero() *Number {

      18. return nil

      19. }

      20. func isZero(x *Number) bool {

      21. return x == nil

      22. }

      23. func add1(x *Number) *Number {

      24. e := new(Number)

      25. *e = x

      26. return e

      27. }

      28. func sub1(x *Number) *Number {

      29. return *x

      30. }

      31. func add(x, y *Number) *Number {

      32. if isZero(y) {

      33. return x

      34. }

      35. return add(add1(x), sub1(y))

      36. }

**