您的足迹: Golang编程示例

Golang编程示例

Golang编程示例

生成随机数

package main
 
import (
	"fmt"
	"math/rand"
	"time"
)
 
 
func randrange(min, max int) int {
	return min + rand.Intn(max-min)
}
 
 
func main() {
	rand.Seed(time.Now().Unix())
 
	var m, n int
	fmt.Print("请输入数字范围:")
	fmt.Scanf("%d %d", &m, &n)
	fmt.Printf("random number is %v\n", randrange(m,n))
}

猜数字

package main // 声明包名
 
import ( // vscode会自动导入外部函数库
	"fmt"
	"math/rand"
	"time"
)
 
func randrange(min, max int) int { // 生成指定范围内的随机数
	rand.Seed(time.Now().Unix())
	return min + rand.Intn(max-min)
}
 
func main() { // golang只认 main() 这个入口函数
	fmt.Printf("猜数字\n")
	var (
		guess int
		times = 0
	)
	number := randrange(1, 100)
 
xxx: //  golang独有的打标签,就能跳出这里
	// for count := 3; count > 0; count-- { // 带有次数循环
	for { // 无限循环, golang就用for代替了while
		fmt.Printf("请输入你猜的数字:")
		fmt.Scanf("%d", &guess)
 
		switch { // 超级万能的牛逼的分支结构
		case guess < number:
			fmt.Println("小了")
			times += 1 // 类似python的语法
		case guess > number:
			fmt.Println("大了")
			times++ // 类似C的语法
		case guess == number:
			times++
			fallthrough
		default:
			time.Sleep(time.Second)
			fmt.Printf("猜对了,正确数是:%v, 猜了%v次\n", number, times)
			break xxx
		}
	}
}

计算圆角率

package main
 
import (
	"fmt"
)
 
func main() {
	var (
		pi     float64 = 0
		number         = 3.0
		n              = 0
	)
	i := 0
	pi = 1 - 1/number
	fmt.Print("输入计算次数(必须大于100000):")
	fmt.Scanf("%d", &n)
	if n < 100000 {
		n = 100000
	}
 
	for i < n {
		number += 2
		pi += 1 / number
		number += 2
		pi -= 1 / number
		i++
	}
	pi = pi * 4
	fmt.Println("进行", n, "次运算后π=", pi)
}

接口与组合范例

package main
import (
  "fmt"
  "math"
  "reflect"
)
type Igeometry interface {
  area() float64
  perim() float64
}
 
type rect struct {
  width, height float64
}
 
type circle struct {
  radius float64
}
 
func (r rect) area() float64{
  return r.width * r.height
}
 
func (r rect) perim() float64 {
  return (r.width + r.height) * 2
}
 
func (c circle) area() float64 {
  return math.Pi * c.radius * c.radius 
}
 
func(c circle) perim() float64 {
    return math.Pi * c.radius * 2
}
 
func measure(g Igeometry) {
  fmt.Println(reflect.TypeOf(g), g)
  fmt.Printf("%.2f\n",g.area())
  fmt.Printf("%.2f\n",g.perim())
}
 
func main(){
  r := rect{width: 4, height: 5}
  c := circle{radius: 5}
 
  measure(r)
  measure(c)                                                                                                
}

泛型模式的错误处理

func Try(err error) {  
	if err != nil {  
		panic(err)  
	}  
}  
 
func Try1[V any](val V, err error) V {  
	Try(err)  
	return val  
}  
 
func Try2[V1 any, V2 any](val1 V1, val2 V2, err error) (V1, V2) {  
	Try(err)  
	return val1, val2  
}  
一个例子:
 
// 不使用泛型的传统实现  
func GetExePath() string {  
	path, err := os.Executable()  
	if err != nil {  
		panic(err)  
	}  
	return path  
}  
// 使用泛型,告别 `if err != nil`  
func GetExePath() string {  
	return Try1(os.Executable())  
}  
wiki/public/golang编程示例.txt · 最后更改: 2025/11/22 03:52