go语言就是golang_1天学会_基础篇_v1.0.3

文件名称版本号作者qq版本
go语言就是golang_1天学会_基础篇v1.0.3学生宫布8416837go1.13.4 windows/amd64

相关教程

go环境-vscode
基础、web等
go web代码生成、基于框架开发

语法

接口 实现接口函数
  1. code
package main

import "fmt"

type Car interface {
	run(typeNumber string)
}

type Jili interface {
	sleep()
	running() // 子类必须实现全部两个接口
}

type Dihao struct {
}

func (dihao Dihao) run (typeNumber string) {
	fmt.Println(typeNumber, `-小车running。。。`)
}

func (dihao Dihao) running() {
	fmt.Println(`吉利汽车running。。。`)
}

func (dihao Dihao) sleep () {
	fmt.Println(`-在帝豪车里休息。。。`)
}

type Honda struct {
}

func (honda Honda) run(typeNumber string) {
	fmt.Println(typeNumber, `-本田running。。。`)
}

func main() {
	var car Car
	car = new(Honda)
	car.run(`凌派`)
	var jili Jili
	jili = new(Dihao)
	jili.sleep()
	jili.running()
	car = new (Dihao)
	car.run(`帝豪`)
}

  1. output
凌派 -本田running。。。
-在帝豪车里休息。。。
吉利汽车running。。。
帝豪 -小车running。。。
时间
  • 基本
package main

import (
	"fmt"
	"time"
)

func main() {
	fmt.Println("hg")
	fmt.Println("Time", time.Now())
}
  • 格式化一下
	// 【注意】必须是"2006-01-02 15:04:05",否则格式化不正确
	fmt.Println("Time", time.Now().Format("2006-01-02 15:04:05"))
	fmt.Println("Time", now.Year())
字符串
package main

import (
	"fmt"
	"strings"
)

func main() {

	var strs [3]string
	strs[0] = "6e0ef25a-32f1-4405-b458-efbde3ff4ec6"
	strs[1] = "ae632042-1b77-4fd5-b76a-7ac730db8a6c"
	strs[2] = "204b7324-4ee4-4672-9900-faa8ee392432"
	replacer := strings.NewReplacer("-", "")

	for i := 0; i < len(strs); i++ {
		fmt.Println(replacer.Replace(strs[i]))
	}

}

Output:
在这里插入图片描述

list
package main

import (
	"container/list"
	"fmt"
)

func main() {

	table := list.New()
	table.PushBack(1)
	table.PushBack("ball")
	table.PushBack("orange")
	table.PushBack('x')
	table.PushFront(88.48)

	fmt.Println("长度", table.Len())

	for i := table.Front(); i != nil; i = i.Next() { // 末尾i变成nil
		fmt.Println(i.Value)
	}
}

goroutine 并发
  1. code
package main

import (
	"fmt"
	"time"
)


func doSth(msg string, NUM int) {
	for  i := 0; i < NUM; i++ {
		time.Sleep(123 * time.Millisecond)
		fmt.Println(msg)
	}
}

func main() {
	go doSth("goroutine~", 5)
	doSth("main thread~", 5)
}

  1. out:
    在这里插入图片描述
通道实现’分布式计算’
package main

import "fmt"

func sum(s []float32, compute_channel chan float32) { // chan float32 定义通道
	 var sum float32 = 0
	for _, v := range s {
		sum += v
	}
	compute_channel <- sum // 把 sum 发送到通道 compute_channel
}

func main() {
	s := []float32{3.5, 9.2, 0.3, 5, 5, 0} // 定义输入

	compute_channel := make(chan float32)
	go sum(s[:len(s)/2], compute_channel) // 多个goroutine模拟分布式计算 当前场景各计算一半
	go sum(s[len(s)/2:], compute_channel) // go命令执行后,开始并发
	x1, x2 := <-compute_channel, <-compute_channel // 从通道 compute_channel 中接收

	fmt.Println(x1, x2, x1+x2)
}
异常处理
  1. code
package main

import (
	"errors"
	"fmt"
)

func Sqrt(f float64) (float64, error) { // 多个返回
	if f < 0 {
		return 0, errors.New("math: square root of a negative number is not permitted")
	}
	// 模拟实现
	return 1, nil // 返回多个
}

func main() {
	val,err := Sqrt(-1)
	if err != nil {
		fmt.Println(`结果 == `, val, `
异常 == `, err)
	}
}

  1. output
结果 ==  0 
异常 ==  math: square root of a negative number is not permitted
控制台游戏
猜数字 二分查找法
  • 猜一个1-100以内的自然数
package main

import (
	"bufio"
	"fmt"
	"log"
	"os"
	"strconv"
	"strings"
)

func main() {
	var targetNum float64 = 100
	var num float64
	var msg string
	var count int

	for {
		fmt.Println("Please input one number")
		reader := bufio.NewReader(os.Stdin)
		input, err := reader.ReadString('\n')
		input = strings.TrimSpace(input)
		count++

		num, err = strconv.ParseFloat(input, 64)

		if err != nil {
			log.Fatal(err)
		}

		if num == targetNum {
			fmt.Println(count, `真棒,猜对了`)
			break
		} else if num > targetNum {
			msg = `大了`
		} else if num < targetNum {
			msg = `小了`
		}
		fmt.Println(`输入`, num, msg, `第`, count, `次竞猜`)
	}

}

在这里插入图片描述

解决报错

cannot find package “github.com/ethereum/go-ethereum/rpc” in any of:
  • 解决办法
go get github.com/ethereum/go-ethereum/rpc
# 如果拉不动,则到gitee或github下载源码
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值