Go语言学习实例实践文章 | 青训营

66 阅读2分钟

1.九九乘法表

package main

import "fmt"

func main() {
for i := 1; i <= 9; i++ {
	for j := 1; j <= i; j++ {
		fmt.Printf("%d * %d = %d\t", j, i, j*i)
	}
	fmt.Println()
}
}

2.水仙花问题

求100~999内的水仙花数?(水仙花数也被称为超完全数字不变数、自恋数、自幂数、阿姆斯壮数或阿姆斯特朗数,水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身。例如:1^3 + 5^3+ 3^3 = 153)

package main

import (
"fmt"
"math"
)

func main() {
for num := 100; num <= 999; num++ {
	var i = num / 100	//百位
	var j = num / 10 % 10	//十位
	var k = num % 10	//个位
	if math.Pow(float64(i), 3)+math.Pow(float64(j), 3)+math.Pow(float64(k), 3) == float64(num) {
		fmt.Println(num)
	}
}
}

3.百钱百鸡问题

我国古代数学家张丘建在《算经》一书中提出的数学问题:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?

package main

import (
"fmt"
)

func main() {
//共买100只,所以cock(鸡翁)最多20只,hen(鸡母)最多33只,chicken(鸡雏)最多100只
for cock := 0; cock < 20; cock++ {
	for hen := 0; hen < 33; hen++ {
		for chicken := 0; chicken <= 100; chicken += 3 {
			if (5*cock+3*hen+chicken/3 == 100 && cock+hen+chicken == 100) {
				fmt.Printf("鸡翁%d只,鸡母%d只,小鸡%d只\n", cock, hen, chicken)
			}
		}
	}
}
}

4.打印等腰三角形

package main

import "fmt"

func main() {
var line int = 10 //行数
for i := 0; i < line; i++ {
	for j := 0; j < line-i-1; j++ {
		fmt.Print(" ")
	}
	for k := 0; k < i*2+1; k++ {
		fmt.Print("*")
	}
	fmt.Println()
}
}

5.斐波那契数列问题

指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=3,n∈N*)

package main

import "fmt"

const NUM = 10 //多少位

func fibonacci(n int) int {
if n < 2 {
	return n
}
return fibonacci(n-2) + fibonacci(n-1)
}

func main() {
var i int
for i = 0; i < NUM; i++ {
	fmt.Printf("%d\t", fibonacci(i))
}
}

6.阶乘问题

一个正整数的阶乘(factorial)是所有小于及等于该数的正整数的积,并且0的阶乘为1。自然数n的阶乘写作n!

package main

import "fmt"

func Factorial(n uint64) (result uint64) {
if (n > 0) {
	result = n * Factorial(n-1)
	return result
}
return 1
}

func main() {
var i int = 5
fmt.Printf("%d 的阶乘是 %d\n", i, Factorial(uint64(i)))
}

7.统计输入字符个数

package main

import "fmt"

func main() {
var str string
fmt.Scan(&str)
slice := []byte(str)
m := make(map[byte]int)
for i := 0; i < len(slice); i++ {
	m[slice[i]]++
}
for k, v := range m {
	fmt.Printf("%c:%d\n", k, v)
}
}

以下是一些Go语言的实践感受:

  1. 并发编程的优势:Go语言的并发模型(goroutine和channel)非常强大和简单,使得编写多线程程序变得相对容易。这对于构建高并发、高性能的应用程序非常有帮助。并发编程变得更加安全,避免了传统线程锁所带来的许多问题。

  2. 编译速度:Go的编译速度非常快,这意味着您可以更快地得到反馈,减少了开发周期。快速的迭代和测试对于开发者来说非常重要。

  3. 标准库丰富:Go的标准库提供了大量常用的功能,从网络编程到文本处理,甚至图形绘制,都有相应的包可以使用。这减少了对第三方库的依赖,使得开发过程更加稳定。

  4. 静态类型检查:Go是一种静态类型语言,这意味着编译器在编译时会检查类型错误,这有助于捕获潜在的问题,提高了代码的质量和可维护性。

  5. 内置工具:Go语言提供了一些有用的内置工具,如go fmt用于格式化代码、go vet用于静态分析代码、go test用于单元测试等。这些工具使得代码的质量控制更加容易。

  6. 简洁的语法:Go语言的语法非常简洁,没有过多的冗余,这使得代码更容易阅读和理解。这也有助于降低新程序员的学习曲线。

  7. 开源社区:Go语言有一个活跃的开源社区,有很多优秀的开源项目和库可供使用。您可以从社区中获得支持和解决问题。

  8. 内存管理:Go的垃圾回收机制使内存管理变得容易,开发者不必手动管理内存。这减轻了一些常见的编程错误,如内存泄漏。

  9. 跨平台支持:Go语言支持多个操作系统和体系结构,因此您可以轻松地在不同平台上部署应用程序。

总体而言,Go语言被广泛认为是一门简单、高效、易于学习和有潜力的编程语言。它在云计算、微服务、网络编程等领域得到了广泛应用,越来越多的开发者选择Go来构建他们的应用程序。